Python语法练习_函数式编程

Python语法练习

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)


总结

函数式编程主要是将一个函数做为参数。起到一个函数内调用另外一个函数的目的。其思想函数为了写通用代码,隔离变换,减少代码的重复。
也可以通过类的静态方法,融入到面向对象中。

猜你喜欢

转载自blog.csdn.net/weixin_53280379/article/details/128949324