python函式知識點 二

2021-08-26 03:03:52 字數 2494 閱讀 5755

目錄

一.函式物件

二.函式巢狀

三.命名空間與作用域

四.閉包函式

五.裝飾器

1.函式是第一類物件,即函式可以當作資料傳遞

#1 可以被引用

#2 可以當作引數傳遞

#3 返回值可以是函式

#3 可以當作容器型別的元素

2.利用該特性,優雅的取代多分支的if (不然要是有很多個函式的話,就要寫很多個if elif了)

def foo():

print('foo')

def bar():

print('bar')

dic=

while true:

choice=input('>>: ').strip()

if choice in dic:

dic[choice]()

def max(x,y):

return x if x > y else y

def max4(a,b,c,d):

res1=max(a,b)

res2=max(res1,c)

res3=max(res2,d)

return res3

print(max4(1,2,3,4))

1.定義

#命名空間:存放名字的地方,三種命名空間,(之前遺留的問題x=1,1存放於記憶體中,那名字x存放在**呢?命名空間正是存放名字x與1繫結關係的地方)
2. 命名空間的載入順序

python tom.py

#1、python直譯器先啟動,因而首先載入的是:內建命名空間

#2、執行test.py檔案,然後以檔案為基礎,載入全域性命名空間

#3、在執行檔案的過程中如果呼叫函式,則臨時產生區域性命名空間

3.名字的查詢順序

區域性命名空間--->全域性命名空間--->內建命名空間

#需要注意的是:在全域性無法檢視區域性的,在區域性可以檢視全域性的,如下示例

# max=1

def f1():

# max=2

def f2():

# max=3

print(max)

f2()

f1()

print(max)

4.作用域

#1、作用域即範圍

- 全域性範圍(內建命名空間與全域性命名空間屬於該範圍):全域性存活,全域性有效

- 區域性範圍(區域性命名空間屬於該範圍):臨時存活,區域性有效

#2、作用域關係是在函式定義階段就已經固定的,與函式的呼叫位置無關,如下

x=1def f1():

def f2():

print(x)

return f2

x=100

def f3(func):

x=2func()

x=10000

f3(f1())

#3、檢視作用域:globals(),locals()

legb 代表名字查詢順序: locals -> enclosing function -> globals -> __builtins__

locals 是函式內的名字空間,包括區域性變數和形參

enclosing 外部巢狀函式的名字空間(閉包中常見)

globals 全域性變數,函式定義所在模組的名字空間

builtins 內建模組的名字空間

5.五 global與nonlocal關鍵字

1.一 什麼是閉包?

#內部函式包含對外部作用域而非全域性作用域的引用

def counter():

n=0def incr():

nonlocal n

x=nn+=1

return x

return incr

c=counter()

print(c())

print(c())

print(c())

print(c.__closure__[0].cell_contents) #檢視閉包的元素

2. 閉包的意義與應用

#閉包的意義:返回的函式物件,不僅僅是乙個函式物件,在該函式外還包裹了一層作用域,這使得,該函式無論在何處呼叫,優先使用自己外層包裹的作用域

#應用領域:延遲計算(原來我們是傳參,現在我們是包起來)

print(baidu().decode('utf-8'))

裝飾器就是閉包函式的一種應用場景

Python 函式知識點

1.函式的意思 函式是指對某一功能的封裝 2.函式的語法 def 函式名 函式體函式名 3.函式的返回值 return,當讀到return,不會繼續往下讀 1.如果沒有return,預設返回none 2.如果只有return,返回none 3.return 返回值,只返回乙個值 4.return 值...

python知識點 二

在執行python命令的時候需要攜帶的引數稱之為命令列引數 python m py.compile d demo1.py m py.compile d demo1.py就是命令列引數 python中也可以用sys內建模組的sys.ar 來獲取命令列引數 sys.ar 是命令列引數列表 舉例 pyth...

python知識點 建構函式

python 中的建構函式是 init 函式。用於類的例項化,當乙個物件被建立時,就會立刻被呼叫,有且只能執行一次。classa def init self print a1 執行 a a 輸出 a1 1.建構函式可以不寫,不寫時會呼叫預設的建構函式 classa pass執行 a a 輸出 2.建...