# 当需求仅仅是二选一的情况下 那么推荐使用三元表达式defnum_max(a, b):if a > b:return a
else:return b
# 三元表达式defnum_max(a, b):return a if a > b else b
name ='jason'if name =='jason':print('老师')# 简化步骤:简单代码只有一行 那么可以直接在冒号后面编写else:print('老师')# 三元表达式
res ='老师'if name =='jason'else'学生'print(res)'''
数据值1 if 条件 else 数据值2
条件成立则使用数据值1 条件不成立则使用数据值2
不推荐多个三元表达式嵌套
'''
各种生成式/表达式/推导式
name_list =['jason','kevin','oscar','tony','jerry']# 给列表中所有人名的后面加上_NB的后缀'''传统做法'''
new_list =[]for name in name_list:
new_name =f'{name}_NB'
new_list.append(new_name)print(new_list)'''列表生成式'''
res =[name +'_NB'for name in name_list]# res = ['%s_NB' % name for name in name_list]# res = [f'{name}_NB'for name in name_list]print(res)# ['jason_NB', 'kevin_NB', 'oscar_NB', 'tony_NB', 'jerry_NB']'''复杂情况'''
new_list =[name +'_NB'for name in name_list if name =='jason']print(new_list)# ['jason_NB']
new_name =['大赤佬'if name =='jason'else'大赤佬'for name in name_list if name !='jason']print(new_name)# ['小赤佬', '小赤佬', '小赤佬', '小赤佬']'''字典生成式'''# 枚举'''
enumerate() 针对该方法使用的for循环取值
每次会产生两个结果
第一个是从0开始的数字
第二个是被循环的对象里面的元素
'''
s1 ='hello wrold'for j, i inenumerate(s1):print(j, i)# 打印出来的结果一个是j从0开始的数字 一个是i被循环对象中的元素for i, j inenumerate(s1, start=100):print(i,j)# 打印出来的结果是从一个100开始的数字 一个是被循环对象中的元素
d1 ={i:j for i, j inenumerate(s1)}# i是从0开始的数字 j是被循环对象中的元素print(d1)# {0: 'h', 1: 'e', 2: 'l', 3: 'l', 4: 'o', 5: ' ', 6: 'w', 7: 'o', 8: 'r', 9: 'l', 10: 'd'}'''集合生成式'''
res ={i for i in'hello'}print(res)# 无序去重{'h', 'l', 'o', 'e'}'''元组生成式''' 没有元组生成式 下列的结果是生成器
匿名函数
# 匿名函数:没有名字的函数 需要使用关键字lambda'''
语法格式
lambda 形参:返回值
'''print(lambda x: x**2)# <function <lambda> at 0x000001F0817D60D0>defindex():passprint(index)# <function index at 0x000001F0817D60D0>
res =lambda x: x **2print(res(2))# 4
使用场景
lambda a, b: a+b
匿名函数一般不单独使用 需要配合其他函数一起使用
常见内置函数
1.map() 映射
l1 =[1,2,3,4,5,6]# 给列表中的每一个元素加1deffunc(a):return a +1
res =map(func, l1)# 循环获取l1列表中每一个元素并传递给func函数再保存返回值print(res)# <map object at 0x000002598FB4B470>print(list(res))# [2, 3, 4, 5, 6, 7]
ret =map(lambda s: s+1, l1)# 循环获取l1列表每一给元素并传递给匿名函数保存返回值print(list(ret))# [2, 3, 4, 5, 6, 7]
2.max() \ min()
l1 =[22,33,44,55]
res =max(l1)print(res)# 55
ret =min(l1)print(ret)# 22
d ={'jason':3000,'Bevin':1000000,'Ascar':10000000000,'aerry':88888}# 取出数字最大的人
错误用法 print(max(d))# jason'''
A-Z: 65-90
a-z: 97-122
'''deffunc(k):return d[k]print(max(d, key=func))# Ascarprint(max(d, key=lambda k: d.get(k)))# Ascar
3.reduce 传多个值 返回一个值
# reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)from functools importreduce
l1 =[22,33,22,44,77,55,88,99,33]
res =reduce(lambda a, b: a + b, l1)# a:22 b:33得到55则 a:55 b:22得到77则 a:77 b:44....print(res)# 473
rel =reduce(lambda a, b: a * b, l1)print(rel)# 855652058110080
ret =reduce(lambda a, b: a + b, l1,100) 还可以添加值 # a:100 b:22得到122则 a:122 b:33得到155则a:155 b:22print(ret)# 573
练习
有下列用户数据
user_data ={'1':{'name':'jason','pwd':'123','access':['1','2','3']},'2':{'name':'kevin','pwd':'321','access':['1','2']},'3':{'name':'oscar','pwd':'222','access':['1']}}
并有三个函数
deffunc1():passdeffunc2():passdeffunc3():pass
要求:调用上述三个函数的时候需要从user_data中校验用户身份是否正确
并获取当前登录用户拥有的可执行函数功能编号即键access对应的功能编号列表
func1是1、func2是2、func3是3
并且一旦用户登录成功之后后续函数的调用不再校验用户身份
请思考如何获取函数功能编号 如何校验用户身份 如何校验权限
ps:装饰器知识 附赠:实现上述主体功能即可 其他扩展优化功能可暂且不写
user_data ={'1':{'name':'jason','pwd':'123','access':['1','2','3']},'2':{'name':'kevin','pwd':'321','access':['1','2']},'3':{'name':'oscar','pwd':'222','access':['1']}}
tag_dict ={"user":None,"index":None}deflogin():
user =input('请登入您的账号>>>:').strip()
password =input('请输入你的密码>>>:').strip()return user, password
deflogin_auth(mode):defouter(func):definner(*args,**kwargs):if tag_dict['user']==None:
user, password = login()for data in user_data:if user_data[data].get('name')== user and user_data[data].get('pwd'):print('登入成功')
tag_dict['user']= user
tag_dict['index']= mode
if mode in user_data[data].get('access'):
res = func(*args,**kwargs)return res
else:print('对不起你没有权限!')returnelse:print('用户名或密码错误')returnelse:
tag_dict['index']= mode
for i in user_data:if user_data[i]['name']== tag_dict['user']:if tag_dict['index']in user_data[i]['access']:
res = func(*args,**kwargs)return res
else:print('对不起你没有权限')return inner
return outer
@login_auth('1')deffunc1():print('执行功能项1')@login_auth('2')deffunc2():print('执行功能项2')@login_auth('3')deffunc3():print('执行功能项3')
dic ={'1': func1,'2': func2,'3': func3,}whileTrue:print('''
1.功能项1
2.功能项2
3.功能项3
''')
choice =input('请选择您的功能项>>>:').strip()if choice in dic:
res = dic.get(choice)()else:print('暂无该功能项')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!