函數的返回值
返回值
- 在程序開發中,有時候,會希望一個函數執行結束后,告訴調用者 一個結果 ,以便調用者針對結果作后續的處理
- **返回值 **是函數 完成工作后,最后給調用者的一個結果
- 在函數中使用 **return **關鍵字可以返回結果
- 調用者 可以使用變量 來接收函數的返回結果
**返回值示例
**
# 單返回值示例
def test1():
name="zs"
return name
n=test1()
print("名字是:%s" %n)
# 多返回值,返回元組
def test2():
name="zs"
age=12
return name,age
n,a=test2()
print("名字是:%s,年齡是:%d" %(n,a))
#第二種返回值接收形式
result=test2()
print(result)
print("名字是:%s,年齡是:%d" %(result[0],result[1]))
# 多返回值,返回元組2,與上一個函數返回的結果是一樣的
def test3():
name="zs"
age=12
return (name,age)
n,a=test3()
print("名字是:%s,年齡是:%d" %(n,a))
輸出結果
交換變量的值
a=100
b=10
# 形式一
b,a=a,b
print(b,a)
# 形式二,注: 其實兩種方式是一樣的,只是看起來一個加了括號一個沒加,但其實后面都是用的元組
b,a=(a,b)
print(b,a)
函數的參數
不可變與可變參數
- 在函數內部,針對參數使用 賦值語句 ,不會影響調用函數時傳遞的 實參變量
- 不管是可變還是不可變類型的參數,針對參數使用 ** 賦值語句** ,會在 函數內部修改局部變量的引用 ,不會影響 外部變量的引用
- 當參數是** 可變類型**時,在函數內部,使用 方法 修改了數據的內容,會影響到外部的數據
示例
# 可變與不可變類型參數,使用賦值語句 不會影響外部調用時的 變量
def test1(num,num_list):
num=10
num_list=[4,5,6]
print("函數內部num值:%d" %num)
print("函數內部num_list值:",num_list)
gl_num=3
gl_num_list=[1,2,3]
test1(gl_num,gl_num_list)
print("函數外部num值:%d" %gl_num)
print("函數外部num_list值:",gl_num_list)
# 可變類型的參數,使用 方法賦值,會影響外部調用時的 變量
def test2(num_list):
# 形式一
num_list.append(9)
# 形式二
num_list.extend([2,2,2])
# 形式三(默認使用的也是 extend)
num_list+=[3,3,3]
print("函數內部調用后的值是:",num_list)
gl_num_list2=[1,1,1]
test2(gl_num_list2)
print("函數外部調用后的值是:",gl_num_list2)
輸出結果
缺省參數
- 定義函數時,可以給 **某個參數 **指定一個 默認值 ,具有默認值的參數就叫 缺省參數
- 調用函數時,如果沒有傳入缺省參數的值,則在函數內部會使用 參數的默認值
- 函數的缺省參數,將常見的值設置為參數的缺省值,從而 簡化函數的調用
- 缺省參數的定義位置,應該放在參數列表的末尾
- 如果有 ** 多個缺省參數,調用時需要指定參數名,** 這樣解釋器才能知道參數的對應關系
def test1(name,work="工程師",gender="男"):
print("名字是:%s,職位是:%s,性別是:%s" %(name,work,gender))
test1("張三",gender="女")
test1("李四",work="設計師")
test1("王五",work="設計師",gender="人妖")
輸出結果
多值參數
-
參數名前增加一個** * 可以接收 元組**
-
參數名前增加 兩個** * 可以接收 字典**
-
一般在給多值參數命名時,習慣使用以下兩個名字
- ***args 存放 元組 參數,前面有一個 ***
- ****kwargs 存放 字典 參數,前面有兩個 ***
-
args 是 arguments 的縮寫,有變量的含義
-
**kw 是 keyword 的縮寫,kwargs 可以記憶 鍵值對參數
**
示例
# 測試普通參數,元組,字典傳參
def test(num,*args,**kwargs):
print(num)
print(args)
print(kwargs)
test(1,2,3,4,5,nmae="zs",age="12")
輸出結果
**元組和字典的拆包
**
- 在調用帶有多值參數的函數時,如果希望:
- 將一個 元組變量,直接傳遞給 args
- 將一個 字典變量,直接傳遞給 kwargs
- 就可以使用 ** 拆包,** 簡化參數的傳遞,拆包的方式是**:**
-
在 元組變量前**,增加一個 ***
-
在 字典變量前**,增加兩個 *
**
-
示例
def test(*args,**kwargs):
print(args)
print(kwargs)
# 不使用拆包
test(1,2,3,name="zs",age=12)
# 使用拆包
t_tuple=(1,2,3)
d_dict={"name":"zs","age":12}
test(*t_tuple,**d_dict)
**輸出結果
**
遞歸
- 一個函數,內部自己調用自己
- 當 參數滿足一個條件時,函數不再執行,這個非常重要,通常被稱為 遞歸的出口,否則 就會出現 死循環
示例
# 使用遞歸 計算累加 1+2+3....num
def sum_num(num):
# 定義出口
if num==1:
return 1
tmp=sum_num(num-1)
return num+tmp
total=sum_num(10)
print("累加的值是:",total)
輸出結果
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
函數
+關注
關注
3文章
4353瀏覽量
63292 -
程序開發
+關注
關注
0文章
30瀏覽量
10381 -
Return
+關注
關注
0文章
9瀏覽量
7684
發布評論請先 登錄
相關推薦
快速掌握Python的遞歸函數與匿名函數調用
函數是Python技術學習中重要的一個環節,深入掌握該階段的知識內容,對于Python技術能力的提升非常有幫助,這里就針對遞歸函數與匿名
發表于 07-19 16:22
遞歸指的是在函數的定義中使用函數自身的方法
C語言支持遞歸,即一個函數可以調用其自身。但在使用遞歸時,程序員需要注意定義一個從函數退出的條件,否則會進入死循環。遞歸
進階必備的68個Python 內置函數分析
來源: pypypypy 內置函數就是Python給你提供的,拿來直接用的函數,比如print.,input等。 截止到python版本3.6.2 ,
C語言-內聯函數、遞歸函數、指針函數
這篇文章介紹C語言的內聯函數、遞歸函數、函數指針、指針函數、局部地址、const關鍵字、extern關鍵字等知識點;這些知識點在實際項目開發
函數與遞歸-3
程序調用自身的編程技巧稱為遞歸(recursion)。遞歸作為一種算法在程序設計語言中廣泛應用。一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個
什么是Python的遞歸函數
遞歸函數必須有終止條件。編程中,函數的調用要占用名叫棧(stack)的內存空間。調用函數時,程序會將相關的數據存儲到計算機的棧里。
Python遞歸的經典案例
當我們碰到諸如需要求階乘或斐波那契數列的問題時,使用普通的循環往往比較麻煩,但如果我們使用遞歸時,會簡單許多,起到事半功倍的效果。這篇文章主要和大家分享一些和遞歸有關的經典案例,結合一些資料談一下個人的理解,也借此加深自己對遞歸
評論