函式的動態引數和命名空間還有關鍵字 巢狀

2022-05-15 17:33:08 字數 4053 閱讀 6677

1,動態引數(形參):顧名思義就是這個引數是時刻在變化的,動態格式:   *函式名  =動態引數,列如:(*food)

def func(*args):  #

*args接收所有的位置引數

print("

我喜歡:

", args) #

我喜歡: ('李智恩', '陳喬恩', '宋慧喬', '吳宣儀')

#此時返回的是乙個元組

func(

"李智恩

", "

陳喬恩", "

宋慧喬", "

吳宣儀"

)def func(*args, a, b):

print("

我喜歡:

", args, a, b)

#typeerror: func() missing 2 required keyword-only arguments: 'a' and 'b'

#會 包這樣乙個錯,是因為這是的位置引數都被動態引數接收,

#等到位置引數a,b的時候即郿引數了,函式呼叫不起來,程式執行失敗

func(

"李智恩

", "

陳喬恩", "

宋慧喬", "

吳宣儀")#

動態引數接收資料時那必須放在位置引數的後邊

def func(a, b, c="

李子璇", *args):

print("

我喜歡:

", a, b, c, args)

func(

"李智恩

", "

陳喬恩", "

宋慧喬", "

吳宣儀") #

# 我喜歡:"李智恩","陳喬恩","宋慧喬",("吳宣儀,")

func("

李智恩", "

陳喬恩") #

我喜歡:"李智恩","陳喬恩","李子璇"()...空的元組,因為沒有值給它

func("

李智恩", "

陳喬恩", "

宋慧喬") #

喜歡:"李智恩","陳喬恩","宋慧喬"().....空的元組,同樣沒有值給它

func("

李智恩", "

陳喬恩", "

宋慧喬", "

吳宣儀", "

趙麗穎") #

我喜歡:"李智恩","陳喬恩","宋慧喬",("吳宣儀","趙麗穎")

2,動態接收關鍵字引數,用**來接收動態關鍵字引數.

def func(**kwargs):

print

(kwargs)

func(a=1, b=2, c=3) #

返回的是乙個字典

def func(a, b, **kwargs):

print

(a, b, kwargs)

func(1,2,c=3) #

1 2 返回的是乙個字典和2個元素

func(1, b=2, 3) #

報錯,關鍵字和位置引數混亂

#syntaxerror: positional argument follows keyword argument

func(a=1, b=2, c=3) #

1 2 # 返回的是乙個字典和2個元素

def func(*args):

print

(args)

lst = ["

帥","

爆","

太","

陽","

的","

男","人"

]dic =

s = "

帥爆太陽的男人

"func(*lst) #

('帥', '爆', '太', '陽', '的', '男', '人')

#把lst拍碎放到乙個新的元組中,實質是把lst中的每乙個元素迭代放到元組中

func(*dic) #

(1, 2, 3, 4, 5, 6, 7)

#把dic拍碎放到乙個新的元組中,實質是把dic中的每乙個元素key迭代放到元組中,字典拍碎只有key值

func(*s) #

('帥', '爆', '太', '陽', '的', '男', '人')

#把s字串拍碎放到乙個新的元組中,實質是把字串中的每乙個元素迭代放到元組中

func(*lst, *dic) #

('帥', '爆', '太', '陽', '的', '男', '人', 1, 2, 3, 4, 5, 6, 7)

#把lst中每乙個元素和dic中的key值作為元素放到元組中

3,命名空間:在我們定義函式和值之間的關係時,會開闢乙個記憶體空間,這個空間就叫做命名空間.

載入順序:內建函式空間-->全域性命名空間--->區域性命名空間(函式呼叫的時候)

取值順序:區域性命名空間-->全域性命名空間-->內建命名空間

3.1>作用域:顧名思義以就是作用的區域(範圍),因此分為全域性作用域和區域性作用域

用globals()來列印全域性作用域的內容,locals()是用來檢視區域性作用域中的內容(變數和值之間的關係)

def

func():

a =40b = 20

defabc():

print("哈哈"

)

print(a, b) #

這裡使用的是區域性作用域 40 20

print(globals()) #

列印全域性作用域的內容,

#, '__builtins__': ,

#'__file__': 'd:/python_學習檔案/python學習之路/帥爆太陽的男人/日記/blog_code/blog_demo.py', '__cached__': none,

#'func': }

print(locals()) #

列印的是區域性作用域的內容

#func()

4,函式的巢狀:呼叫函式的時候必須用()如果不寫那就不呼叫,在巢狀中最重要的是看呼叫時那個函式並此時列印的是那個值。

def func1():  #

這個是2個並列的函式,執行順序就按照函式對奧用的順序和執行順序

print(111)

deffunc2():

print(222)

func1()

func2()

print(333)

#222

#111

#333

def

func2():

print(222)

deffunc3():

print(666)

print(444)

func3()

print(888)

print(333)

func2()

print(555)

#333

#222

#444

#666

#888

#555

5,關鍵字global和nonlocal

5.1>global在區域性變數中呼叫全域性定義好的變數來重新賦值.

a = 100

deffunc():

global a #

加了global表示不在區域性建立這個變數而是直接使用全域性的a

#並同時把區域性值從新賦值給全域性變數中拿過來的變數(全域性變數和區域性變數必須一致,不然拿不過來)

#此時的區域性變數是區域性變數賦的值

a = 28

print

(a)func()

print

(a)#28#

28

a = 10

deffunc1():

a = 20

deffunc2():

nonlocal a

a = 30

print

(a) func2()

print

(a)func1()#30

#30

函式引數和命名空間

在函式的定義階段括號內填寫的引數,簡稱 形參 形參只有一種表現形式就是變數名。def func a,b a和b就是函式func的形參 pass 在函式的呼叫階段括號內傳入的引數,簡稱實參。實參有多種表現形式,值 變數名 返回值等,但核心就是資料值。func 1,2 資料1和2就是函式func的實參 ...

函式的引數和命名空間

1 函式無論傳入多少位置引數都可以正常執行 2 函式無論傳入多少關鍵字引數都可以正常執行 def qwer x,y,a print x,y,b qwer qwer a 1,b 2,c 3,d 4 qwer x 1,y 2 1 2 3 定義乙個函式無論傳入多少個位置引數和關鍵字都可以正常執行 def ...

C 預設引數和命名空間

今天再介紹一下c 的一些特點,今天要介紹的是c 的預設引數和命名空間兩個特點,首先介紹一下什麼是預設 sheng 引數,所謂預設引數,顧名思義,就是在宣告函式的某個引數的時候為之指定乙個預設值,在呼叫該函式的時候如果採用該預設值,你就無須指定該引數。預設引數使用主要規則 呼叫時你只能從最後乙個引數開...