三元表示式 推導式和生成器表示式

2022-06-05 23:18:13 字數 2093 閱讀 5406

三元表示式是python為我們提供的一種簡化簡單的流程控制的解決方案

而且在簡化**的基礎上,還不失**的可讀性

# 條件成立時返回的值 if 條件 else 條件不成立時返回的值

x if x > y else y

# 如果x>y就執行x,否則執行y

需求 : 接收兩個數字,返回較大的那個數

# 不採用三元表示式

def my_max(x,y):

if x > y:

return x

else:

return y

# 採用三元表示式

def my_max(x,y):

return x if x > y else y

應用場景 : 當遇到條件成立就執行什麼,條件不成立就執行什麼,像這種只有兩種情況就可以用三元表示式簡化**

列表推導式是python為我們提供的一種簡化**的解決方案,用來快速生成列表,語法如下

l = [ i for i in 可迭代物件 if 條件 ]

# 內部執行順序

l =

for i in 可迭代物件:

if 條件成立

舉個栗子 : 一條**生成乙個列表,包含0-100之間的所有偶數

l = [ i for i in range(1,101) if i % 2 == 0 ]

print(l)

集合推導式python為我們提供的一種簡化**的解決方案,用來快速生成集合,語法如下

s = 

# 內部執行順序

s = set()

for i in 可迭代物件:

if 條件成立

l.add(i)

舉個栗子 : 一條**生成乙個集合,包含0-100之間的所有奇數

s = 

print(s)

字典推導式python為我們提供的一種簡化**的解決方案,用來快速生成字典,語法如下

dic = 

# 內部執行順序

dic = {}

for k,v in 可迭代物件:

if 條件成立

dic[k] = v

舉個栗子 : 一條**生成乙個字典,key是0-100之間的奇數,value是0-100之間的偶數

dic = 

print(dic)

建立乙個生成器物件有兩種方式,一種是呼叫帶yield關鍵字的函式,另一種就是生成器表示式,與列表生成式的

語法格式相同,只需要將換成(),即:

g = ( i for i in range(1,10) if i % == 2)

print(g) # 得到乙個生成器,

題目統計demo.txt裡面的字元個數

# 以前的寫法

with open('demo.txt', mode='r', encoding="utf-8") as f:

count = 0

for line in f:

count += len(line)

print(count)

# 生成器寫法

f = open('demo.txt', mode='r', encoding="utf-8")

# 一行**解決,這就是python的nb之處,但是這樣寫可讀性不好

total = sum((len(line) for line in f ))

# 這句**牛逼了,首先(len(line) for line in f)是沒有執行的,但是會返回乙個生成器,

# sum這個內建函式,會把可迭代物件裡面的值遍歷即for迴圈,即呼叫next()方法做累加,所以直接會把生成器裡面的值做累加,但是同一時刻記憶體中只有乙個值(一行的長度的累加值)

生成器 三元表示式, 推導式 表示式

一,生成器 1,生成器的本質就是迭代器 2,生成器的特點和迭代器一樣.取值方式和迭代器一樣 next send 給上乙個yield傳值 3,生成器一般由生成器函式或者生成器表示式來建立 4,其實就是手寫的迭代器 只要函式內部包含有yield關鍵字,那麼函式名 的到的結果就是生成器,並且不會執行函式內...

三元表示式 列表推導式 生成器表示式

一 三元表示式 def max2 x,y if x y return x else return y res 條件成立時執行的表示式 if 條件 else 條件不成立時執行的表示式 x 11 y 22 res x 12 if x y else y 100 print res 二 列表推導式 1 示例...

三元表示式 列表推導式和生成器表示式

1 三元表示式 2 列表推導式和生成器表示式 def my max x,y low的寫法 if x y return x else return yx 10y 20res x if x y else y 三元表示式 print res name input strip res sb if name ...