1. 程式人生 > >5.1Python函數(一)

5.1Python函數(一)

int 技術 return args 內存大小 tle 參數 cimage mark

目錄

  • 目錄
  • 前言
  • (一)函數的基本知識
  • (二)函數的基本使用
    • ==1.函數的簡單定義==
    • ==2.傳值函數==
    • (3)輸出效果
    • ==3.不定長函數==
    • ==4.缺省函數==
    • ==5.函數的傳值過程==
    • ==6.具有返回值函數==
    • ==7.函數的使用說明==

目錄

前言

分模塊思想,分任務編程,是編程的一大重要思維,其中的實現,函數就擔當了一個重要角色,今天我們就來學習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)輸出效果

技術分享圖片

==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)輸出效果

技術分享圖片

==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)輸出效果

技術分享圖片

==4.缺省函數==

(1)語法說明

在定義函數的時候,給形參賦值,就是缺省函數,所賦的值便是默認值,

def test(name="me")

而在調用的時候,可以傳入參數,也可以不傳入參數。

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

不傳入參數時,為默認值。

(2)源代碼

# 定義缺省參數
def test(name="zyg"):
    print(name)


# 不傳入參數, 默認值
test()
# 傳入參數,優先值是傳入的值
test("me")

(3)輸出效果

技術分享圖片

==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)

技術分享圖片

(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)

技術分享圖片

==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)輸出效果

技術分享圖片

==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)輸出效果

技術分享圖片

作者:Mark

日期:2019/02/02 周六

5.1Python函數(一)