三元表达式及匿名函数
作者:互联网
目录
-
三元表达式
-
列表生成式
-
字典生成式
-
匿名函数
-
三元表达式
""" 语法结构 if条件成立时则执行返回值 if条件不成立时则执行else的返回值 return 条件成立时的返回值 if 条件 else 条件不成立时的返回值 """ def user_info(name,password): if name == 'jason' and password == '123': return 123 return 321 res = user_info('jason','123') print(res) def user_info(name,password): return 123 if name == 'jason' and password == '123' else 321 res = user_info('jason','123') print(res)
列表生成式
""" 新列表等于改变条件for循环旧列表中的数 l2 = [i for i in range(5)] """ l1 = [0, 1, 3, 5, 7, 13] # 将取出的数据放入新的列表 # 创建新的列表 l2 = [] for i in range(5): l2.append(i) print(l2) # [0, 1, 2, 3, 4] l2 = [i for i in range(5)] print(l2) # [0, 1, 2, 3, 4]
字典生成式
username = {i: 'kevin' for i in range(10)} print(username)
集合生成式
l1 ={i for i in range(100) if i == 33} print(l1)
匿名函数
1.定义:没有函数名的函数 2.语法结构:lambda 形参:返回值 lambda x:x*10 res = lambda x: x*10 print(res(20)) lambda name: 'jason' res = lambda name: 'jason' print(res('name')) 3.匿名集合内置函数的使用 3.1 max()最大值 l1 = [10, 99, 89, 123, 157] print(max(l1)) 3.2 min()最小值 l1 = [10, 99, 89, 123, 157] print(min(l1)) 3.3 map()映射 l1 = [12, 15, 22, 34] # 给列表中每个值加20 for循环 l2 = [] for i in l1: i1 = i + 20 l2.append(i1) print(l2) # 列表生成式 l2 = [i+20 for i in l1] print(l2) # map() res = map(lambda i: i+20,l1) print(res) # <map object at 0x000001DE8217AC88> print(list(res)) # [32, 35, 42, 54] 3.4 filtre()移除 l1 = [12, 15, 22, 34] res = filter(lambda i:i == 22, l1) print(res) # <filter object at 0x00000266259F0408> print(list(res)) # [22] 3.5 reduce()对序列中的元素进行累计返回函数的计算结果 l1 = (1, 2, 3, 5, 8) from functools import reduce def add(x,y): return x+y print(reduce(add,l1)) # 19 3.6 zip()用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象 l1 = [1, 3, 7, 9] l2 = ['a', 'b', 'c', 'd'] res = zip(l1, l2) print(res) # <zip object at 0x000002AF01FC0588> print(list(res)) # [(1, 'a'), (3, 'b'), (7, 'c'), (9, 'd')] l1 = [1, 3, 7, 9, 34, 45] l2 = ['a', 'b', 'c', 'd'] res = zip(l1, l2) print(res) # <zip object at 0x000002AF01FC0588> print(list(res)) # [(1, 'a'), (3, 'b'), (7, 'c'), (9, 'd')] l1 = (1, 3, 7, 9, 34, 45) l2 = ('a', 'b', 'c', 'd') l3 = (9, 13, 45) res = zip(l1, l2, l3) print(res) # <zip object at 0x0000026A7F07AF88> print(list(res)) # [(1, 'a', 9), (3, 'b', 13), (7, 'c', 45)]
作业
每个人将多层装饰器及有参装饰器的执行流程用文字具体描述出来 1.多层装饰器 多个装饰器运用到一个函数身上,运行顺序看被装饰函数身上有几个语法糖,以紧挨被装饰函数的语法糖从上往下执行,遇到最后一个才使用相同变量名传给装饰器函数使用,语法糖的使用时会自动将紧挨着函数名当做参数传递给@符号后面的函数名加括号调用 定义: 1.先执行紧挨被装饰函数的语法糖@outter3,传入wrapper3=outter3(index)执行func3=(真正的index函数)执行print('加载了outter3') 2.再执行语法糖@outter2,传入wrapper3=outter2(wrapper3)执行func2=wrapper3的函数,执行print('加载了outter2') 3.其次执行语法糖@outter1,传入indec=outter1(wrapper2)执行func1=wrapper2执行print('加载了outter1') 调用: 1.调用index(),index时wrapper1,执行print('执行了wrapper1') 2.func1=wrapper2,执行 print('执行了wrapper2') 3.func2=wrapper3,执行print('执行了wrapper3') 4.func3=真正的index函数,执行print('from index') def outter1(func1): print('加载了outter1') def wrapper1(*args, **kwargs): print('执行了wrapper1') res1 = func1(*args, **kwargs) return res1 return wrapper1 def outter2(func2): print('加载了outter2') def wrapper2(*args, **kwargs): print('执行了wrapper2') res2 = func2(*args, **kwargs) return res2 return wrapper2 def outter3(func3): print('加载了outter3') def wrapper3(*args, **kwargs): print('执行了wrapper3') res3 = func3(*args, **kwargs) return res3 return wrapper3 @outter1 index = outters1(outters2) @outter2 outters2 = outters2(outters3) @outter3 outtres3 = outters3(index) def index(): print('from index')
2.有参装饰器
由于装饰器内部数据来源存在多种,给装饰器传递多余的参数,所以要通过传值方式实现这种功能,传参方式通过闭包函数在外层加函数并传入形参。
步骤:
1.首先通过闭包函数传参,调用函数index(),执行函数上方语法糖@outer('文件','jason')由于函数名加括号执行优先级最高,执行outer('文件','jason'),文件传给形参condition,执行def login_auth(func_name),返回值login_auth
2.其次执行语法糖@longin_auth,执行函数longin_auth,返回值inner,执行inner函数,输出print('from index')获得用户输入信息,判断数据来源条件,输入的位置形参是('文件','jason'),打开文件with open(r'a.txt','r',recoding='utf8')as f:调取数值比对,正确输出输出printprint('使用文件作为数据来源 比对用户数据'),姓名比对正确输出print('VIP')
def outer(condition,type_user):
def login_auth(func_name): # 这里不能再填写其他形参
def inner(*args, **kwargs): # 这里不能再填写非被装饰对象所需的参数
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 应该根据用户的需求执行不同的代码
if type_user =='jason':print('VIP')
if condition == '列表':
print('使用列表作为数据来源 比对用户数据')
elif condition == '字典':
print('使用字典作为数据来源 比对用户数据')
elif condition == '文件':
print('使用文件作为数据来源 比对用户数据')
else:
print('去你妹的 我目前只有上面几种方式')
return inner
return login_auth
@outer('文件','jason') index = outer(index) index = login_auth(index)
def index():
print('from index')
index()
标签:index,res,匿名,l2,def,l1,print,三元,表达式 来源: https://www.cnblogs.com/040714zq/p/16456268.html