迭代器
#迭代器
from collections import Iterable
l = [1,2,3,4]
t = (1,2,3,4)
d = {1:2,3:4}
s = {1,2,3,4}
print(isinstance(t,Iterable)) #如果时true,说明可以被迭代
#迭代器
l = [1,2,3,4]
l_iter = l.__iter__() #开始使用迭代器去迭代
item = l_iter.__next__() #迭代一个
print(item)
item2 = l_iter.__next__()
print(item2)
item3 = l_iter.__next__()
print(item3)
item4 = l_iter.__next__()
print(item4)
#没东西迭代了,报错
item5 = l_iter.__next__()
print(item5)
C:\新建文件夹\python.exe C:/pythonpa/test/helloworld.py
1
2
3
4
Traceback (most recent call last):
File ----
item5 = l_iter.next()
StopIteration
#自动迭代器
l = [1,2,3,4]
l_iter = l.__iter__() #开始使用迭代器去迭代
while True:
try:#用try包裹起来的东西,正常执行没问题,如果报错了,就执行except下面的内容
item = l_iter.__next__()
print(item)
except:
print("迭代结束,break")
break
1
2
3
4
迭代结束,break
python编程标准写法
# -*- coding=utf-8 -*-
def main():
pass
if __name__ == '__main__':
main()
生成器
# -*- coding=utf-8 -*-
#生成器
def gen_fun1():
a = 1
print("将a赋值")
yield a #函数执行到这将函数暂停
b = 2
print("将b赋值")
yield b
pass
def main():
g1 = gen_fun1()
print(g1,next(g1)) #yield配合next使用可以控制函数运行进程
print(g1,next(g1))
pass
if __name__ == '__main__':
main()
将a赋值
<generator object gen_fun1 at 0x00AC94F0> 1
将b赋值
<generator object gen_fun1 at 0x00AC94F0> 2
生成器的奥义在于随时控制函数的进程。
# -*- coding=utf-8 -*-
#控制生成器批量生成
def produce():
for i in range(100):
yield "生产力%s个包子"%i
pass
def main():
p = produce()
num = 0
for i in p: #此时p的next就是i
print(i)
num += 1
if num == 12:
break
pass
if __name__ == '__main__':
main()
# -*- coding=utf-8 -*-
#第二种写法
#控制生成器批量生成
def produce():
for i in range(100):
yield "生产力%s个包子"%i
pass
def main():
p = produce()
num = 0
for i in range(12):
print(p.__next__())
pass
if __name__ == '__main__':
main()
生产力0个包子
生产力1个包子
生产力2个包子
生产力3个包子
生产力4个包子
生产力5个包子
生产力6个包子
生产力7个包子
生产力8个包子
生产力9个包子
生产力10个包子
生产力11个包子
列表推导式
# -*- coding=utf-8 -*-
#30以内整除3的数的平方
def squard(x):
return x*x
pass
def main():
#列表推导式
mul = [squard(i) for i in range(30) if i %3 is 0]
print(mul)
pass
if __name__ == '__main__':
main()
[0, 9, 36, 81, 144, 225, 324, 441, 576, 729]
# -*- coding=utf-8 -*-
def main():
#列表推导式
fruits = [['apple','banana','orange','almound','chestnut','date','coconut'],['fig','hazel','grape','greengage']]
#找到上面嵌套列表中名字包含两个a的水果名字
print([name for lst in fruits for name in lst if name.count('a')>=2])
pass
if __name__ == '__main__':
main()
[‘banana’]
字典推导式
# -*- coding=utf-8 -*-
#把字典的键和值互换
def main():
#字典推导式
dic1 = {'a':1,'b':2}
dic2 = {dic1[k]:k for k in dic1}
print(dic2)
pass
if __name__ == '__main__':
main()
{1: ‘a’, 2: ‘b’}
集合表达式
# -*- coding=utf-8 -*-
#输出列表中数的平方到集合中并删除重复的
def main():
#字典推导式
li = [1,2,3,4,-1,-2]
s = {x**2 for x in li}
print(s)
pass
if __name__ == '__main__':
main()
{16, 1, 4, 9}
python的内置函数
eval:执行字符串所代表的代码,并返回结果
eval很危险!!!!因为会把传入的字符串当作python代码执行!!!!
eval(‘print(“haha”)’)
exec:执行字符串类型的代码
s = ‘os.system(“dir”)’
exec(s)
来源:CSDN
作者:不器。
链接:https://blog.csdn.net/weixin_46097280/article/details/103935931