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):(kwargs)
func(a=1, b=2, c=3) #
返回的是乙個字典
def func(a, b, **kwargs):(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):(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()是用來檢視區域性作用域中的內容(變數和值之間的關係)
deffunc():
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
deffunc2():
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 = 100deffunc():
global a #
加了global表示不在區域性建立這個變數而是直接使用全域性的a
#並同時把區域性值從新賦值給全域性變數中拿過來的變數(全域性變數和區域性變數必須一致,不然拿不過來)
#此時的區域性變數是區域性變數賦的值
a = 28
(a)func()
(a)#28#
28
a = 10deffunc1():
a = 20
deffunc2():
nonlocal a
a = 30
(a) func2()
(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 引數,所謂預設引數,顧名思義,就是在宣告函式的某個引數的時候為之指定乙個預設值,在呼叫該函式的時候如果採用該預設值,你就無須指定該引數。預設引數使用主要規則 呼叫時你只能從最後乙個引數開...