生成器与常见内置函数

异常捕获补充

# 异常捕获的完整形式
try:
	name
except NameError as e:
	pass
except Exception as e:
	pass
else:
	pass
finally:
	pass
# try中出现异常,如果except中有对应的异常,执行其中的代码。如果没有异常则处理else,最后都执行finally代码。

迭代取值与索引取值对比

迭代取值不能重新求值,索引取值无论多少次皆可。迭代取值的对象在同一时间只占一个内存空间,索引取值的对象比如列表中的元素皆以占据内存空间。

生成器对象

生成器就是自定义迭代器。生成器对象会’停止‘在yield,遇到__next__方法再从停止位置继续执行。

# 自定义range方法
def my_range(start,end=None,step):
	if end is None:
		end = start
		start = 0
	while start < end:
		yield start
		start += step

# yield还能传值
def eat(name):
	print('%s进入餐厅。。。'%name)
	food = yield
	print('%s吃了%s'%(name,food))

g = eat('xie')
print(g.__next__())  # xie进入餐厅。。。
# send既给yeild传值又执行了__next__()
print(g.send('牛肉'))  # xie吃了牛肉

生成器表达式: (i**2 for i in range(10))

yield与return对比

程序执行遇到yield会停止,调用其__next__方法返回值并继续执行,而return方法直接结束并返回值。

常见内置函数

# 1.abs() 取绝对值方法
print(abs(-1))  # 1

# 2. all() 容器类型数据中所有元素转化为布尔值都为True返回True,否则返回False
#    any() 容器类型数据中任意一个元素转化为布尔值为True则返回True,否则返回False
l1 = [1,24,0]
l2 = [1,-1,0]
print(all(l1))  # False
print(any(l2))  # True

#3. bin() oct() hex() 进制数转化

#4. bytes()转化为二进制
str1 = 'long may the sunshine'
res = bytes(str1,'utf8')
res1 = str(res,'utf8')
#5. callable() 查看对象是否是可调用的
def index():
	pass

callable(index)  # True

#6. chr()返回数字对应的acsii码表的字符  ord()返回字符对应的ascii码表的数字
print(chr(65))  # A
print(ord('A'))  # 65

#7. complex()  复数
print(complex(123))  # (123+0j)

#8. dir() 查看当前目录下能使用的方法

#9. divmod() 返回除数与余数
divmod(5,2)  # (2,1)

#10. eval()可执行简单python语法结构程序的字符串
#    exec()可执行复杂python语法结构程序的字符串
eval("print('xie')")  # xie
func_str = '''
for i in range(5):
	print(i,end=' ')
'''
exec(func_str)  # 0 1 2 3 4

#11. isinstance() 判断是否属于某个数据类型
print(isinstance(1,int))  # True

#12. pow() 返回x的y次幂
print(pow(2,4))  # 16

#13. round() 五舍六入
print(round(2.6))  # 3

#14. sum() 求和
l = [2,4,6,8,10]
print(sum(l))  # 30
上一篇:06.十分钟学会表达式语言EL


下一篇:es6 生成器函数声明和调用