12-1 lambda表达式。
# 12-1 lambda表达式。
# 匿名函数
def add(x,y):#这是非匿名函数
return x+y
# 如何把上述非匿名函数转换成匿名函数?
lambda parameter_list:expression #这是匿名函数的标准形式
lambda x,y: x+y#对应标准形式填写参数列表跟函数表达式(注意是表达式,而不是代码块)
#看看完整的书写格式
def add(x,y):
return x+y
print(add(1,2))
f = lambda x,y: x+y
print(f(1,2))
# 打印结果如图1所示
12-2 三元表达式
# 三元表达式(表达式版本的if else 语句)
# Q1:两个数字,x , y,哪个值大取哪个!!!使用三元表达式
# Python版本的三元表达式代码
# 条件为真时返回的结果 if 条件判断 else 条件为假时的返回结果
x if x > y else y #这仅仅是个表达式
# 要想有打印结果,必须用变量接收,比如:r = x if x > y else y ,看看完整代码
x = 2
y = 1
r = x if x > y else y
print (r)
# 如图2所示
12-3 map
# 12-3 map类
# 看看map这个类用在什么场景下!!!
# Q1:求下面列表的数字的平方,组成的新列表
list_x = [1,2,3,4,5,6,7,8]
def square():
return x * x
#方法1:
for x in list_x:
square(x)
# 方法2
list_x = [1,2,3,4,5,6,7,8]
def square(x):
return x * x
r = map(square,list_x)
print(list(r))
#打印结果如图1
12-4 map与lambda
# 12-4 map与lambda
# 看看两者的应用
list_x = [1,2,3,4,5,6,7,8]
r = map(lambda x: x*x ,list_x)
print(list(r))
# 打印结果如图1
# 再看几个稍微复杂点的例子
list_x = [1,2,3,4,5,6,7,8]
list_y = [1,2,3,4,5,6,7,8]
r = map(lambda x,y: x*x+y,list_x,list_y)
print(list(r))
# 打印结果如图2
list_x = [1,2,3,4,5,6,7,8]
list_y = [1,2,3,4,5,6,]
r = map(lambda x,y: x*x+y,list_x,list_y)
print(list(r))
# 打印结果如图2
list_x = [1,2,3,4,5,6]
list_y = [1,2,3,4,5,6,7,8]#打印结果取决于列表较短的那个
r = map(lambda x,y: x*x+y,list_x,list_y)
print(list(r))
# 打印结果如图2
12-5 reduce
# 12-5 reduce
# reduce使用方法
from functools import reduce
list_x = [1,2,3,4,5,6,7,8]
# 连续计算,连续调用lambda,reduce中,没有传入y,也能有计算结果的原因就是因为可以连续计算
r = reduce(lambda x,y:x+y,list_x)
print(r)
# 打印结果如图1
# (((1+2)+3)+4)这就是计算的过程
# 看看reduce的最后一个参数
from functools import reduce
list_x = [1,2,3,4,5,6,7,8]
# 连续计算,连续调用lambda,reduce中,没有传入y,也能有计算结果的原因就是因为可以连续计算
r = reduce(lambda x,y:x+y,list_x,10)#最后一个参数是初始值
print(r)
# 打印结果如图2
# 运行结果如下:(((10+1)+2)+3)
# 用下面的参数更好的看出结果:
from functools import reduce
list_x = ['1','2','3','4','5','7','8']
r = reduce(lambda x,y:x+y,list_x,'a')#最后一个参数是初始值
print(r)
# 打印结果如图3
12-8 装饰器 一
# 12-8 装饰器 一
import time
def f1():
print(time.time())
print('this is a function')
f1()
# 打印结果如图1
# 如果有一百个函数需要打印出时间怎么办?
# 对修改是封闭的,对扩展是开放的。需求如果改变,尽量不要去修改函数,要去修改扩展,适应需求变更
# 看看下面的代码!
import time
def f1():
print('this is a function')
def f2():
print('this is a function')
def print_current_time(func):
print(time.time())
func
print_current_time(f1)
print_current_time(f2)
# 打印结果如图2
# 不用装饰器还是有缺点的
12-9 装饰器 二
# 12-9 装饰器 二
import time
def decorator(func):#定义装饰器的外部函数
def wrapper():#装饰器内部定义一个函数(被封装的)
print(time.time())
func()
return wrapper
def f1():
print('this is a function')
f = decorator(f1)
f()
# 打印结果如图1
# 注意与上一节对比,发现没有什么大的不同
# 12-10 装饰器 二
import time
def decorator(func):#定义装饰器的外部函数
def wrapper():#装饰器内部定义一个函数(被封装的)
print(time.time())
func()
return wrapper
def f1():
print('this is a function')
f = decorator(f1)
f()
# 打印结果如图1
# 注意与上一节对比,发现没有什么大的不同
import time
def decorator(func):#定义装饰器的外部函数
def wrapper():#装饰器内部定义一个函数(被封装的)
print(time.time())
func()
return wrapper
@decorator
def f1():
print('this is a function')
# f = decorator(f1)加上@语法糖以后,这部分可以省略了
f1()#直接调用f1 ,这个就是装饰器的优势!!
# 打印结果如图1
···
#12-11 装饰器 四
12-10 装饰器 二
import time
def decorator(func):#定义装饰器的外部函数
def wrapper():#装饰器内部定义一个函数(被封装的)
print(time.time())
func()
return wrapper
def f1():
print('this is a function')
f = decorator(f1)
f()
# 打印结果如图1
# 注意与上一节对比,发现没有什么大的不同
import time
def decorator(func):#定义装饰器的外部函数
def wrapper():#装饰器内部定义一个函数(被封装的)
print(time.time())
func()
return wrapper
@decorator
def f1():
print('this is a function')
# f = decorator(f1)加上@语法糖以后,这部分可以省略了
f1()#直接调用f1 ,这个就是装饰器的优势!!
# 打印结果如图1
# 12-11 装饰器 四
import time
def decorator(func):#定义装饰器的外部函数
def wrapper():#装饰器内部定义一个函数(被封装的)
print(time.time())
func()
return wrapper
@decorator
def f1():#此时的f1没有传入任何参数,那么如果有参数传入装饰器需要做哪些改变?
print('this is a function')
# f = decorator(f1)加上@语法糖以后,这部分可以省略了
f1()#直接调用f1 ,这个就是装饰器的优势!!
import time
def decorator(func):#定义装饰器的外部函数
def wrapper(func_name):#装饰器内部定义一个函数(被封装的)
print(time.time())
func(func_name)
return wrapper
@decorator
def f1(func_name):#此时的f1没有传入任何参数,那么如果有参数传入装饰器需要做哪些改变?
print('this is a function named' + func_name)
# f = decorator(f1)加上@语法糖以后,这部分可以省略了
f1('test func')#直接调用f1 ,这个就是装饰器的优势!!
# 打印结果如图2
# 传入多个参数的情况
import time
def decorator(func):#定义装饰器的外部函数
def wrapper(*args):#可变参数
print(time.time())
func(*args)
return wrapper
@decorator
def f1(func_name):#此时的f1没有传入任何参数,那么如果有参数传入装饰器需要做哪些改变?
print('this is a function named' + func_name)
@decorator
def f2(func_name1,func_name2):#此时的f1没有传入任何参数,那么如果有参数传入装饰器需要做哪些改变?
print('this is a function named' + func_name1)
print('this is a function named' + func_name2)
f1('test func')
f2('test func1','test func2')
# f = decorator(f1)加上@语法糖以后,这部分可以省略了
f1('test func')#直接调用f1 ,这个就是装饰器的优势!!
# 打印结果如图3
12-12 装饰器 五
# 12-12 装饰器 五
import time
def decorator(func):#定义装饰器的外部函数
def wrapper(*args):#可变参数
print(time.time())
func(*args)
return wrapper
@decorator
def f1(func_name):#此时的f1没有传入任何参数,那么如果有参数传入装饰器需要做哪些改变?
print('this is a function named' + func_name)
@decorator
def f2(func_name1,func_name2):#此时的f1没有传入任何参数,那么如果有参数传入装饰器需要做哪些改变?
print('this is a function named' + func_name1)
print('this is a function named' + func_name2)
@decorator#若将这个屏蔽,打印结果是正确的,若不屏蔽是错误的,如何修改?!!
def f3(func_name1,func_name2,**kw):#定义一个关键字参数
print('this is a function named' + func_name1)
print('this is a function named' + func_name2)
print(kw)
f1('test func')
f2('test func1','test func2')
f3('test func1','test func2',a = 1,b = 2,c = '123')
# f = decorator(f1)加上@语法糖以后,这部分可以省略了
f1('test func')#直接调用f1 ,这个就是装饰器的优势!!
import time
def decorator(func):#定义装饰器的外部函数
def wrapper(*args,**kw):#可变参数
print(time.time())
func(*args,**kw)
return wrapper
@decorator
def f1(func_name):#此时的f1没有传入任何参数,那么如果有参数传入装饰器需要做哪些改变?
print('this is a function named' + func_name)
@decorator
def f2(func_name1,func_name2):#此时的f1没有传入任何参数,那么如果有参数传入装饰器需要做哪些改变?
print('this is a function named' + func_name1)
print('this is a function named' + func_name2)
@decorator#若将这个屏蔽,打印结果是正确的,若不屏蔽是错误的,如何修改?!!
def f3(func_name1,func_name2,**kw):#定义一个关键字参数
print('this is a function named' + func_name1)
print('this is a function named' + func_name2)
print(kw)
f1('test func')
f2('test func1','test func2')
f3('test func1','test func2',a = 1,b = 2,c = '123')
# f = decorator(f1)加上@语法糖以后,这部分可以省略了
f1('test func')#直接调用f1 ,这个就是装饰器的优势!!
作者:buaishengqi
链接:https://www.jianshu.com/p/43e20d56299d
来源:
著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。