生成器,面向过程编程,三元表达式,列表生成式,生成器表达式,匿名函数,内置函数

什么是生成器:

生成器是一个’自定义‘的迭代器,本质是个迭代器

如何实现生成器:

自定义的迭代器

def func(): print("from func") yield 1 res = func() print(res._next_) 运行结果:from func 当我们通过_next_取值时才会执行函数体代码

yield:

每一次yield都会往生成器里面添加一个值

只能在函数内部定义

yield可以保存函数的暂停状态

但凡在函数内部定义了的yield,调用函数时函数体代码不会执行,会返回一个结果,该结果就是一个生成器

yield与return的区别:

相同点:

返回值都是无限制的

不同点:

return 只能返回一个值

yield 能返回多个值

python2中:range(1,5) ——————>[1,2,3,4]

python3中:range(1,5) ———————>range对象——————>生成器

创建一个自定义生成器,自定义range功能 def my_range(start,end,move=1): while start <end: yield start start += move 面向过程编程

面向过程编程是一门编程思想

核心是过程 ————————>指的是一种解决问题的步骤一种机械式的思维方式

优点:

将复杂的问题流程化,进而简单化

缺点:

若修改当前程序设计的某一部分,会导致其他部分同时需要修改,拓展性差

# # 1.先让用户输入用户名和密码,用户角色,校验合法性 def get_user_pwd_role(): while True: # 先让用户输入用户名 username = input(\'请输入用户名:\').strip() # 对用户名进行校验,校验是否是字母或中文 if username.isalpha(): break else: print(\'用户名不合法!\') while True: # 让用户输入密码 password = input(\'请输入密码:\').strip() re_password = input(\'请再次输入密码:\').strip() # 校验两次输入的密码是不是一致 if password == re_password: break else: print(\'两次输入的密码不一致!\') user_role = input(\'请输入您的用户角色:\').strip() return username, password, user_role # # 2.拼接用户字符串 def cut_user_pwd_role(username, password, user_role): user_pwd_role_str = f\'{username}:{password}:{user_role}\n\' return user_pwd_role_str, username # # 3.保存用户数据,写入文件中 def save_data(user_pwd_role_str, username): with open(f\'{username}.txt\', \'w\', encoding=\'utf-8\') as wf: wf.write(user_pwd_role_str) # # 注册功能Demo # def register(): # # 1.设计先让用户输入用户名和密码,用户角色,校验合法性,得到合法的用户名与密码 # user, pwd = get_user_pwd() # # # 2.设计字符串的拼接, 得到拼接好的字符串 # user_pwd_str = cut_user_pwd(user, pwd) # # # 3.开始写入文件 # save_data(user_pwd_str) # def register(): username, password, user_role = get_user_pwd_role() user_pwd_role_str, username = cut_user_pwd_role(username, password, user_role) save_data(user_pwd_role_str, username) register() root:root:普通用户 三元表达式:

可以将 if...else...分支变成一行

语法

条件成立时返回左边的值,if判断条件,else条件不成立时返回右边的值

求两个值的大小: def max(num1,num2) return num1 else: return num2 res = num1 if num1>num2 else num2 条件成立时,返回左边的值;条件不成立时,返回右边的值 列表生成式:

将list中的值,依次取值,添加到new_list中

可以一行实现生成列表

语法:

[值 for 可迭代对象中取出的每一个值 可迭代对象 + if 判断]

for 的右边是循环次数,并且可以取出可迭代对象中的每个值

for的左边可以为当前列表添加值

[line for line in range(1,101)] [f\'1{line}\' for line in range(1,101)] 生成器表达式(生成器生成式):

​ 生成器生成式:若数据量大时采用

()——————>返回生成器

(lline for line in range(1,6))

优点:节省资源 缺点:取值不便

列表生成式:若数据量小时采用

[line for line in range(1,6)]

缺点:浪费资源 优点:可以依赖索引取值

匿名函数:

无名字的函数 lambda

有名函数:

def func():

pass

匿名(1,return 已经自动添加了)

lamdba 匿名() : return 1

lambda : 1 左边是参数,右边是返回值

需要一次性使用

单独使用将毫无意义,它必须配合内置函数才有意义

内置函数:

python内部提供的内置方法

max,min,sorted

max求最大值 max(可迭代对象)

max内部会通过可迭代对象进行for循环取出,每个值,进行比较

获取dict1中薪资最大的人的名字 dict1={ \'tank\' :100, \'egon\' :500, \'sean\' :200, \'jason\' :50 } max(dict1)比较的是ascii中的字符串大小 max(dict1, key=lambda x:dict[x])

sorted

进行 排序

默认升序(从小到大)

reverse 默认是false (从大到小)

将dict1中的名字根据薪资进行排序(由小到大) sorted(dict1,key=lambda x:dict1[x]) (由大到小) res = sorted(dict1, key=lambda x: dict1[x],reverse=True)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwggfz.html