函數-參數+作用域
參數:
??定義函數時(參數常見的使用):1. def i(num)??2. def i(num1,num2 = 自己定義)??3.def i(*arg,*kwarg) *args:接收位置參數??**kwargs:接收關鍵字參數
??調用函數時 (參數的傳入):位置參數>關鍵字參數????????函數的參數傳遞的是:內存地址(引用)
????
不定長參數:
*args:調用函數時使用位置傳參,得到元組
**kwaaargs:調用函數時使用關鍵字傳參,得到字典
*args:
def funk(*arg):
print(arg)
funk(1,2,3)
funk(*(1,2,3)) #*可以理解為對列表進行拆散
>>>(1, 2, 3)
(1, 2, 3)
**kwargs:
def funk(**kwargs):
print(kwargs)
funk(a = 1,b =2)
funk(**{'a':1,'b':2})
>>>{'a': 1, 'b': 2}
{'a': 1, 'b': 2}
def i (*args,**kwargs):
print(args,kwargs)
i (1,[1,2],*[1,2,3],a = 1,**{"b":2})
>>>(1,[1,2],1,2,3){"a":1,"b":2}
??????坑:默認參數為可變類型類型時: 函數的默認值是在函數定義時就創建的一個對象,而不是在每次調用函數時重新創建的,??????如果默認參數是可變類型,若每次調用時沒用傳入該參數,那么就會使用同一個在函數定義時創建的那個對象
#如:
def func(data,value=[]):
value.append(data)
return value
a = func(1)
b = func(2,[66,77,88])
c = func(2)
print(a,b,c)
>>>
[1, 2] [66, 77, 88, 2] [1, 2]
def func(data,value=[]):
value.append(data)
print(value)
func(1)
func(3,[22,33,44])
func(2)
>>>
[1]
[22, 33, 44, 3]
[1, 2]
作用域:
????全局作用域和局部作用域(一個函數為一個作用域) --> 全局變量,局部變量 ??????規范:全局變量用大寫
????定義的函數中變量的查找:自己->父級->父級->....父級->全局 :即函數調用時可讀取全局變量,修改全局變量(可變類型,如對列表添加元素)但此處的修改不能是對全局變量重新進行賦值
????改變全局變量關鍵字:global
????改變父級變量關鍵字:nonlocal
??????
name = "gh"
def i():
name = "g"
def e():
global name #聲明這層使用的全局變量name
name = "guohan" #全局變量重新賦值
print(name) #guohan
e()
print(name) #g,其在第一層函數下
i()
print(name) #輸出全局變量name(i()被調用則全局name被重新賦值
返回值:默認返回None,特殊情況:return 1,2,3,4>>>(1,2,3,4) 返回元組??????return (1)>>>1????return (1,)>>>(1,) 元組
浙公網安備 33010602011771號