可迭代对象, 函数
迭代
迭代协议:
内部有一个__next()__方法, 也可以手动调用
和next()全局函数一个功能
但是只循环一边,不会自动重头再来
可迭代对象:tuple, list, dict,file, range
但是如果没有已经实现,有些时候要自己写iter
优势:相比list之类的,内存占用小
迭代工具:for, 推导,map
#map的作用, map(function, iter_variable)
#把iter_variable里面的值每一个喂给function
函数
def 函数名(参数):函数内容
optional:return
- 函数名最好不要和全局函数重叠, 比如len, open之类的
- 参数可以有,可以没有
- return可以有可以没有,如果没有,只执行操作,但是无法把变量传递给其它操作
def intersect(seq1, seq2):
result = []
for x in seq1:
if x in seq2:
result.append(x)
return result
#seq1和seq2只是名字,可以随意取名,但是要直观
#并没有提前规定变量的性质,所以可能出错
#seq1和2的生命周期只在函数运行间,下面这个例子说明
x = 55
def funcx():
#如果加一行global x,则会改变x的值
x = 99
print(x)
print(x)
print(funcx())
#这个例子可以说明,如果变量名重复了会有啥不好
#三个层级:built-in, global, enclosure,local
嵌套函数
def func():
x =100
def nested():
#nonlocal x 这样的话,那就会影响嵌套的外面了
x =99
print(x)
nested()
print(x)
print(func())
#则会出现99和100
可改变/不可改变类型:
- 如int型就是不可改变。会创造一个副本值给函数操作,但是本身不会改变,除非改变指针
- 如list型就是可以改变的,那么函数操作后,是可以改变其值的
不可变:tuple, str, int
可变:list, dict