目录
1.生成器:
就是一种自定义的迭代器,是用来返回多次值
自定义迭代器的好处:
节省内存
return只能返回一次值,函数就立即结束了
2.yield
1、可以挂起函数,保存函数的运行状态
2、可以用来返回多次值
def func():
print('11111111111')
print('11111111111')
print('11111111111')
print('11111111111')
print('11111111111')
yield 1, 2
print('222212222222')
yield
print('3333333333333')
yield 3
print('44444444444')
如何得到生成器(自定义的迭代器):
函数内但凡存在yield关键字,调用函数不会执行函数体代码,会得到一个返回值,该返回值就是我们自定义的生成器
g = func()
print(g)
g.__iter__()
g.__next__()
res1 = next(g)
print(res1)
res2 = next(g)
print(res2)
res3 = next(g)
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))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
for i in my_range(1,5000):
print(i)
3、编程思想就是编写程序的套路,与具体的技术点无关
4、面向过程
核心是过程二字,过程就是解决问题的步骤,即先干啥、再干啥、后干啥
基于面向过程编程就好比在设计一条条的流水线
优点:将复杂的问题流程化、进而简单化
缺点:所有环节耦合到一起,环环相扣,如果要修改某个环境,有可能会牵一发而动全身,扩展性差
5.三元表达式
def max2(x,y):
if x > y:
return x
else:
return y
res=max2(1,2)
x=1
y=2
res=x if x > y else y
print(res)
res=条件成立时返回的值 if 条件 else 条件不成立时的返回值
6.生成式
1、列表生成式
l=[]
for i in range(11):
if i > 3:
l.append("x")
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"}
new_dic = {k+"_": str(v) for k, v in dic.items() if k != "level"}
print(new_dic)
3、集合生成式
s = {i for i in "hello" if i != "l"}
print(s)
4、生成器表达式
res = (i for i in range(5))
print(res)
print(next(res))
print(next(res))
print(next(res))
print(next(res))
print(next(res))
print(next(res))
7.内置函数
1、abs
print(abs(-1))
print(abs(1))
2、all():
2.1、传入的可迭代对象取出的值,全真则真,一假则假
2.2、如果传入的可迭代对象取不出任何值,默认返回True
print(all([1,1,1,True,"abc"]))
print(all([1,"",1,True,"abc"]))
print(all([]))
3、any():
3.1、传入的可迭代对象取出的值,一真则真,全假才假
3.2、如果传入的可迭代对象取不出任何值,默认返回False
print(any([0,None,False,"",1]))
print(any([]))
4、callable
def func():
pass
print(callable(func))
print(callable(len))
print(callable(10))
print(bin(11)) # 0b1011
print(oct(11)) # 0o13
print(hex(11)) # 0xb
5、chr与ord
print(ord("a"))
print(chr(97))
6、divmod
print(divmod(10,3))
7、enumerate
l=[111,222,333]
for i,item in enumerate(l): #i,item=(0,111)
print(i,item)
for i,item in enumerate({"k1":111,"k2":222}): #i,item=(0,111)
print(i,item)