第十一章、高階語法與用法
第十一章、高階語法與用法
文章目錄
一、列舉
1.列舉其實就是一個類
-
列舉的定義:本質是類
-
導包:
-
from enum import Enum # 匯入列舉對應的包 class VIP(Enum): yellow = 1 green = 2 black = 3 red = 4 print(VIP.yellow) # 結果: VIP.yellow
-
2.列舉的優勢
- 字典和類定義的資料都是可變的,沒有防止相同標籤的出現
- 列舉是不可更改的
3.列舉型別,列舉名稱與列舉值
-
獲取列舉標籤下所對應的值
-
對資料訪問
-
from enum import Enum # 匯入列舉對應的包 class VIP(Enum): yellow = 1 green = 2 black = 3 red = 4 print(VIP.yellow.value) # 結果: 1
-
對標籤進行訪問
-
from enum import Enum # 匯入列舉對應的包 class VIP(Enum): yellow = 1 green = 2 black = 3 red = 4 print(VIP.yellow.name) # 結果: yellow
-
VIP.yellow.name和VIP.yellow的不同
-
from enum import Enum # 匯入列舉對應的包 class VIP(Enum): yellow = 1 green = 2 black = 3 red = 4 print(type(VIP.yellow.name)) print(type(VIP.yellow)) # 結果: <class 'str'> <enum 'VIP'>
-
-
通過列舉名稱獲取列舉的值
-
from enum import Enum # 匯入列舉對應的包 class VIP(Enum): yellow = 1 green = 2 black = 3 red = 4 print(VIP["yellow"]) # 結果: VIP.yellow
-
-
列舉的遍歷:
-
from enum import Enum # 匯入列舉對應的包 class VIP(Enum): yellow = 1 green = 2 black = 3 red = 4 for ele in VIP: print(ele) # 結果: VIP.yellow VIP.green VIP.black VIP.red
-
4.列舉的比較運算
- ==,同一個型別可以進行比較
- 大小比較不可進行
- 身份比較
is
可以
5.列舉注意事項
- 列舉型別的標籤是不可以相同的,但是數值可以
- 列舉的遍歷時,若數值相同,你們第二個hi是第一個標籤的別名
6.列舉轉換
from enum import Enum
# 匯入列舉對應的包
class VIP(Enum):
yellow = 1
green = 2
black = 3
red = 4
a = 1
print(VIP(a))
# 結果:
VIP.yellow
7.列舉總結
-
強制要求數字作為數值時可以用
Intenum
-
from enum import IntEnum class VIP(IntEnum): yellow = 1 green = 2 black = "str" red = 4 # 結果:存在字元 ValueError: invalid literal for int() with base 10: 'str'
-
-
不能有相同值時
-
from enum import IntEnum,unique @unique class VIP(IntEnum): yellow = 1 green = 2 black = 1 red = 4 # 結果:有相同值 ValueError: duplicate values found in <enum 'VIP'>: black -> yellow
-
二、物件與閉包
1.一切皆物件
- 高階程式設計和函數語言程式設計有關
- 閉包
- 函式:
- 在別的語言中,函式只是一段可執行的程式碼,並不是物件。
- 可以把函式當做另外一個函式的引數傳遞到函式中去
- 函式:
2.什麼是閉包:和變數的作用域有關
-
# 閉包 def curve_pre(): a = 25 def curve(x): return a*x*x return curve # curve 函式在外部不可以呼叫,會報錯,作用域只在外層函式的內部 f = curve_pre() print(f(2)) # 結果: 100
-
閉包 = 函式+環境變數
-
閉包的意義:將現場保護起來
3.閉包的誤區
-
def f1(): a = 10 def f2(): # a被認為是區域性變數 a = 20 print(a) print(a) f2() print(a) f1() # 結果:不屬於閉包 10 20 10
4.閉包解決問題
- 閉包的作用:
- 不是必不可少的東西
- 記住上一次變數的狀態
origin = 0
def f1(pos):
def f2(step):
nonlocal pos
new_step = pos + step
pos = new_step
return new_step
return f2
f = f1(origin)
print(f(1))
print(f(2))
print(f(3))
# 結果:
1
3
6
global 變數
:全域性變數不會被誤認為成區域性變數
s):
def f2(step):
nonlocal pos
new_step = pos + step
pos = new_step
return new_step
return f2
f = f1(origin)
print(f(1))
print(f(2))
print(f(3))
結果:
1
3
6
`global 變數`:全域性變數不會被誤認為成區域性變數
`nonlocal 變數` :閉包變數,不會被誤認為成區域性變數
相關文章
- Typescript 高階語法進階TypeScript
- insert高階語法
- curl與wget高階用法wget
- JS高階程式設計第十一章.個人學習筆記JS程式設計筆記
- python入門與進階篇(六)之高階語法及用法Python
- PHP高階語法總結PHP
- Java高階語法之反射Java反射
- SQL 高階語法 MERGE INTOSQL
- Nginx 高階用法Nginx
- play高階用法
- Python進階:切片的誤區與高階用法Python
- 《UNIX環境高階程式設計》(APUE) 筆記第十一章 - 執行緒程式設計筆記執行緒
- python高階語法:繼承性Python繼承
- PJzhang:搜尋引擎高階語法與滲透測試
- React高階元件入門與常用用法React元件
- Nant的高階用法NaN
- 15 個常用的 SQL Server 高階語法SQLServer
- Google高階搜尋技巧之高階語法查詢指令Go
- 逍遙自在學C語言 | 位運算子&的高階用法C語言
- 逍遙自在學C語言 | 位運算子^的高階用法C語言
- 高階前端基礎-JavaScript抽象語法樹AST前端JavaScript抽象語法樹AST
- Gradle入門系列(二)——groovy高階語法Gradle
- Gradle學習之三Groovy高階語法Gradle
- PHP yield 高階用法——網路PHP
- Shell-變數高階用法變數
- 7章 RxJava高階用法(一)RxJava
- 8章 RxJava高階用法(二)RxJava
- gojs 實用高階用法GoJS
- Pandas高階教程之:GroupBy用法
- VIM高階用法筆記【轉】筆記
- Python字典的高階用法Python
- systemctl用法及其語法
- sql語法case用法SQL
- “高階”的程式語言是否真的高階?
- 第十一章 抽象類抽象
- 逍遙自在學C語言 位運算子 "|" 的5種高階用法C語言
- Python——迭代器的高階用法Python
- Flutter 中漸變的高階用法Flutter