python学习day4

Deadly 提交于 2020-01-13 06:15:45

迭代器

#迭代器
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)


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!