1. 程式人生 > 實用技巧 >Python預設引數的陷阱

Python預設引數的陷阱

一:內建函式

  • globals()
  • locals()
1.返回的是字典,字典裡面的鍵值對:全域性作用域的全部內容
	print(globals())
    
2.返回的是字典,字典裡面的鍵值對:當前作用域的全部內容
	print(locals())

二:預設引數的陷阱

1.預設引數:沒傳值,可變資料型別在記憶體中是同一個
def func(name, alist=[]):
    alist.append(name)
    renturn alist
r1 = fun('whj')
print(r1)		
>>>['whj']
r2 = fun('xhl')
print(r2)		
>>>['whj','xhl']


2.預設引數:傳值
def func(a, alist=[]):
    list.append(a)
    renturn alist
print(func(10))
>>>[10]
print(func(20, []))
>>>[20]
print(func(100))
>>>[10, 100]

3.預設引數執行順序
def func(a, alist=[]):
    list.append(a)
    renturn alist
r1 = func(10)
r2 = func(20, [])
r3 = func(100)
print(r1)
>>>[10, 100]
print(r2)
>>>[20]
print(r3)
>>>[10, 100]

三:區域性變數與全域性變數

1.在函式中,如果你定義了一個變數,但是在定義這個變數之前對其引用了,
  那麼直譯器認為是語法問題,應該在使用前定義
count = 1
def func():
    print(count)
    count = 3   ×
func()

2.global
  在區域性作用域宣告一個全域性變數

3.nonlocal
  不允許操作全域性變數
  內層函式對外層函式的區域性變數進行修改(巢狀函式)