天天看點

【python 基礎篇 十】python函數的基礎使用

作者:煩人的星辰

1.函數的概念

概念

寫了一段代碼實作了某個小功能;然後把這些代碼集中到一塊,起一個名字,下一次就可以根據這個名字再次使用這個代碼,這就是函數。

作用

  1. 友善代碼的重複使用。
  2. 分解任務,簡化程式邏輯
  3. 使代碼更加子產品化

函數分類

  1. 内建函數
  2. 三方函數
  3. 自定義函數

2.函數的基本使用

1.簡單定義

def 函數名():

函數體

2.函數調用

函數名()

#函數的定義
def test():
    print(2**2)
    print(2**3)
    print(2**4)
    
#函數的調用  
test()#輸出4 8 16           

3.函數的參數

3.1 單個參數

場景

需要動态的調整函數體中某一個處理資訊時,則可以以參數的形式接收到相關資料。

定義

def 函數名(參數名稱):

函數體:函數體中,可以直接以變量的方式使用該參數

函數的調用

函數名(參數值)

形參和實參的概念

上述函數定義中,參數名稱 即為形參 ,在調用函數的時候,傳遞的真實資料,即為實參。

#單個參數的函數的定義
def test(num):
    print(num**2)
#函數的調用
test(3)#輸出 9
test(4)#輸出 16           

3.2 多個參數

場景

需要動态的調整函數體中多個處理資訊使,則可以用逗号做分割,接收多個參數。

定義

def 函數名(參數名稱1,參數名稱2,........):

函數體:函數體中,可以直接以變量的方式使用該參數

函數的調用

函數名(參數1,參數2,.....)

函數名(參數名稱1=參數1,參數名稱2=參數2,....) 可以指明形參名稱,稱為 “關鍵字參數” 。不需要嚴格按照順序

#多個參數的函數的定義
def test(num1,num2):
    print(num1+num2)
#函數的調用
test(3,4)#輸出 7
test(8,16)#輸出 24
test(num2 = 18,num1 = 54)#輸出 72           

3.3 不定長參數

場景

如果函數體中,需要處理的資料,不确定長度,則可以使用不定長參數的方式接收資料。

定義

方式一

  1. def 函數名(*args):
  2. *args:接收的參數組成一個元組
  3. 函數體:函數體中,可以直接以元組變量的方式使用該參數
  4. 函數使用:函數名(參數1,參數2,參數3,.....)

方式二

  1. def 函數名(**args):
  2. args:**接收的參數組成一個字典
  3. 函數體:函數體中,可以直接以元組變量的方式使用該參數
  4. 函數使用:函數名(參數名稱1=參數1,參數名稱2 = 參數2,參數名稱3 = 參數3,.....)

參數拆包

裝包:把傳遞的參數,包裝成一個集合,稱之為“裝包”

拆包:把集合參數,再次分解成單獨的個體,稱之為“拆包”

#不定長參數的函數的定義  *args  元組
def mySum(*t):
    print(t,type(t))
    result = 0
    for v in t:
        result += v
    print(result)
#函數的調用
mySum(3,4,5,6,7)#輸出 (3, 4, 5, 6, 7) <class 'tuple'>   25
mySum(3,8,5,12,7)#輸出 (3, 8, 5, 12, 7) <class 'tuple'>  35


#不定長參數的函數的定義  **args   字典
def mySum(**kwargs):
    print(kwargs,type(kwargs))
#函數的調用
mySum(name ="sz",age = 12)#輸出 {'name': 'sz', 'age': 12} <class 'dict'>


#參數的拆包和裝包  *args
def mySum(a,b,c,d):
    print(a+b+c+d)
def test(*args):
    print(args)
    #拆包操作
    mySum(args)#報錯,b,c,d三個沒有指派成功
    mySum(args[0],args[1],args[2],args[3])#這樣太繁瑣
    mySum(*args)#這樣直接把已經裝包的參數,再次拆包後指派。
test(1,2,3,4)#輸出 (1, 2, 3, 4) 10 10

#參數的拆包和裝包  **args  
def mySum(a,b):
    print(a)
    print(b)
def test(**args):
    print(args)
    #拆包操作
    mySum(**args)
test(a=1,b=2)#輸出 {'a': 1, 'b': 2} 1,2
test(a=1,c=2)#輸出 報錯 因為字典拆包是拆成 a=1,c=2 這樣mySum函數中的參數沒有c           

3.4 預設參數

場景

當我們使用一個函數的時候,如果大多數情況下,使用的某個資料是一個固定值,則可以使用預設值,這種參數,稱為“預設參數”

定義

def 函數名(變量名1=預設值,變量名2=預設值,........):

函數體:函數體中,即使外界沒有傳遞指定變量,也可以使用,隻不過值是給定的預設值

函數的調用

函數名(變量1,變量2,.....) 此次如果是預設參數,則可以不填寫

#預設參數,當沒有參數時,會使用預設值
def hit(somebody = "豆豆"):
        print("我想打",somebody)
hit("zhangsan")#輸出我想打 zhangsan 
hit()#輸出我想打 豆豆           

3.5 參數注意

值傳遞和引用傳遞

值傳遞:是指傳遞過來的,是一個資料的副本,修改副本,對原件沒有任何影響

引用傳遞:是指傳遞過來的,是一個變量的位址,通過位址,可以操作用一份原件。

在python當中,隻有引用傳遞(位址傳遞),但是如果資料類型是可變的資料類型,則可以改變原件,如果資料類型是不可變類型,則不可以改變原件。

def change(num):
print(id(num))#140706432668744
b = 10
print(id(b))#140706432668744
change(b)
#此時b和num同時指向一個位址值,c c++ java三個語言是對于num建立一個新位址存放10


def change(num):
 print(id(num))#140706434962504
 num = 666
 print(id(num))#2095039032144
b = 10
print(id(b))#140706434962504
change(b)
#此時因為num發生了改變,是以建立了一個新位址來存放num的改變,b沒有發生改變           

4.函數的傳回值

場景

當我們通過某個函數,處理好資料之後,想要拿到處理的結果

文法

def 函數名(參數等):

函數體

return 資料

注意事項

  • return後續代碼不會被執行
  • 隻能傳回一次
  • 如果想要傳回多個資料,可先把多個資料包裝成一個集合,整體傳回。如清單,元組,字典等等。