单词
global
nonlocal
dir
iter
next
iter
try
except
global ,nonlocal
# global
# 1, 在局部作用域声明一个全局变量 声明后就可以修改全局变量
# nonlocal 存在于双层嵌套中
# 1. 不能够操作全局变量。
# 2. 局部作用域:内层函数对外层函数的局部变量进行修改。
函数名的应用
# 函数名是一个特殊的变量。
# 函数名指向的是函数的内存地址,加上()就执行这个函数。
# 3. 函数名可以作为容器类类型的元素。
# 4. 函数名可以作为函数的实参。
# 5. 函数名可以作为函数的返回值。
默认参数的坑
# 陷阱只针对于默认参数是可变的数据类型:
# 如果你的默认参数指向的是可变的数据类型,那么你无论调用多少次这个默认参数,都是同一个。
# 本质是闭包
# def func(name,alist=[]):
# alist.append(name)
# return alist
# ret1 = func('alex')
# print(ret1,id(ret1)) # ['alex']
# ret2 = func('太白金星')
# print(ret2,id(ret2)) # ['太白金星']
# 局部作用域的坑
# 在函数中,如果你定义了一个变量,但是在定义这个变量之前对其引用了,那么解释器认为:语法问题。
# 你应该在使用之前先定义。
# 列题
# count = 1
# def func():
# count += 1
# print(count)
# func()
可迭代对象和迭代器
# 可以进行循环更新的一个实实在在值。
# 如何判断一个对象是否是可迭代对象: 利用内置函数:dir()可以查看对象内部方法
# 有__iter__方法的对象,都是可迭代对象。
# print('__iter__' in dir(str))
# 如何判断一个对象是迭代器: 可更新迭代的工具
# 在python中,内部含有'__Iter__'方法并且含有'__next__'方法的对象就是迭代器。
# print('__iter__' in dir(str) and '__next__' in dir(str))
# 可迭代对象转化成迭代器:
# 利用内置函数iter()
# obj = iter(l1)
# object.__iter__()
# 迭代器可以迭代取值。利用next()进行取值(节省内存)或者转为list 元祖等等取值
# 一个next()取一个值 且会记录位置
# 迭代器一条路走到底,不走回头(记录位置)。
# 取完了再next()会报错(StopIteration) 我们可以用try处理 万能异常(Exception)
while模拟for循环
s = 'gkffdsa;lfkdsk;lafkds;laldgjfd'
obj = iter(s)
while 1:
try:
print(next(obj))
except StopIteration:
break
可迭代对象与迭代器的对比
- 可迭代对象是一个操作方法比较多,比较直观,存储数据相对少(几百万个对象,8G内存是可以承受的)的一个数据集。
- 当你侧重于对于数据可以灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择。
- 是一个非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一的数据集。
- 当你的数据量过大,大到足以撑爆你的内存或者你以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。