可變長指的是引數的個數不固定
站在實參角度,實參是用來為形參賦值的,如果實參的個數不固定,那麼必須要有對應的形參能夠接收溢位的實參
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 定義有預設引數的函式時,這些預設值引數位置必須都在非預設值引數後面。呼叫時提供預設值引數值時,使用提...