1. 程式人生 > 其它 >生成器與常見內建函式

生成器與常見內建函式

異常捕獲補充

# 異常捕獲的完整形式
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