Python语法练习
注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hive Flume等等~写的都是纯干货,各种顶会的论文解读,一起进步。
Python语法练习_函数式编程
#博学谷IT学习技术支持
函数式编程练习
先写给类,通过静态,写通用代码,隔离变换。
其中func_condition是一个函数,作为参数
class ListHelper(object):
@staticmethod
def find_all(list_target, func_condition):
for item in list_target:
if func_condition(item):
yield item
@staticmethod
def find_one(list_target, func_condition):
for item in list_target:
if func_condition(item):
return item
@staticmethod
def get_count(list_target, func_condition):
count_value = 0
for item in list_target:
if func_condition(item):
count_value += 1
return count_value
使用上面定义的静态方法,其中将函数作为参数传入其中,也可传入匿名函数lambda
from list_helper import ListHelper
class SkillData(object):
def __init__(self, id, name, atk_ration, duration):
self.id = id
self.name = name
self.atk_ration = atk_ration
self.duration = duration
def __str__(self):
return str(self.id) + " " + self.name
list_skill = [
SkillData(101, "乾坤大挪移", 5, 10),
SkillData(102, "降龙十八掌", 8, 5),
SkillData(103, "葵花宝典", 10, 2)
]
def condition(obj):
return obj.name == "葵花宝典"
result0 = ListHelper.find_one(list_skill, condition)
print(result0)
iterator = ListHelper.find_all(list_skill, lambda obj: len(obj.name) > 4)
for item in iterator:
print(item)
result1 = ListHelper.get_count(list_skill, lambda obj: obj.duration <= 5)
print(result1)
内置高级函数其实也是一种函数式编程
本质也是函数作为参数,提取共性代码,隔离变换。
class Enemy(object):
def __init__(self, name, hp, atk, defense):
self.name = name
self.hp = hp
self.atk = atk
self.defense = defense
def __str__(self):
return str(self.name) + " " + str(self.hp) + " " + str(self.atk) + " " + str(self.defense)
list01 = [
Enemy("01玄冥二老", 86, 120, 58),
Enemy("02成昆", 0, 100, 5),
Enemy("03谢逊", 120, 130, 60),
Enemy("04灭霸", 0, 1309, 690),
]
# 内置高阶函数
# 需求:获取所有hp等于0的人
result1 = filter(lambda obj: obj.hp == 0, list01)
for item in result1:
print(item)
# 需求:获取所有敌人的姓名
print("-------------------------------------")
result2 = map(lambda obj: obj.name, list01)
for item in result2:
print(item)
# 需求:获取血量最大的敌人
print("-------------------------------------")
result3 = max(list01, key=lambda obj: obj.hp)
# result3 = min(list01, key=lambda obj: obj.hp)
print(result3)
# 需求:根据攻击力排序
print("--------------------------------------")
result4 = sorted(list01, key=lambda obj: obj.atk, reverse=True)
for item in result4:
print(item)
函数式编程主要是将一个函数做为参数。起到一个函数内调用另外一个函数的目的。其思想函数为了写通用代码,隔离变换,减少代码的重复。
也可以通过类的静态方法,融入到面向对象中。