上一篇: 詳解函數的嵌套調⽤和局部變量 | 手把手教你入門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

⼆、⼀個函數傳回多個資料的⽅式
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'
四、函數的回顧總結
函數參數詳解
⼀、預設參數
調⽤函數時,預設參數的值如果沒有傳⼊,則取預設值。
下例會列印預設的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
⼆、不定⻓參數
有時可能需要⼀個函數能處理⽐當初聲明時更多的參數, 這些參數叫做不定⻓參數,聲明時不會命名。
基本文法如下:
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必須是最後的