函数——生成器,面向过程编程,三元表达式,生成式,内置函数
Posted guojieying
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数——生成器,面向过程编程,三元表达式,生成式,内置函数相关的知识,希望对你有一定的参考价值。
今日内容概要:
一、生成器(掌握)
二、面向过程编程(重点)
三、三元表达式(重点)
四、生成式(重点)
五、内置函数(掌握)
内容详解:
一、生成器
生成器:就是一种自定义的迭代器,是用来返回多次值
自定义迭代器的好处:节省内存
return只能返回一次值,函数就立即结束了
yield
1、可以挂起函数,保存函数的运行状态
2、可以用来返回多次值
如何得到生成器(自定义的迭代器):
函数内但凡存在yield关键字,调用函数不会执行函数体代码,会得到一个返回值,该返回值就是我们自定义的生成器
def func(): print(‘111‘) yield 1, 2 print(‘222‘) yield print(‘333‘) yield 3 print(‘444‘) # 如何得到生成器(自定义的迭代器): # 函数内但凡存在yield关键字,调用函数不会执行函数体代码,会得到一个返回值,该返回值就是我们自定义的生成器 g = func()#必须要运行fun()后才会有下面其他执行 print(g) #打印出来<generator object func at 0x00000000022DA890> generator说明产生一个生成器 g.__iter__() g.__next__()#迭代器对象运行后打印 111 res1 = next(g)#打印222 print(res1)# 返回yield 的返回值 None res2 = next(g)#打印333 print(res2)# 返回yield 的返回值3 res3 = next(g)#打印444后报错 # print(res3) next(g)#报错
示范一: def my_range(start, stop, step=1): while start < stop: yield start start += step g=my_range(1,5) print(next(g))#1 print(next(g))#2 print(next(g))#3 print(next(g))#4 print(next(g))#报错 示范二: def my_range(start, stop, step=1): while start < stop: yield start start += step for i in my_range(1,5000): print(i)#打印出1到4999不会报错
二、面向过程编程
1、编程思想就是编写程序的套路,与具体的技术点无关
2、面向过程
核心是过程二字,过程就是解决问题的步骤,即先干啥、再干啥、后干啥
基于面向过程编程就好比在设计一条条的流水线
优点:将复杂的问题流程化、进而简单化
缺点:所有环节耦合到一起,环环相扣,如果要修改某个环境,有可能会牵一发而动全身,扩展性差
ps:函数编程,不是面向过程编程,因为函数是技术点,二编程与具体技术点无关
三、三元表达式
传统: def max2(x,y): if x > y: return x else: return y res=max2(1,2) print(res)
三元表达式: x=1 y=2 res=x if x > y else y print(res)
#res=条件成立时返回的值 if 条件 else 条件不成立时的返回值
四、生成式
1、列表生成式
传统: l=[] for i in range(11): if i > 3: l.append("x") print(l) 列表生成式: l = ["x" for i in range(11) if i > 3] print(l)
# 示范1: names = ["egon_nb", "lxx_sb", "猴子_sb", "jason_sb"] """ 传统: l=[] for name in names: if name.endswith("sb"): l.append(name) """ l = [name for name in names if name.endswith("sb")] print(l)
# 示范2: names = ["lxx", "猴子", "jason"] print([name+"_sb" for name in names])
2、字典生成式
dic = {"name": "egon", "age": 18, "gender": "male", "level": 10} new_dic = {k.upper(): v for k, v in dic.items() if k != "level"} print(new_dic)#{‘NAME‘: ‘egon‘, ‘AGE‘: 18, ‘GENDER‘: ‘male‘} new_dic = {k+"_": str(v) for k, v in dic.items() if k != "level"} print(new_dic)#{‘name_‘: ‘egon‘, ‘age_‘: ‘18‘, ‘gender_‘: ‘male‘}
3、集合生成式
s = {i for i in "hello" if i != "l"} print(s)#{‘e‘, ‘h‘, ‘o‘}
4、生成器表达式
res = (i for i in range(5)) print(res)#<generator object <genexpr> at 0x000000000230A890>说明生成了一个迭代器 print(next(res))#0 print(next(res))#1 print(next(res))#2 print(next(res))#3 print(next(res))#4 print(next(res))#报错
五、内置函数
1、abs 取绝对值
print(abs(-1))#1 print(abs(1))#1
2、all()
2.1、传入的可迭代对象取出的值,全真则真,一假则假
2.2、如果传入的可迭代对象取不出任何值,默认返回True
print(all([1,1,1,True,"abc"]))#True print(all([1,"",1,True,"abc"]))#False print(all([]))#True
3、any()
3.1、传入的可迭代对象取出的值,一真则真,全假才假
3.2、如果传入的可迭代对象取不出任何值,默认返回False
print(any([0,None,False,"",1]))#True print(any([]))#False
4、callable
def func(): pass print(callable(func))#True print(callable(len))#True print(callable(10))#False print(bin(11)) # 0b1011 print(oct(11)) # 0o13 print(hex(11)) # 0xb
5、chr与ord ASCII码中英文与数字转换
print(ord("a")) print(chr(97))
6、divmod 取商和余数
print(divmod(10,3))#(3, 1)
7、enumerate 对应位 取值
#列表 l=[111,222,333] for i,item in enumerate(l): #i,item=(0,111) 对应位 取值 print(i,item) # 0 111 1 222 2 333 #字典 for i,item in enumerate({"k1":111,"k2":222}): #i,item=(0,111) 对应位 取值 print(i,item) #0 k1 1 k2
以上是关于函数——生成器,面向过程编程,三元表达式,生成式,内置函数的主要内容,如果未能解决你的问题,请参考以下文章
函数的递归,二分法,三元表达式,列表生成式,字典生成式,匿名函数,内置方法