生活随笔
收集整理的這篇文章主要介紹了
动态参数与global和nonlocal
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 動(dòng)態(tài)參數(shù)
位置參數(shù)的動(dòng)態(tài)參數(shù): *args
關(guān)鍵字參數(shù)的動(dòng)態(tài)參數(shù) : **kwargs
順序:
位置,*args,默認(rèn)值,**kwargs
在形參上*聚合, **聚合
在實(shí)參上*打散, **打散
def chi(good_food, bad_food,drink, ice, jiu):print("我要吃", good_food, bad_food)chi("蓋澆飯", "辣條")位置參數(shù) > *動(dòng)態(tài)參數(shù) > 默認(rèn)值參數(shù)def chi( *food, a, b): # 可以傳入任意的位置參數(shù)print("我要吃", food) # 動(dòng)態(tài)參數(shù)接收到的是tuple類型的數(shù)據(jù)chi("蓋澆飯", "辣條", "面條")
def func(a, b, c, *args, d = 5):print(a, b, c, d, args)func(1,2,3)
func(1,2,3,4,5,6,7, d ="馬大哈")def chi(*food):print("我要吃", food)寫函數(shù). 給函數(shù)傳遞任意個(gè)整數(shù). 返回這些數(shù)的和
def he(*n):sum = 0for e in n:sum += ereturn sum
print(he(5))動(dòng)態(tài)接收關(guān)鍵字參數(shù)*位置參數(shù)
**關(guān)鍵字參數(shù)
def func(**food): # **food動(dòng)態(tài)接收關(guān)鍵字參數(shù)print(food) # 接收到的是字典func(good_food="蓋澆飯", bad_food="辣條", drink="冰封")關(guān)鍵字參數(shù)一定在位置參數(shù)后面
位置參數(shù) > *args > 默認(rèn)值 > **kwargs這個(gè)函數(shù)可以接收所有的參數(shù)(無敵的)
def func(*args, **kwargs):print(args)print(kwargs)
func(1, 2, 5, 6, name="taibai",age=18, sex="不詳")把列表中的每一個(gè)元素作為參數(shù), 傳遞給函數(shù). 一次都傳過去def func(*args, **kwargs): # *表示聚合,所有的位置參數(shù), 聚合成元組 **聚合成字典print(args)print(kwargs)# lst = ["馬虎疼", "大洋哥", "小花生", "毛尖妹妹"]
# func(*lst) # 實(shí)參, 打散, 迭代產(chǎn)生的dic = {"name":"太白", "alex":"wuse"}
func(**dic) # 把字典打散. 以key=value形式進(jìn)行傳參def func(a, b):"""計(jì)算a+b的和, 返回一個(gè)數(shù):param a: 第一個(gè)數(shù):param b: 第二個(gè)數(shù):return: 返回計(jì)算之后的和"""return a + b定義函數(shù)
def 函數(shù)名(形參): 1.位置參數(shù), 2, *args, 3.默認(rèn)值參數(shù), 4. **kwargs函數(shù)體 return 返回值
函數(shù)名(實(shí)參) 1. 位置參數(shù). 2.關(guān)鍵字參數(shù). 3. 混合參數(shù),
2. 命名空間和作用域
命名空間:
1. 內(nèi)置命名空間: python解釋內(nèi)部運(yùn)行時(shí)的變量函數(shù)
2. 全局命名空間: 我們在py文件中直接聲明出來的變量,函數(shù)
3. 局部命名空間: 在函數(shù)內(nèi)部聲明的變量和函數(shù).
作用域:
1.全局作用域:內(nèi)置+全局
2.局部作用域:局部
globals() 查看全局作用域中的名字
locals() 查看當(dāng)前作用域中的名字
a = "123" # 全局
b = 36 # 全局
def func(): # 全局c = "馬化騰" # 局部def func2():print(c)a = 10
def func():a = 20print(a) # 就近原則print(globals()) # globals() 獲取到全局作用域(內(nèi)置,全局)中的所有名字print(locals()) # locals() 查看當(dāng)前作用域中的所有名字
func()
3. global和nonlocal
global: 把全局變量拿到局部來用.
nonlocal: 把離他最近的一層的變量拿過來.不會找全局
函數(shù)的嵌套
def chi():print("我要吃")print(chi())def func1():print("哈哈")def func2():func1()print("呵呵")func1()
func2()def func1():print("呵呵")def func2():print("哈哈")func2()print("吼吼")
func1() #def func1():print("趙")def func2():print("錢")def func3():print("孫")print("李")def func4():print("哈哈")func2()print("周")func2()
func1()def func():global a # a 不再是局部變量. 是全局變量a = 30 # 把全局中的a重新賦值成30print(a)
func()
print(a)a = 10
def func1():def func2():nonlocal a # 找局部作用域中 離他最近的那個(gè)變量引入進(jìn)來a = 20print(a)func2()print(a)
func1()a = 1
def fun_1():a = 2def fun_2():def fun_3():nonlocal aa = 4print(a)print(a)fun_3()print(a)print(a)fun_2()print(a)
print(a)
fun_1()
print(a)
轉(zhuǎn)載于:https://www.cnblogs.com/duanpengpeng/p/9305177.html
總結(jié)
以上是生活随笔為你收集整理的动态参数与global和nonlocal的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。