能夠將if....else...雙分支流程變成一行python
語法:code
條件成立返回的值 if 判斷條件 else 條件不成立返回的值對象
# 求兩個值的大小 def max_min(a, b): if a > b: return a else: return b max_min(10,23) print(max_min(10,23)) # 能夠寫成三元表達式形式 def max_min(a, b): res = a if a > b else b return res print(max_min(10,23))
# 需求: 讓用戶輸入用戶名,輸入的用戶若是是ank,爲其後綴添加_DSB name = input("請輸入用戶名:").strip() if name != 'ank': print(name) else: print(name+'_DSB') # 能夠寫成三元表達式形式 name = input("請輸入用戶名:").strip() user_name = name if name != 'ank' else name + '_DSB' print(user_name)
能夠實現一行實現生成列表索引
語法:ip
list = [取出的每個值、任意值 for 從可迭代對象中取出的每個值 in 可迭代對象]內存
for的右邊是循環次數,能夠取出可迭代對象中的每個值資源
for的左邊能夠爲當前列表添加值input
# 將l1中的值,依次取出,添加到l2中 l1 = [1, 238, 32, 4, 5] l2 = [i for i in l1] print(l2) # 將l3列表中的每個人後綴都添加_dsb l3 = ['tank','jason', 'sean', 'egon'] l4 = [i+'_dsb 'for i in l3] print(l4)
list = [值 for 可迭代對象中取出的每個值 in 可迭代對象 if 判斷]generator
# 將name_list列表中的tank過濾掉,其餘人後綴都添加_dsb name_list = ['tank', 'jason', 'sean', 'egon', 'tank'] new_name = [i+'_dsb' for i in name_list if i != 'tank'] print(new_name)
列表生成式:數據量小時使用,一次所有取出class
優勢:能夠依賴索引取值,取值方便
缺點:浪費資源
生成器生成式:將列表生式的[ ]換成()
數據量大時使用
優勢:節省資源
缺點:取值不方便
# 生成一個1000個值的生成器 # 用生成器生成式 g = (i for i in range(1,1001)) print(g) >>> # 獲得生成器的內存地址 <generator object <genexpr> at 0x000001DC7CDDF748> # 用列表生成式實現 list = [i for i in range(1,1001)] print(list) >>> [1, 2, 3, ....., 998, 999, 1000]