本文實例講述了Python字典生成式、集合生成式、生成器用法。分享給大家供大家參考,具體如下:
字典生成式:
- 跟列表生成式一樣,字典生成式用來快速生成字典,不同的是,字典需要兩個值
1
2
3
4
|
#d = {key: value for (key, value) in iterable} d1 = { 'x' : 1 , 'y' : 2 , 'z' : 3 } d2 = {k: v for (k, v) in d1.items()} print (d2) |
集合生成式:
- 集合生成式格式和列表生成式類似,不過用的是大括號:
1
2
|
s1 = {x for x in range ( 10 )} print (s1) |
生成器:
- 生成器是一種迭代過程才生成對應元素的可迭代對象
- 生成器的元素在訪問前不會生成,只有當訪問時才會生成,如果繼續向后訪問,那么當前的元素會銷毀。
- 生成器的一種生成方式是將列表生成式改為小括號包裹:
1
2
3
4
|
<font face = "Verdana" > print ( "-----使用()列表生成式生成generator------" < / font><font face = "Verdana" >) g = (x * x for x in range ( 10 < / font><font face = "Verdana" >)) print < / font><font face = "Verdana" >( type (g),g) print ( next (g), next (g), next (g))< / font> |
- 生成器本質上是一個函數
-
當一個生成器被調用時,它返回一個生成器對象,而不用執行該函數。 當第一次調用
next()
方法時,函數向下執行,如果遇到yield則返回yield 后面的
值。 再次調用next()
方法時,函數從上次結束的位置繼續向下執行,如果遇到yield則返回yield 后面的
值。 - 可以使用yield來定義一個生成器:
1
2
3
4
5
6
7
8
9
10
11
12
|
print ( "\n----使用yield生成generator-------" ) def ge(): print ( "第一次yield" ) yield 1 print ( "第二次yield" ) yield 2 print ( "第三次yield" ) yield 3 o = ge() print ( next (o)) print ( next (o)) print ( next (o)) |
----使用yield生成generator-------
第一次yield
1
第二次yield
2
第三次yield
3
- 生成器本質上是一個函數,如果想要獲取這個函數的返回值,我們需要使用異常捕獲來獲取這個返回值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def fib( max ): n,a,b = 0 , 0 , 1 while n < max : yield b a,b = b,a + b n = n + 1 return 'done' print ( "\n-----嘗試獲得函數返回值------" ) gg = fib( 6 ) while True : try : x = next (gg) print ( "g:" ,x) except StopIteration as e: print ( '返回值等于:' ,e.value) break |
- 既可以使用next()來迭代生成器,也可以使用for來迭代:
1
2
3
4
5
6
7
8
9
10
11
12
|
def ge(): print ( "第一次yield" ) yield 1 print ( "第二次yield" ) yield 2 print ( "第三次yield" ) yield 3 o = ge() print ( "\n---迭代generator的方法--------" ) for x in o: print (x) #相當于進入到generator函數中,執行下去并得到返回值 |
---迭代generator的方法--------
第一次yield
1
第二次yield
2
第三次yield
3
- 由于生成器的特性,可以進行”協程“操作:后續補充
希望本文所述對大家Python程序設計有所幫助。
原文鏈接:https://www.cnblogs.com/progor/p/8414550.html