python学习第五天

迭代

迭代协议

迭代对象支持迭代协议,即迭代对象有.next()方法可以读取下一个数据,如文件,列表元组等不支持
在循环中会自动将不支持迭代对象的类型转换为迭代对象
使用iter(…)方法可以将不是迭代对象的如列表转换为迭代对象

迭代工具

迭代器对象:已经实现,可以直接用,有.next()方法,如文件:

f=open('a.txt','r',encoding='utf8')
for i in f:
    print(i,end='')

输出

你好
abcd
12345
qwer

f可以直接迭代,有.next()方法,这个方法等于全局方法next(),而且迭代完成之后就不能再用了,需要再赋值给变量一次

In[3]: f=open('a.txt','r',encoding='utf8')
In[4]: f.__next__()
Out[4]: '你好\n'
In[5]: f.__next__()
Out[5]: 'abcd\n'
In[6]: f.__next__()
Out[6]: '12345\n'
In[7]: f=open('a.txt','r',encoding='utf8')
In[8]: next(f)
Out[8]: '你好\n'
In[9]: next(f)
Out[9]: 'abcd\n'
In[10]: next(f)
Out[10]: '12345\n'

可迭代对象

没有.next()方法,但在for循环时会自动转换成迭代器对象并迭代,也可以自己手动转化

In[12]: a.__next__()
Traceback (most recent call last):
  File "G:\Anaconda3\envs\tensorflow\lib\site-packages\IPython\core\interactiveshell.py", line 3326, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-12-d34d2a8c0899>", line 1, in <module>
    a.__next__()
AttributeError: 'list' object has no attribute '__next__'
In[13]: a2=iter(a)
In[14]: a2.__next__()
Out[14]: 1
In[15]: a2.__next__()
Out[15]: 2
In[16]: a2.__next__()
Out[16]: 3
In[17]: a2.__next__()
Out[17]: 4

在for循环列表时,相当于自动用iter()方法再用__next__()循环的

常见内置可迭代对象

1.range()返回的就是可迭代对象
2.zip():将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表

In[34]: a=zip(['a','b','c'],[1,2,3])
In[35]: for i in a:
   ...:     print(i)
   ...:     
('a', 1)
('b', 2)
('c', 3)

3.map():根据提供的函数对指定序列做映射

>>>def square(x) :            # 计算平方数
...     return x ** 2
... 
>>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
[1, 4, 9, 16, 25]

函数

函数的用法和别的编程语言类似

变量作用域

1.内置
2.全局
3.嵌套
4.局部
使用global可以在函数内使用全局变量

x=5
def f():
    global x
    x=6
    print(x)
print(x)
f()
print(x)

输出

5
6
6

使用nonlocal可以在函数嵌套中使用上一层函数的变量

def f1():
	x=10
	def f2():
		nonlocal x
		x = 9
		print(x)
	f2()
	print(x)
f1()

输出

9
9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值