def chi(quality_food, junk_food): print("我要吃", quality_food, junk_food)
chi("⼤⽶飯", "⼩⽶飯") # "⼤⽶飯"傳遞給quality_food "⼩⽶飯"傳遞給junk_food,按照位置傳
def chi(*food): print("我要吃", food)
chi("⼤⽶飯", "⼩⽶飯")
結果: 我要吃 ('⼤⽶飯', '⼩⽶飯') # 多個參數傳遞進去. 收到的內容是元組tuple
def chi(*food, a, b): print("我要吃", food, a, b)
chi("⼤⽶飯", "⼩⽶飯", "⻩⽠", "茄⼦")
Traceback (most recent call last): File "/Users/sylar/PycharmProjects/oldboy/fun.py", line 95, in <module> chi("⼤⽶飯", "⼩⽶飯", "⻩⽠", "茄⼦") TypeError: chi() missing 2 required keyword-only arguments: 'a' and 'b'
因此必須改寫成如下代碼:
def chi(*food, a, b): print("我要吃", food, a, b)
chi("⼤⽶飯", "⼩⽶飯", a="⻩⽠", b="茄⼦") # 必須⽤關鍵字參數來指定
def chi(a, b, *food): print("我要吃", a, b, food)
chi("⼤⽶飯", "⼩⽶飯", "饅頭", "⾯條") # 前兩個參數⽤位置參數來接收, 後⾯的參數⽤動態參數接收
def chi(a, b, c='饅頭', *food): print(a, b, c, food)
chi("⾹蕉", "菠蘿") # ⾹蕉 菠蘿 饅頭 (). 默認值⽣效 chi("⾹蕉", "菠蘿", "葫蘆娃") # ⾹蕉 菠蘿 葫蘆娃 () 默認值不⽣效 chi("⾹蕉", "菠蘿", "葫蘆娃", "⼝罩") # ⾹蕉 菠蘿 葫蘆娃 ('⼝罩',) 默認值不⽣效
def chi(a, b, *food, c="娃哈哈"): print(a, b, food, c)
chi("⾹蕉", "菠蘿") # ⾹蕉 菠蘿 () 娃哈哈 默認值⽣效 chi("⾹蕉", "菠蘿", "葫蘆娃") # ⾹蕉 菠蘿 ('葫蘆娃',) 娃哈哈 默認值⽣效 chi("⾹蕉", "菠蘿", "葫蘆娃", "⼝罩") # ⾹蕉 菠蘿 ('葫蘆娃', '⼝罩') 娃哈哈 默認值⽣效
def func(**kwargs): print(kwargs)
func(a=1, b=2, c=3) func(a=1, b=2)
結果: {'a': 1, 'b': 2, 'c': 3} {'a': 1, 'b': 2}
def func(a, b, c, d): print(a, b, c, d)
# 關鍵字參數必須在位置參數後⾯, 不然參數會混亂 func(1, 2, c=3, 4)
位置參數 > *args > 默認值參數 > **kwargs
def func(*args, **kwargs): print(args, kwargs)
func("麻花藤","⻢暈",wtf="胡辣湯")
def fun(*args): print(args)
lst = [1, 4, 7] fun(lst[0], lst[1], lst[2])
fun(*lst) # 能夠使⽤*把⼀個列表按順序打散 s = "⾂妾作不到" fun(*s) # 字符串也能夠打散, (可迭代對象)
def fun(**kwargs): print(kwargs)
dic = {'a':1, 'b':2} fun(**dic)
def chi(food, drink): """ 這⾥是函數的註釋, 先寫⼀下當前這個函數是⼲什麼的, ⽐如我這個函數就是⼀個吃 :param :param food: 參數food是什麼意思 :param :param drink: 參數drink是什麼意思 :return :return: 返回的是什麼東東 """ print(food, drink) return "very good"
def fun(): a = 10 print(a)
fun() print(a) # a不存在了已經..
1. 全局命名空間--> 咱們直接在py⽂件中, 函數外聲明的變量都屬於全局命名空間2. 局部命名空間--> 在函數中聲明的變量會放在局部命名空間3. 內置命名空間--> 存放python解釋器爲咱們提供的名字, list, tuple, str, int這些都是內置命名空間
1. 內置命名空間2. 全局命名空間3. 局部命名空間(函數被執⾏的時候)
1. 局部命名空間2. 全局命名空間3. 內置命名空間
a = 10 def func(): a = 20 print(a)
func() # 20
a = 10 def func(): a = 40 b = 20 def abc(): print("哈哈") print(a, b) # 這⾥使⽤的是局部做⽤域 print(globals()) # 打印全局做⽤域中的內容 print(locals()) # 打印局部做⽤域中的內容
func()
def fun1(): print(111) def fun2(): print(222) fun1()
fun2() print(111)
# 函數的嵌套 def fun2(): print(222) def fun3(): print(666) print(444) fun3() print(888) print(33) fun2() print(555)
a = 100 def func(): global a # 加了個global表示再也不局部建立這個變量了. ⽽是直接使⽤全局的a a = 28 print(a)
func() print(a)
lst = ["麻花藤", "劉嘉玲", "詹姆斯"] def func(): lst.append("⻢云云") # 對於可變數據類型能夠直接進⾏訪問. 可是不能改地址. 說⽩了. 不能賦值 print(lst)
func() print(lst)
a = 10 def func1(): a = 20 def func2(): nonlocal a a = 30 print(a) func2() print(a)
func1()
結果: 加了nonlocal 30 30 不加nonlocal 30 20
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)