Day 11 可變長引數與命名空間作用域

2021-10-08 08:04:27 字數 4306 閱讀 4896

​ 可變長指的是引數的個數不固定

​ 站在實參角度,實參是用來為形參賦值的,如果實參的個數不固定,那麼必須要有對應的形參能夠接收溢位的實參

1 在形參名前 加*

*會把溢位位置實參存成元組,然後賦值其後的形參名

def

function1

(x,*y)

:print

(x, y)

function1(1,

2,3,

4,["a"

,"b"])

# 1 (2, 3, 4, ['a', 'b'])

2 在形參名前加**

**會把溢位關鍵字實參存成字典,然後賦值給其後的形參名

def

function1

(x,**y)

:print

(x, y)

function1(1,

2,3,

4,["a"

,"b"])

# typeerror: function1() takes 1 positional argument but 5 were given 只讓x接受引數,**y只接受關鍵字實參

def

function1

(x,**y)

:# y=(2,3,4)

print

(x, y)

function1(

1, a=

111, b=

222, c=

333)

# 1

3 在實參前加*

*會把其後的值打散位置實參適用於for可遍歷的物件

def

function2

(*x)

:# y=(2,3,4)

print

(x, end=

"\t"

)function2(

*"孫悟空"

)# ('孫', '悟', '空')

4 在實參前加**

**會把其後的值打散關鍵字實參適用於字典

def

index

(*args,

**kwargs)

:for i in args:

print

("index------{}"

.format

(i), end=

"\t"

)print()

for k, v in kwargs.items():

print

("index------:"

.format

(k,v)

, end=

"\t"

)def

func1

(*args,

**kwargs)

: index(

*args,

**kwargs)

func1(1,

2,3,

"kk"

, a=

3, b=

4, c=6)

----

----

----

----

----

----

----

----

----

----

----

----

index---

---1 index---

---2 index---

---3 index---

---kk

index---

---a:3 index---

---b:4 index---

---c:6

​ 函式物件指的是函式可以被當做變數使用

def

sayhai()

:return

"hello"

hai = sayhai(

)print

(hai)

# hello

def

sayhai()

:return

"hello"

print

(sayhai())

# hello

def

sayhai()

:return

"hello"

defhainame

(x):

return f" "

result = hainame(

"孫悟空"

)print

(result)

# hello 孫悟空

list1 =

[hainame]

print

(list1[0]

("豬八戒"))

# hello 豬八戒

def

func2()

:def

func3()

:print

("hello"

) func3(

)func2(

)

​ 就是存放名字的地方

存放的是內建的名字,如print\ input\ len

​ 生命週期:直譯器啟動則產生,直譯器關閉則銷毀

print

(len

)#

存放的是頂級的名字,縮排為0的

​ 全域性變數作用域整個程式區域性變數作用域是定義該變數的子程式

​ 生命週期:python程式執行時則產生,python程式結束則銷毀

name =

"孫悟空"

print

(name)

# 孫悟空

函式內的名字

​ 生命週期:呼叫函式是則產生,呼叫函式結束則銷毀

name =

"孫悟空"

defdemo1()

: name =

"豬八戒"

print

(name)

demo1(

)print

(name)

# 孫悟空

從當前位置往外查詢,如果當前是在區域性:區域性命名空間------------>全域性命名空間------------>內建命名空間

從當前位置往外查詢,如果當前是在全域性:全域性命名空間------------>內建命名空間

x =

777deff1(

):# x = 999

deff2()

:# x = 888

print

(x) f2(

)f1(

)# 777 一級級的往上找,這層區域性沒有(888)向上一級區域性(999),如果區域性都沒有就跳到全域性查詢(777)

全域性範圍/全域性作用域:內建命名空間+全域性命名空間

特點:全域性存活,全域性有效

區域性範圍/區域性作用域:區域性命名空間

特點:臨時存活,區域性有效

在python中建立乙個閉包需要滿足以下三點:

def

demo

(i):

i +=

1def

demo1()

:print

(i)return demo1(

)re1 = demo(3)

# 4

day14 Python函式之可變長引數

1.形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數 2.實參可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參。因此...

Python中函式的引數傳遞與可變長引數

1.python中也有像c 一樣的預設預設函式 1 def foo text,num 0 2print text,num 34 foo asd asd 0 5 foo def 100 def 100 定義有預設引數的函式時,這些預設值引數位置必須都在非預設值引數後面。呼叫時提供預設值引數值時,使用提...

Python中函式的引數傳遞與可變長引數

1.python中也有像c 一樣的預設預設函式 1 def foo text,num 0 2print text,num 34 foo asd asd 0 5 foo def 100 def 100 定義有預設引數的函式時,這些預設值引數位置必須都在非預設值引數後面。呼叫時提供預設值引數值時,使用提...