動态傳參 (重點) * **
形參
* args在形參位置, *表示不定參數--接受的是位置參數
接受到的位置參數的動态傳參: 都是元組
形參的順序:
位置 *args 預設值 **kwargs 以後寫參數,可以随意的進行搭配
def chi(zhushi, cai, fushi, tang, tiandian):
print(zhushi,cai,fushi,tang,tiandian)
chi("大碗大米飯", "火爆大頭菜", "把子肉", "蕃茄雞蛋湯", "烤地瓜")
chi("小碗大米飯", "火爆大頭菜") # 參數不夠
形參的順序(重點):
位置 *args 預設值 **kwargs
以後寫參數. 可以随意的進行搭配, 但是, 順序不能串
**kwargs在形參表示動态傳參--關鍵字參數,關鍵字動态傳參接收到的是字典
**在形參表示動态傳參-關鍵字參數
關鍵字動态傳參接收到的是字典
def func(**kwargs): # 也是聚合. ** 聚合成字典
print(kwargs)
# func(1,2,3,4,5,6,7) # 位置參數. 報錯
func(a=1, b=2, c=3, haha="呵呵", good="not bad")
實參
*在實參的是打散,把清單,元組,字元串打散成位置參數進行傳遞
** 在形參表示動态傳參--關鍵字參數;打散,打散成關鍵字
關于*和**
形參: 聚合
位置參數* ->元組
關鍵字** -> 字典
實參: 打散
清單,字元串,元素 -> *
字典 ->**
無敵傳參
def func(*args, **kwargs): arguments參數 keyword-arguments關鍵字參數
pass
作用域(重要)和名稱空間
名稱空間:用來存放名字(變量,函數名,類名,引入的子產品)的
1.全局名稱空間:我們在py檔案中自己寫的變量, 函數.....
2.内置名稱空間; 我們python解釋器提供好的一些内置内容 (print,input..........)
3.局部名稱空間: 在我們執行函數的時候,會産生一個局部名稱空間.放的是:函數内部的内容
名稱空間可能會有無數個,對于局部名稱空間.相對是獨立的,一般互不幹擾
作用域:
1.全局作用域: 内置+全局
2.局部作用域: 局部
從全局找局部-> 找不到
從局部找全局-> 可以找到
怎麼檢視全局或局部中的内容:
globals 全局作用域: 内置+全局名稱空間
locals 檢視目前作用域的内容
def chi():
a = 20
b = 30
print(locals()) # 檢視目前作用域中的内容
print(globals()) # alex,老男孩兒, 武sir, 全局作用域中的内容
chi()
print(locals()) # 全局
print(globals()) # 全局
函數的嵌套
nonlocal和global 關鍵字(重點)
global 表示從全局把一個變量引入局部,後面使用的都是全局變量
nonlocal 在局部,尋找離他最近的外層的一個變量
如果沒有global和nonlocal ,查找的順序:自己,上一層,上一層,上一層
函數的互相調用
def func1():
print("我是神器的func1")
def func2():
func1()
print("我是神器的func2")
def func3():
print("我是神器的func3")
# func5()
def func4():
func3()
print("我是神器的func4")
def func5():
func2()
func3()
print("我是神器的func5")
def func6():
func5()
print("我是神器的func6")
func3()
func1()
func6()
def outer():
def inner():
print("我的天哪")
print("還可以這樣寫???")
inner()
outer()
inner() # 在全局不能找到局部的内容
def func1():
print("1")
def func2():
print("2")
def func3():
print("3")
print("4")
func3()
print(5)
print("6")
func2()
print("7")
func1()
全局變量一般是不能随意的修改的
a = 10
def func():
# 慎用.
global a # global 表示從全局把一個變量引入到局部, 後面使用的a都是全局變量
a += 10 # ?? a = a + 10 # 現在的a是全局的, 你現在視圖改全局變量
print("裡面的列印",a)
func()
print("外面的列印", a)
a = 10
def func():
def inner():
# 慎用.
global a # global 表示從全局把一個變量引入到局部, 後面使用的a都是全局變量
a += 10 # ?? a = a + 10 # 現在的a是全局的, 你現在視圖改全局變量
print("裡面的列印",a)
inner()
func()
print("外面的列印", a)
nonlocal 在局部, 尋找離他最近的外層的一個變量
a = 50
def func1():
# a = 10 # 局部
def func2():
nonlocal a # 不找全局, global找全局
a += 10 # a = a + 10 python不讓這麼幹
print("func2", a)
func2()
print(a)
func1()
print(a)
如果沒有nonlocal和global 查找的順序: 自己, 上一層, 上一層, 上一層
def func0():
a = 50
def func1():
a = 10 # 局部
def func2():
nonlocal a # 不找全局, global找全局
a += 10 # a = a + 10 python不讓這麼幹
print("func2", a)
func2()
print(a)
func1()
print(a)
func0()
a = 1
def fun_1():
a = 2
def fun_2():
nonlocal a
a = 3
def fun_3():
a = 4
print(a)
print(a)
fun_3()
print(a)
print(a)
fun_2()
print(a)
print(a)
fun_1()
print(a)
flag = False
def login():
global flag
uname = input("使用者名:")
upwd = input("密碼:")
if uname == "alex" and upwd == "123":
flag = True
else:
flag = False
def fatie():
if flag == True:
print("可以發帖")
else:
print("滾去登入")
login()
fatie()
fatie()
fatie()
fatie()