what
列舉本質是乙個類 enum
why數字代表型別不夠直觀
字典由於可變和沒有防止相同標籤的功能,所以不是最優代表型別的資料型別
how列舉的一般使用方法
from enum import enum #先呼叫乙個模組
class 類名1
(enum)
:#定義乙個類是列舉型別
變數1= 數值1
#數值不可相同
變數2= 數值2
。。。 #以此類推
#表示型別,列印(print)出來的值依然是類名1.變數1
#列舉數值不可更改,不可以有相同變數名
#型別是乙個型別enum '類名1'
print
(類名1
.變數1
)print
(類名1
.變數1.value)
#獲取數值
print
(類名1
.變數1.name)
#獲取標籤名,是乙個字串
print
(類名1
['變數1'])
#獲取列舉型別,是乙個字串
for a in 類名1
:#列舉可以遍歷
print
(a)#列舉的比較運算,列舉型別不可以比較大小,身份比較可以,等值比較可以
b = 類名1
.變數1
== 類名1
.變數2
c = 類名1
.變數1
is 類名2
.變數2
見舉例1
from enum import intenum #先呼叫乙個模組,可以強制列舉數值為數值
@unique #裝飾器代表數值只能唯一
class 類名1
(intenum)
: 變數1
= 數值1
變數2= 數值2
how much
列舉內部的變數名類似常量盡量全體大寫
列舉數值,盡量選擇數字作為列舉數值
用列舉型別的標籤,對應資料庫的數值;
例:a = = 類名1.變數1做判斷,而不是a == 數值做判斷 類名1(數值/變數)轉換成列舉型別
列舉不可以例項化
不能有兩個相同的標籤,可以不同標籤是相同數值,相同數值相當於別名
用於別名的標籤,會造成一般遍歷是不可列印出來,遍歷方法:
for a in 類名1.__members__.items():
for a in 類名1.__members__:
得到的結果,見舉例2
舉例1:列舉的一般使用方法
from enum import enum
class
vip(enum)
: yellow =
1 green =
2 black =
3 red =
4print
(vip.yellow)
print
(vip.yellow.value)
print
(vip.yellow.name)
print
(vip[
'yellow'])
print
(type
(vip.yellow)
)print
(type
(vip.yellow.name)
)for v in vip:
print
(v)
輸出
vip.yellow
1yellow
vip.yellow
vip.yellow
vip.green
vip.black
vip.red
舉例2:列舉別名的遍歷
from enum import enum
class
vip(enum)
: yellow =
1 green =
1 black =
3 red =
4for a in vip.__members__.items():
print
(a)for a in vip.__members__:
print
(a)
輸出
(『yellow』, )
(『green』, )
(『black』, )
(『red』, )
yellow
green
black
redwhat
函式和它在定義時的環境變數,不受其他變數賦值影響
why閉包儲存的是乙個環境,乙個現場
how
'''
函式包函式時,被包函式不能在外部呼叫
可以定義乙個變數為它賦值乙個函式
可以返回乙個函式
'''def 函式1()
: 環境變數1
= 。。。
def 函式2()
:pass
return 函式2
#外部呼叫類2()報錯
a = 函式1()
#呼叫函式a()
#a.__closure__表示閉包位置
#a.__closure__[0].cell_contents儲存環境變數
見舉例1/2
#閉包的使用,定義乙個非區域性變數
a = 。。。 #定義乙個變數
def 函式1
(b):
def 函式2
(c):
nonlocal b #定義乙個非區域性變數
d = b + c
b = d
return d
return 函式2
#例項化
f = 函式1
(a)
見舉例3
how much
閉包外部更改環境變數取值,環境變數不變
閉包內部的函式賦值更改環境變數取值,環境變數不變,區域性變數
定義了區域性變數的類似函式結構不是閉包,閉包必須引用外部的環境變數
舉例1:函式包函式
def
curve_pre()
:#環境變數在外部
a =25def
curve
(x):
return a*x*x
return curve
#a = 10外部定義不影響內部取值25
f = curve_pre(
)print
(f(2))
print
(f.__closure__)
print
(f.__closure__[0]
.cell_contents)
輸出
100(,)
25舉例2:定義了區域性變數的類似函式結構不是閉包
deff1(
):a =
10deff2(
):#閉包內部的函式賦值不影響a的原始賦值,乙個區域性變數
a =20print
(a)print
(a) f2(
)print
(a)f1(
)
輸出
1020
10舉例3:閉包的使用
非閉包:
origin =
0def
go(step)
:#宣告乙個全域性變數
global origin
new_pos = origin + step
#等號左邊的
origin = new_pos
return origin
print
(go(2)
)print
(go(3)
)print
(go(6)
)
輸出25
11閉包:
origin =
0def
factory
(pos)
:def
go(step)
:#定義乙個非區域性變數
nonlocal pos
new_pos = pos + step
pos = new_pos
return new_pos
return go
tourist = factory(origin)
print
(tourist(2)
)print
(tourist(3)
)print
(tourist(5)
)
輸出25
10
Python隨堂筆記1 2
第一堂課ptint aaaa 8 結果為輸出8遍的字串 aaaa ptint aaaa 8 則執行錯誤。快捷鍵 alt n 回到上一條語句。alt p 回到下一條語句。第二堂課 print 玉康工作室 temp input 你想是什麼數字 獲取的為字串格式。guess int temp print ...
Python初學12 爬蟲
爬蟲前奏 1.明確目的 2.找到資料相對應得網頁 3.分析網頁結構,找到資料的所在標籤的位置 操作 模擬http請求,向伺服器傳送這個請求,獲取到伺服器返回的頁面 正規表示式提取我們需要的資料 虎牙主頁主播和人氣 107.3萬 資料2 實現 encoding utf 8 created on 201...
python小白程式設計12
列印出所有的 水仙花數 所謂 水仙花數 是指乙個三位數,其各位數字立方和等於該數本身。例如 153是乙個 水仙花數 因為153 1的三次方 5的三次方 3的三次方。原理 需要分別輸出某個數的個十百位上的數字,將它們分別立方相加與這個數本身是否相等,相等則為水仙花數,如何輸出百位,十位,個位呢?範圍是...