文件操作
1.模块的使用
a.导入模块
可以通过import或者from-import在一块模块中去使用另一个模块的内容.
import 模块名 --->将模块所有的内容都导入,并且可以在当前模块中通过“模块名.”的方式去使用模块中所有的全局变量
from 模块名 import 变量1, 变量2 ---> 将模块中所有的内容都导入,但是只能使用import后面的变量
from 模块名 import * --->将模块中所有的内容都导入,可以直接使用模块中的所有全局变量
2.阻止导入的犯法:
if name == 'main':
代码块
不希望被别的模块导入执行的代码写在这儿
3.迭代器
没有一个具体的字面量,可以将其他的序列转换成迭代器:iter(序列)
a.迭代器的特点
只能通过next方法去一个一个按顺序获取迭代器中的元素,取出后迭代器中就不存在这个元素了
iter1 = iter('nie112')
print(iter1)
print(next(iter1))
for x in iter1:
print(x)
结果
迭代器.next()
iter2 = iter((1, 2, 3))
a = iter2.__next__()
print(a)
print(iter2.__next__())
print(next(iter2))
######
1
2
3
4.生成式和生成器
生成器就是迭代器,但是迭代器不一定是生成器
生成式就是生成器的一种特殊形式:(变量 for 变量 in 序列)
# 产生一个生成器,生成器中可以生成的数据是0~4(每个元素是数字)
ge1 = (x for x in range(5))
print(ge1)
print(next(ge1)) # 0
print(next(ge1)) # 1
print("==============")
for item in ge1:
print(item)
#####
2
3
4
ge3 = ([x, x*2] for x in 'abc')
print(next(ge3))
for item in ge3:
print(item)
#####
['a', 'aa']
['b', 'bb']
['c', 'cc']
2.yield
函数中只要有yield,那么调用这个函数就不再是执行函数体并且获取返回值了,而是产生一个生成器。
def func1(n):
for x in range(n+1):
print(x)
yield 1000
ge8 = func1(3)
print(ge8)
print(next(ge8))
#
<generator object func1 at 0x000002F5E9F55F68>
0
1
2
3
1000
def func1(n):
print('你好,生成器!')
for x in range(n+1):
print(x)
yield x
ge8 = func1(10)
print(ge8)
print(next(ge8))
print(next(ge8))
#
<generator object func1 at 0x000001A6E4845FC0>
你好,生成器!
0
0
1
1
# 生成器生成的数据的规律:奇数就返回他本身。偶数就返回他的二倍
def func1(n):
for x in range(1, n):
if x % 2:
yield x
else:
yield x*2
ge1 = func1(5)
print(next(ge1))
print(next(ge1))
print(next(ge1))
print(next(ge1))
#
1
4
3
8
网友评论