二分法、三元表达式及匿名函数

1|0二分法、三元表达式及匿名函数

1|1一、算法简介及二分法

1.算法的概念 算法通俗来讲就是解决问题的有效方法 算法可以在有限的空间和时间内用定义明确的形式语言来表示,以计算函数 2.常见的二分法 二分法,快拍,插入,堆排,链表,桶排,双向链表,约瑟夫问题等 3.算法的应用场景及算法的前景 算法主要有推荐算法还有成像算法 学好算法前途一片光明,算法相关联的模型,机器学习,人工智能,机器人,都是现下比较热门的,学习算法也会很好的锻炼我们的逻辑思维能力,在平时生活中我们得多去接触算法,多练多写。 4.二分法 二分法是最简单的算法 要求:待查找的数据集必须是有序的 eg: l1 = [11,22,33,44,55,66,77,88,99,123,456,789] def get_num(l1,target_num): # 添加递归韩顺的结束条件,不然会报错 if len(l1) == 0: print('没找到啊啊啊') return # 按照数据集的长度,取中间数,然后索引取值 middle_num = len(l1) // 2 #判断中间数和目标数的大小 if target_num > l1[middle_num]: # 切片保留列表右边一半 right_num = l1[middle_num + 1:] print(right_num) return get_num(right_num,target_num) elif target_num < l1[middle_num]: # 切片保留列表左边一半 left_num = l1[:middle_num] print(left_num) # 针对左边的表进行二分并判断 return get_num(left_num,target_num) else: print(l1[middle_num]) get_num(l1,22) # [11, 22, 33, 44, 55, 66] # [11, 22, 33] # 22

img

1|2二、三元表达式

1.三元表达式中有三元:一元为if条件语句,二元为条件成立所返回的数据值, 三元为条件不成立所返回的数据值。 2.三元表达式执行顺序是,先判断if条件是否成立,条件成立返回if前面的数据 值,条件不成立返回else后面得数据值 3.基本形式: 数据值1 if条件 else 数据值2 条件成立则使用数据值1,条件不成立则使用数据值2 4.三元表达式的应用场景: 当一个结果是二选一的时候,使用三元表达式更方便一点 多个结果不推荐使用三元表达式
普通代码: name = 'jason' if name == 'jason': print('老师') else: print('学生') 简化后的代码: name = 'jason' res = '老师' if name == 'jason' else '学生' print(res)
普通代码: def func(a,b): if a > b: return a else: return b func = func(6,7) print(func) 简化后的代码: def func(a,b): return a if a > b else b func = func(6,7) print(func)

1|3三、各种生成式

1|01.列表生成式

1.列表生成式顾名思义就是产生新的列表,列表的组成是多个数据值以逗号隔开用中括号括起来,列表中的数据以for循环的形式添加到昕的列表中,可以设置条件将指定的数据值添加到列表 2.基本形式: 生成列表 for循环 if条件(可有可无)
# 给列表中所有人名的后面加上_a的后缀 1.方法1l1 = ['jia','jason','tom','jack'] data_num = [] for i in l1: data = f'{i}_a' data_num.append(data) print(data_num) 2.方法2data_num = [name +"_a" for name in l1] print(data_num) 3.加强版 data_num = [name +"_a" for name in l1 if name == 'jason'] print(data_num)

1|02.字典生成式

1.能够被for循环的数据类型都可以用字典生成新的字典,字典以k:v键值对的形式以逗号隔开用大括号括起来,一般不使用字典生成式,因为数据可能需要修改 2.基本形式: k:v for循环 if条件
eg: s1 = 'hello' for i,j in enumerate(s1,start=100): # enumerate用于指定索引起始值 print(i,j) d1 = {i:j for i,j in enumerate('hello')}

1|43.集合生成式

1.能够被for循环的数据类型都可以生成新的集合,通过循环将目光数据都添加到昕的集合中 2.基本形式: 生成集合元素 for循环 if条件
l1 = [11,22,33,44,55] data_num = {i+1 for i in l1 if i != 44} print(data_num) # {56, 34, 12, 23}

1|04.元组

元组没有生成式,他有生成器,迭代生成器

1|5四、匿名函数

