python函數、函數參數、作用域

一、函數定義和調用

1. 函數的定義
1)定義函數關鍵字:def
2)作用:方便好用、複用性高
語法:

def 函數名():
	#函數內部代碼

2. 函數的調用:函數名()

二、函數的返回值:return

1. return的作用:

  • 返回值數目=0:返回None
  • 返回值數目=1:返回object
  • 返回值數目>1:返回tuple

2 應用場景:
當需要返回結果的時候就用return,不需要返回的時候就不用
注意點:
· return是用來給函數返回結果的
· 當函數執行到return是函數執行結果
· 函數若沒有定義return,默認返回None

三、函數參數

  • 參數的定義:函數名後面的括號中定義參數
  • 參數傳遞有兩種形式:
    1 位置傳參:按位置進行傳參
    2 關鍵字傳參:按關鍵字進行傳參
    注意:混合方式傳參時:關鍵字傳參寫在位置傳參之後
  1. 形參:

    定義時小括號中的參數,用來接收實參用的,稱爲“形參”

  2. 實參:

    調用時小括號中的參數,用來傳遞給形參用的,稱爲“實參”

  3. 形參的定義有三種形式

1)必備參數

· 調用函數的時候必須要傳的參數,即調用參數時的數量和定義函數時聲明的數量一致,而且傳入的位置和定義的位置順序一致。
2)默認參數(缺省參數)
調用函數時,默認參數的值如果沒有傳入,則是默認值,否則使用傳入的參數;
帶有默認值的參數一定要位於參數列表的最後面
3)不定長參數
聲明時不會命名,能處理比當初聲明時更多的參數
*args
打印出來是個元組,用來接收未被其他參數接收的所有未命名的位置參數。
例如:

	def func(*args, **kwargs):
    print(args)
    print(kwargs)


func(11, 22, 33)

運行結果:

(11, 22, 33)
{}

**kwargs
打印出來是個字典,用來接收未被其他參數接收的所有命名的關鍵字參數,即key=value鍵值對保存在裏面,我們可以通過for循環把kwargs裏面的鍵值對遍歷出來。
例如:

	def func(*args, **kwargs):
    print(args)
    print(kwargs)


func(11, 22, 33, a=100, b=200)

運行結果:

(11, 22, 33)
{'a': 100, 'b': 200}

注意:

  1. 調用的時候傳參儘量統一風格(要麼都通過位置傳參,要麼都使用關鍵字傳參)
  2. 位置傳參無法跳過默認參數,關鍵字傳參可以跳過默認參數
  3. 超出的位置參數放在*args(元組)中
  4. 超出的關鍵字參數放在*kwargs(字典)中
  5. 拆包
    列表拆包:在列表前加一個 * 號。
    元組拆包:在元組前加一個 * 號。
    同理可以對字典、字符串、序列類型等進行拆包
    例如:
def func(*args, **kwargs):
    print(args)
    print(**kwargs)


data = (11, 22, 33)
# 未拆包
func(data)
# 拆包(通過*對元組拆包,只有在調用函數的時候可以用)
func(*data)

注意:兩個*不能對字典拆包

四、函數的作用域

1. 全局變量:
在函數外部定義的變量,不論是函數外部還是內部都可以訪問。
例如(在函數內部訪問外部定義的變量):

a = 100


def func():
    print(a)


func()

運行結果:

100

2. 局部變量
在函數內部定義的變量,只能在函數內部使用,在函數外部無法調用。
例如:(在函數內部訪問內部定義的變量):

def func():
    b = 100

    print(b)


func()

運行結果:

100

例如(在函數外部調用內部定義的變量):

def func():
    b = 100


func()
print(b)

運行結果:

Traceback (most recent call last):
  File "E:/PycharmProjects/py_01/py01_07test/02test.py", line 16, in <module>
    print(b)
NameError: name 'b' is not defined

注意點:
· 不同的函數,可以定義相同名字的局部變量,但是各用各的不會產生影響。
· 局部變量的作用:爲了臨時保存數據需要在函數中定義變量來進行存儲。
3. global
在函數內部可以用global聲明全局變量
例如:

def func():
    global b  # 在函數內部聲明全局變量
    b = 99


func()
print(b)

運行結果:

99

注意點:

  • 使用global關鍵字修飾的變量不用提前定義
  • 在函數內部變量定義前,引用變量會提示錯誤,局部變量錯誤:在定義前引用的局部變量;因爲變量的查找是由內向外查找的,先找自身的作用域中有沒有,若沒有才會去外面的作用域中去查找
  • 局部變量和全局變量的變量名最好不要相同,如果非要一樣,那麼要把局部變量的定義放在該函數的最前面
a = 100


def func():
    print(a)

    a = 200


func()

print(a)

運行結果:

Traceback (most recent call last):
  File "E:/PycharmProjects/py_test/py_test/test.py", line 19, in <module>
    func()
  File "E:/PycharmProjects/py_test/py_test/test.py", line 14, in func
    print(a)
UnboundLocalError: local variable 'a' referenced before assignment

擴展:
使用nonlocal聲明外部函數的局部變量,可以在嵌套函數內部修改外部函數的局部變量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章