python 動態傳參,名稱空間和作用域,函數的嵌套,global和nonlocal
阿新 • • 發佈:2018-08-09
turn 聚合 改變 名稱空間 class pytho 不能 inner 創建
一、動態傳參
1.位置參數動態傳參
def func(*args): *表示動態傳參
* 在這裏表示接受位置參數的動態傳參,接收到的是元組。
def fun(*args): print(args) fun(‘aaa‘,3,5,6,‘ccc‘) # 結果(‘aaa‘, 3, 5, 6, ‘ccc‘)
2.關鍵字的動態傳參
def func(**kwargs):
函數體(代碼塊)
func(n=7,m="aa"):
**表示接收關鍵字參數的動態傳參,接收到的是字典。
def fun(**kwargs): print(kwargs) fun(name="Tom",age="男",hobby="女") # 結果 {‘name‘: ‘Tom‘, ‘age‘: ‘男‘, ‘hobby‘: ‘女‘}
順序:位置參數 => *arg(arguments)(位參動態傳參) => 默認值 => **kwargs(關鍵字參數)
以上參數可以隨意搭配使用
3.函數的註釋
def fun():
"""
註釋,說明這個函數用來幹什麽
”“”
print(fun.__doc__) #document文檔
def fun(a,b): """ 註釋,說明這個函數用來幹什麽 :param a: :param b: :return: """ return fun(5,6) print(fun.__doc__) #打印出函數的註釋
4.接收所有參數
def fun(*args,**kwargs): #無敵傳參
pass
*,** 實參位置是打散
*,** 形參位置是聚合
def fun(*args,**kwargs): print(args,kwargs) li = [‘r‘,‘n‘,‘g‘,‘w‘,‘i‘,‘n‘] dic = {‘name‘: ‘uzi‘,‘age‘:‘男‘,‘hobby‘:‘adc‘} fun(*li,**dic) # 結果 (‘r‘, ‘n‘, ‘g‘, ‘w‘, ‘i‘, ‘n‘) {‘name‘: ‘uzi‘, ‘age‘: ‘男‘, ‘hobby‘: ‘adc‘}
二、命名空間與作用域
1.全局作用域:
全局命名空間,內置命名空間
2.局部作用域:
局部命名空間
globals() 可以查看全局作用域中的內容
locals() 查看當前作用域中的內容
a = 5 # 全局變量 def fun(): a = 10 #局部變量 print(locals()) print(globals()) fun()
函數的嵌套
函數可以相互嵌套
a = 1 def fun(): a = 5 def inner(): a = 10 print(a) inner() print(a) print(a) fun()
global
1.可以把全局中的內容引入到函數的內部
2.在全局創建一個變量
(在函數內部想改變外部的值時會引用,全局變量本身就不安全,不能隨意修改)
a = 1 def fun(): global a a += 5 print(a) # 6 print(a) # 1 fun() print(a) # 6
nonlocal
尋找外層函數中離他最近的那個變量
a = 1 def fun(): a = 5 def inner(): nonlocal a a += 5 print(a) # 10 print(a) # 5 inner() print(a) # 10 print(a) # 1 fun() print(a) # 1
python 動態傳參,名稱空間和作用域,函數的嵌套,global和nonlocal