天天看點

詳解函數傳回值和參數 | 手把手教你入門Python之四十三

上一篇: 詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二 下一篇: 遞歸函數和匿名函數的使用介紹 | 手把手教你入門Python之四十四 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。

函數傳回值

在python中我們怎樣傳回多個值?

⼀、多個return?

def create_nums():
 print("---1---")
 return 1 # 函數中下⾯的代碼不會被執⾏,因為return除了能夠将資料傳回之外,還有⼀個隐藏的功
能:結束函數
 print("---2---")
 return 2
 print("---3---")           

總結1

  • ⼀個函數中可以有多個return語句,但是隻要有⼀個return語句被執⾏到,那麼這個函數就會結束了,因

    此後⾯的return沒有什麼⽤處

  • 如果程式設計為如下,是可以的因為不同的場景下執⾏不同的return
def create_nums(num):
 print("---1---")
 if num == 100:
 print("---2---")
 return num+1 # 函數中下⾯的代碼不會被執⾏,因為return除了能夠将資料傳回之外,還
有⼀個隐藏的功能:結束函數
 else:
 print("---3---")
 return num+2
 print("---4---")
result1 = create_nums(100)
print(result1) # 列印101
result2 = create_nums(200)
print(result2) # 列印202           
詳解函數傳回值和參數 | 手把手教你入門Python之四十三
詳解函數傳回值和參數 | 手把手教你入門Python之四十三

⼆、⼀個函數傳回多個資料的⽅式

def divid(a, b):
 shang = a//b
 yushu = a%b
 return shang, yushu #預設是元組
result = divid(5, 2)
print(result) # 輸出(2, 1)           

總結2

  • return後⾯可以是元組,清單、字典等,隻要是能夠存儲多個資料的類型,就可以⼀次性傳回多個數

    據。

def function():
 # return [1, 2, 3]
 # return (1, 2, 3)
 return {"num1": 1, "num2": 2, "num3": 3}           
  • 如果return後⾯有多個資料,那麼預設是元組。

三、對傳回的資料直接拆包

def get_my_info():
 high = 178
 weight = 100
 age = 18
 return high, weight, age # 函數傳回三個資料,會⾃動打包為元組
# result = get_my_info() # result 接收到⼀個元組
# print(result)
my_high, my_weight, my_age = get_my_info() # 直接把元組拆分為三個變量來使⽤,更加⽅便
print(my_high)
print(my_weight)
print(my_age)           

總結

  • 拆包時要注意,需要拆的資料的個數要與變量的個數相同,否則程式會異常
  • 除了對元組拆包之外,還可以對清單、字典等拆包
In [17]: a, b = (11, 22)
In [18]: a
Out[18]: 11
In [19]: b
Out[19]: 22
In [20]: a, b = [11, 22]
In [21]: a
Out[21]: 11
In [22]: b
Out[22]: 22
In [23]: a, b = {"m":11, "n":22} # 取出來的是key,⽽不是鍵值對
In [24]: a
Out[24]: 'm'
In [25]: b
Out[25]: 'n'           

四、函數的回顧總結

詳解函數傳回值和參數 | 手把手教你入門Python之四十三
詳解函數傳回值和參數 | 手把手教你入門Python之四十三

函數參數詳解

⼀、預設參數

調⽤函數時,預設參數的值如果沒有傳⼊,則取預設值。

下例會列印預設的age,如果age沒有被傳⼊:

def printinfo(name, age=35):
 # 列印任何傳⼊的字元串
 print("name: %s" % name)
 print("age %d" % age)
# 調⽤printinfo函數
printinfo(name="miki") # 在函數執⾏過程中 age取預設值35
printinfo(age=9 ,name="miki")
           

以上執行個體輸出結果:

name: miki
age: 35
name: miki
age: 9           

  • 在形參中預設有值的參數,稱之為預設參數
  • 注意:帶有預設值的參數⼀定要位于參數清單的最後⾯
>>> def printinfo(name, age=35, sex):
... print name
...
 File "<stdin>", line 1
SyntaxError: non-default argument follows default argument           
詳解函數傳回值和參數 | 手把手教你入門Python之四十三

⼆、不定⻓參數

有時可能需要⼀個函數能處理⽐當初聲明時更多的參數, 這些參數叫做不定⻓參數,聲明時不會命名。

基本文法如下:

def functionname([formal_args,] *args, **kwargs):
 """函數_⽂檔字元串"""
 function_suite
 return [expression]
           

注意

  • 加了星号(*)的變量args會存放所有未命名的變量參數,args為元組
  • ⽽加**的變量kwargs會存放命名參數,即形如key=value的參數, kwargs為字典.
def test(a, b, *args, **kwargs):
 "函數在聲明時,需要兩個參數"
 print('a={},b={},args={},kwargs={}'.format(a,b,args,kwargs))
test(2, 3, '你好', 'hi', 'how do you do', name="zhangsan", age=18)
# a=2,b=3,args=('你好', 'hi', 'how do you do'),kwargs={'name': 'zhangsan', 'age': 1
8}
b = ('hi', '⼤家好', '今天天⽓真好')
d = {'name': "zhangsan", "age": 19}
# 注意,在傳⼊參數時的星号問題。
test(10, 20, *b, **d)
# a=10,b=20,args=('hi', '⼤家好', '今天天⽓真好'),kwargs={'name': 'zhangsan', 'age':
19}
# 如果在傳值時,不使⽤星号,會把後⾯的參數當做 args
test(10,20,b,d)
# a=10,b=20,args=(('hi', '⼤家好', '今天天⽓真好'), {'name': 'zhangsan', 'age': 19}),
kwargs={}           

三、預設參數在*args後⾯

def sum_nums_3(a, *args, b=22, c=33, **kwargs):
 print(a)
 print(b)
 print(c)
 print(args)
 print(kwargs)
sum_nums_3(100, 200, 300, 400, 500, 600, 700, b=1, c=2, mm=800, nn=900)           

說明

  • 如果很多個值都是不定⻓參數,那麼這種情況下,可以将預設參數放到 args的後⾯, 但如果有kwargs

    的話,*kwargs必須是最後的

四、多個參數的使用

詳解函數傳回值和參數 | 手把手教你入門Python之四十三
詳解函數傳回值和參數 | 手把手教你入門Python之四十三
詳解函數傳回值和參數 | 手把手教你入門Python之四十三

五、可變參數

詳解函數傳回值和參數 | 手把手教你入門Python之四十三

六、可變類型和不可變類型的傳參

詳解函數傳回值和參數 | 手把手教你入門Python之四十三
詳解函數傳回值和參數 | 手把手教你入門Python之四十三

七、函數的注意事項

詳解函數傳回值和參數 | 手把手教你入門Python之四十三
詳解函數傳回值和參數 | 手把手教你入門Python之四十三