Python初学11-函数式编程

1、枚举Enum

class fruit1():
    apple = 1
print(fruit1.apple)   

from enum import Enum
#所有的枚举都是Enum的子类

class FRUIT(Enum):
    APPLE = 1
    APPLE1 = 1
    ORAGNE = 2
    BANANA = 3

print(FRUIT.APPLE)
   
#FRUIT.APPLE=2  #失败
fruit1.apple=2  #成功

for x in FRUIT:
    print(x)

【注】    1、打印输出为标签    2、不可以改变值    3、标签不会重复

print("------")
print(FRUIT.APPLE,type(FRUIT.APPLE))            #FRUIT.APPLE <enum 'FRUIT'>
print(FRUIT['APPLE'],type(FRUIT['APPLE']))      #FRUIT.APPLE <enum 'FRUIT'>
print(FRUIT.APPLE.name,type(FRUIT.APPLE.name))  #APPLE <class 'str'>
print((FRUIT.APPLE is FRUIT.APPLE))             #True
print("------")
for x in FRUIT:
    print(x)
'''
标签值不会重复
FRUIT.APPLE
FRUIT.ORAGNE
FRUIT.BANANA
'''
print("------")
for x in FRUIT.__members__:
    print(x)
'''
所有标签
APPLE
APPLE1
ORAGNE
BANANA
'''
print("------")
for x in FRUIT.__members__.items():
    print(x)

2、匿名函数 lambda

def add(x,y):
    return x+y
print(add(1, 2))


'''
lambda parameter_list【参数列表】 : expression【表达式】
不能在lambda里添加代码块 如 a=x+y
'''
f = lambda x,y: x+y
print(f(1,2))


可以使用三元表达式
'''
三元表达式  bool?A:B
a>b ? A:B
'''

3、过滤函数 Filter

list_x=[1,0,1,0,1,1,0]
r = filter(lambda x:True if x==1 else False,list_x)
print(list(r))


'''
list_x=[1,0,1,0,1,1,0]
r = filter(lambda x:True if x==1 else False,list_x)
print(list(r))
'''
filter 通过lambda返回的真假过滤
'''
#保留所有小写
print('a'<'b')
list_y=['a','b','C','D','e','F']
r = filter(lambda x:True if 'a'<=x and x <='z' else False,list_y)
print(list(r))

4、映射map

list_x = [1,2,3,4,5]

def square(x):
    return x*x

r = map(square,list_x)
print(r,list(r))


r = map(lambda x:x*x,list_x)
print(r,list(r))

list_x = [1,2,3,4,5]
list_y = [1,2,3,4,5,6,7]
r = map(lambda x,y:x+y,list_x,list_y)
print(list(r))
r = map(lambda x,y:x+y,list_y,list_x)
print(list(r))
#以最短的那个为标准,一一计算

5、reduce

from functools import reduce
'''
在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,
它现在被放置在 fucntools 模块里,如果想要使用它,
则需要通过引入 functools 模块来调用 reduce() 函数

连续计算,连续调用lambda
'''

list_x = [1,2,3,4,5]
r = reduce(lambda x,y:x+y, list_x) 
print(r)#序列求和

#'A'是给予的初始参数
list_y=['a','b','c','c']
r = reduce(lambda x,y:x+y,list_y,'A')
print(r)

6、装饰器

def fun_per(f):
    def fun(fun_name):
        print('fun_per')
        f(fun_name)
    return fun

def f1(fun_name):
    print('fun_name' + fun_name)
f1('f1')

@fun_per
def f2(fun_name):
    print('fun_name' + fun_name)
f2('f2')



# *fun_name 可以有多个同类型参数     **kw 可以有多个不同参数类型的参数 
def fun_per_2(f):
    def fun(*fun_name,**kw):
        print('fun_per')
        f(*fun_name)
    return fun

def f2_1(fun_name):
    print('fun_name' + fun_name)
f2_1('f1')

@fun_per_2
def f2_2(fun_name1,fun_name2):
    print('fun_name--' + fun_name1+"--"+fun_name2)
f2_2('f2','f2')

@fun_per_2
def f2_3(fun_name,a,b):
    print('f3_2--'+fun_name+'--'+str(a)+"--"+str(b))
f2_3('fun_name', 10, True)

猜你喜欢

转载自blog.csdn.net/qq_34819372/article/details/80678725