5.1Python函式(一)

夢並不遙遠發表於2019-02-02

目錄

前言

分模組思想,分任務程式設計,是程式設計的一大重要思維,其中的實現,函式就擔當了一個重要角色,今天我們就來學習Python的初級函式。

(一)函式的基本知識

(1)函式的優點

  1. 體積小,減少記憶體大小,冗餘度小。
  2. 重用性強,可重複利用。
  3. 維護方便。
  4. 分解任務,簡化邏輯,使程式碼更加模組化。

(2)函式的分類

  1. 內建函式
  2. 三方函式
  3. 自定義函式

(二)函式的基本使用

==1.函式的簡單定義==

(1)語法說明

def 函式名():

​ 函式體

(2)原始碼

# 定義一個簡單函式
def test():
    print(2**2)
    print(2**3)
    print(2**4)

# 呼叫函式
test()

(3)輸出效果

01.png

==2.傳值函式==

(1)語法說明

定義語法:

def 函式名(var1,var2,……)

​ 函式體

呼叫的時候,有兩種方式:

  1. 順序呼叫,要求實參與形參一一對應。
  2. 關鍵字呼叫,可以不按照順序呼叫。

(2)原始碼

# 定義一個帶引數的函式
def test(var1, var2):
    print(var1+var2)
    print(var1**2+var2**2)
    print(var1**3+var2**3)


# 順序呼叫帶引數的函式
print("順序呼叫")
test(1, 2)

# 關鍵字呼叫帶引數函式
print("關鍵呼叫")
test(var2=2, var1=1)

(3)輸出效果

02.png

==3.不定長函式==

(1)語法說明

當形參為下面兩種形式的時,為不定長引數

  1. *args — 接收為元組型別, 只要使用星號就可以,名字沒關係,習慣用args而已。
  2. **kwargs —接收為字典型別。其傳值時,必須是關鍵字傳值。

注意:裝包與拆包

  1. 裝包:args與kwargs 就是表示整個元組與字典的整體,叫裝包
  2. 拆包:*args 與 **kwargs 表示元組和字典的每個元素,叫拆包

(2)原始碼

# 定義不定長的引數- *args 接收的是元組型別
def test1(*args):
    print(args, type(args))
    print(*args)


# 定義不定長的引數- *args 接收的是字典型別
def test2(**kwargs):
    print(kwargs, type(kwargs))
    # 輸出keyword
    print(*kwargs)
    # 使用value,不能列印出來,不過可以使用
    # 而且形參與實參的keyword一樣,其實就是關鍵字呼叫
    test3(**kwargs)


def test3(a, b, c):
    print(a)
    print(b)
    print(c)


# 呼叫引數,並接收的是 元組
test1(1, 2, 3)

# 呼叫引數,並接收的是 字典
test2(a="zsj", b=18, c="m")

(3)輸出效果

03.png

==4.預設函式==

(1)語法說明

在定義函式的時候,給形參賦值,就是預設函式,所賦的值便是預設值,

def test(name=”me”)

而在呼叫的時候,可以傳入引數,也可以不傳入引數。

傳入引數時,以所傳的引數優先。

不傳入引數時,為預設值。

(2)原始碼

# 定義預設引數
def test(name="zyg"):
    print(name)


# 不傳入引數, 預設值
test()
# 傳入引數,優先值是傳入的值
test("me")

(3)輸出效果

04.png

==5.函式的傳值過程==

(1)語法說明

在python裡函式的傳值:都是==引用傳遞==

  1. 值傳遞(從實參複製一個副本)傳遞給形參
  2. 引用傳遞(直接把實參的id)傳給形參

Python的可變資料型別與不可變資料型別

  1. 可變資料型別:value值改變,id值不改變。(列表,字典)
  2. 不可變型別:value值改變,id值隨之改變。(數值型別,字串型別,布林型別,元組型別)

Python裡函式是否可以改變實參內容問題

  1. 若實參是可變資料型別,則可以實參內容
  2. 若實參是不可變資料型別,則不可以實參內容

(2)可變型別的例項

# 定義一個函式,用id()來判斷其是值傳遞,還是地址傳遞?

def test(num):
    print(id(num))
    num[1] = 5
    print(num)
    print(id(num))

list1 = [1, 2, 3]
print(id(list1))
test(list1)
print("最後的id", id(list1))
print("最後的值", list1)

05.png

(3)不可變型別的例項

# 定義一個函式,用id()來判斷其是值傳遞,還是地址傳遞?


def test(num):
    print(id(num))
    num = 5
    print(num)
    print(id(num))


number = 1
print(id(number))
test(number)
print("最後的id", id(number))
print("最後的值", number)

06.png

==6.具有返回值函式==

(1)語法說明

當我們需要函式處理過後,返回一個結果值。可以使用

return 結果值

結果值:可以是元組型別,列表型別,拆包後的資料

(2)原始碼

# 定義一個具有返回值的函式

def test(a, b):
    mysum = a + b
    mysub = a - b
    return (a, b)


n1 = 4
n2 = 2
sum_1, sub_1 = test(n1, n2)
print(sum_1)
print(sub_1)

(3)輸出效果

07.png

==7.函式的使用說明==

(1)說明:

函式的說明都有一個標準的寫法,才能呼叫help檢視

def 函式名():

​ “””

​ 功能:xxxxx

​ var1:

​ var2:

​ ….

​ return xxxx

​ “””

檢視幫助可以用:help(函式名) ,注意是函式名,不是函式呼叫。

(2)原始碼

# 定義一個具有返回值的函式
def test(a, b=1):
    """
        功能:該函式實現兩個值的加減,並返回結果。
    :param a: 參與運算的一個值,數字型別,不可選,無預設值
    :param b: 參與運算的另一個值,數字型別,可選,預設值為1
    :return: 和與差的結果,元組型別。例如 (1, 2)
    """
    mysum = a + b
    mysub = a - b
    return (a, b)


# 檢視幫助
help(test)

(3)輸出效果

08.png

作者:Mark

日期:2019/02/02 週六

相關文章