匿名就是没有名字,那么匿名函数就是没有函数名的函数 语法结构: lambda 形参(可多个):返回值 普通代码: def func(a,b): return a + b func = func(22,44) print(func) 简化代码: res = lambda a, b :a+b ret = res(66,77) print(ret) # 匿名函数一般不单独使用,需要配合其他函数一起使用

1|6五、常见内置函数

1.map() 映射 l1 = [1,2,3,4,5] res = map(lambda x:x+1,l1) print(list(res)) 2.max/min(最大,最小值) l1 = [1,2,3,4,5] # res = map(lambda x:x+1,l1) # print(list(res)) res = max(l1) print(res) 其他写法: d1 = { 'jason':'123', 'jia':'111', 'tom':'222' } def func(a): return d1.get(a) res = max(d1,key=func) print(res) 3.reduce # 传多个值,返回一个值 from functools import reduce l1 = [11, 22, 33, 44, 55, 66, 77, 88] res = reduce(lambda a, b: a + b, l1) print(res)

1|7六、昨日作业详解

1.利用有参装饰器编写多种用户登录校验策略 """ 1.直接写死的 jason 123 2.数据来源于列表 ['jason|123','kevin|321','tony|222'] 3.数据来源于文件 jason|123\n tom|321\n """
def login_auth(codn): def outter(func_name): def inner(*args,**kwargs): username = input('name>>>').strip() pwd = input('pwd>>>').strip() if codn == 'absolute': if username == 'jason' and pwd == '123': res = func_name(*args,**kwargs) return res else: print('用户名或者密码有误') elif codn == 'list_type': user_list = ['jason|123','jia|222'] user_data = (f'{username|pwd}') if user_data in user_list: res = func_name(*args, **kwargs) return res else: print('用户名或者密码有误') elif codn == 'file_type': with open(r'a.txt','r',encoding='utf8') as f: for i in f: real_name,real_pwd = f.split('|') if real_name == username and real_pwd.strip('\n') == pwd: res = func_name(*args, **kwargs) return res return inner return outter @ login_auth('absolute') def index(*args,**kwargs): print('from index') @ login_auth('list_type') def func(*args,**kwargs): print('from func') @ login_auth('file_type') def func1(*args,**kwargs): print('from func1') index() func() func1()

1|8七、今日作业

有下列用户数据 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']} } 并有三个函数 def func1(): pass def func2(): pass def func3(): pass 要求:调用上述三个函数的时候需要从user_data中校验用户身份是否正确 并获取当前登录用户拥有的可执行函数功能编号即键access对应的功能编号列表 func1是1、func2是2、func3是3 并且一旦用户登录成功之后后续函数的调用不再校验用户身份 请思考如何获取函数功能编号 如何校验用户身份 如何校验权限 ps:装饰器知识 附赠:实现上述主体功能即可 其他扩展优化功能可暂且不写 ''' 1.先编写校验用户身份的装饰器 2.然后再考虑如何保存用户登录状态 3.再完善各种需求 ''' 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']} }
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']} } # while True: print(''' 1.执行用户1 2.执行用户2 3.执行用户3 ''') a = input('请输入您要操作的编号').strip() is_login = False def login_auth(a): def outter(func_name): def inner(*args,**kwargs): global is_login,user_id if is_login: if a in user_data.get(user_id).get('access'): res = func_name(*args, **kwargs) return res else: print('很抱歉您没有权限操作') return user_id = input('请输入您的编号>>').strip() username = input('username>>>').strip() password = input('password>>>').strip() if username == user_data.get(user_id).get('name') and password == user_data.get(user_id).get('pwd'): is_login = True if a in user_data.get(user_id).get('access'): res = func_name(*args, **kwargs) return res else: print(f'没有权限执行func{a}') else: print('用户名或者密码有误') return inner return outter @login_auth('1') def index(): print('from index') @login_auth('2') def index1(): print('from index1') @login_auth('3') def index2(): print('from index2') while True: if a == '1': index() break elif a == '2': index1() break elif a == '3': index2() break else: print('没有您要操作的编号') break

__EOF__

本文作者泡芙有点甜
本文链接https://www.cnblogs.com/zx0524/p/16789564.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   小王应该在学习!  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示