Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】
- 視頻、源碼、課件、軟件、筆記:超全面Python基礎(chǔ)入門教程【十天課程】博客筆記匯總表【黑馬程序員】
-
Python基礎(chǔ)day05【函數(shù)(函數(shù)傳參的兩種形式、函數(shù)形參)、拆包、引用、可變與不可變類型、引用做函數(shù)參數(shù)注意點(diǎn)】
目錄
5.01 局部變量
<1>什么是局部變量
<2>小總結(jié)
5.02 全局變量
<1>什么是全局變量
總結(jié)1
<2>全局變量和局部變量名字相同問題
總結(jié)2
<3>修改全局變量
總結(jié)3
5.03 多函數(shù)程序的基本執(zhí)行流程
1. 使用全局變量
2. 使用函數(shù)的返回值、參數(shù)
3. 函數(shù)嵌套調(diào)用
5.04 函數(shù)的返回值
<1> 多個(gè)return?
總結(jié)1
<2> 一個(gè)函數(shù)返回多個(gè)數(shù)據(jù)的方式
總結(jié)2
5.05 函數(shù)的參數(shù)
<1>. 缺省參數(shù)
總結(jié)
<2>. 不定長(zhǎng)參數(shù)
注意
<3>. 缺省參數(shù)在*args后面
說明
5.06 拆包、交換兩個(gè)變量的值
<1> 對(duì)返回的數(shù)據(jù)直接拆包
總結(jié)
<2> 交換2個(gè)變量的值
5.07 引用
總結(jié)
5.08 可變、不可變類型
總結(jié)
5.09 引用
引用當(dāng)做實(shí)參
總結(jié)
5.10 函數(shù)的注意事項(xiàng)
1. 自定義函數(shù)
2. 調(diào)用函數(shù)
3. 作用域
5.01 局部變量
<1>什么是局部變量
如下圖所示:
<2>小總結(jié)
- 局部變量,就是在函數(shù)內(nèi)部定義的變量。
- 其作用范圍是這個(gè)函數(shù)內(nèi)部,即只能在這個(gè)函數(shù)中使用,在函數(shù)的外部是不能使用的。
- 因?yàn)槠渥饔梅秶皇窃谧约旱暮瘮?shù)內(nèi)部,所以不同的函數(shù)可以定義相同名字的局部變量(打個(gè)比方,把你、我是當(dāng)做成函數(shù),把局部變量理解為每個(gè)人手里的手機(jī),你可有個(gè)iPhone8,我當(dāng)然也可以有個(gè)iPhone8了, 互不相關(guān))。
- 局部變量的作用,為了臨時(shí)保存數(shù)據(jù)需要在函數(shù)中定義變量來進(jìn)行存儲(chǔ)。
- 當(dāng)函數(shù)調(diào)用時(shí),局部變量被創(chuàng)建,當(dāng)函數(shù)調(diào)用完成后這個(gè)變量就不能夠使用了。
5.02 全局變量
<1>什么是全局變量
如果一個(gè)變量,既能在一個(gè)函數(shù)中使用,也能在其他的函數(shù)中使用,這樣的變量就是全局變量。
打個(gè)比方:有2個(gè)兄弟 各自都有手機(jī),各自有自己的小秘密在手機(jī)里,不讓另外一方使用(可以理解為局部變量);但是家里的電話是2個(gè)兄弟都可以隨便使用的(可以理解為全局變量)。
總結(jié)1
- 在函數(shù)外邊定義的變量叫做全局變量。
- 全局變量能夠在所有的函數(shù)中進(jìn)行訪問。
<2>全局變量和局部變量名字相同問題
總結(jié)2
- 當(dāng)函數(shù)內(nèi)出現(xiàn)局部變量和全局變量相同名字時(shí),函數(shù)內(nèi)部中的?變量名 = 數(shù)據(jù)?此時(shí)理解為定義了一個(gè)局部變量,而不是修改全局變量的值。
<3>修改全局變量
函數(shù)中進(jìn)行使用時(shí)可否進(jìn)行修改呢?
總結(jié)3
- 如果在函數(shù)中出現(xiàn)global 全局變量的名字?那么這個(gè)函數(shù)中即使出現(xiàn)和全局變量名相同的變量名 = 數(shù)據(jù)?也理解為對(duì)全局變量進(jìn)行修改,而不是定義局部變量。
-
如果在一個(gè)函數(shù)中需要對(duì)多個(gè)全局變量進(jìn)行修改,那么可以使用。
# 可以使用一次global對(duì)多個(gè)全局變量進(jìn)行聲明
global a, b
# 還可以用多次global聲明都是可以的
# global a
# global b
5.03 多函數(shù)程序的基本執(zhí)行流程
一般在實(shí)際開發(fā)過程中,一個(gè)程序往往由多個(gè)函數(shù)(后面知識(shí)中會(huì)講解類)組成,并且多個(gè)函數(shù)共享某些數(shù)據(jù),這種場(chǎng)景是經(jīng)常出現(xiàn)的,因此下面來總結(jié)下,多個(gè)函數(shù)中共享數(shù)據(jù)的幾種方式。
1. 使用全局變量
g_num = 0def test1():global g_num# 將處理結(jié)果存儲(chǔ)到全局變量g_num中...g_num = 100def test2():# 通過獲取全局變量g_num的值, 從而獲取test1函數(shù)處理之后的結(jié)果print(g_num)# 1. 先調(diào)用test1得到數(shù)據(jù)并且存到全局變量中 test1()# 2. 再調(diào)用test2,處理test1函數(shù)執(zhí)行之后的這個(gè)值 test2() # 1002. 使用函數(shù)的返回值、參數(shù)
def test1():# 通過return將一個(gè)數(shù)據(jù)結(jié)果返回return 50def test2(num):# 通過形參的方式保存?zhèn)鬟f過來的數(shù)據(jù),就可以處理了print(num)# 1. 先調(diào)用test1得到數(shù)據(jù)并且存到變量result中 result = test1()# 2. 調(diào)用test2時(shí),將result的值傳遞到test2中,從而讓這個(gè)函數(shù)對(duì)其進(jìn)行處理 test2(result) # 503. 函數(shù)嵌套調(diào)用
def test1():# 通過return將一個(gè)數(shù)據(jù)結(jié)果返回return 20def test2():# 1. 先調(diào)用test1并且把結(jié)果返回來result = test1()# 2. 對(duì)result進(jìn)行處理print(result)# 調(diào)用test2時(shí),完成所有的處理 test2() # 205.04 函數(shù)的返回值
在python中我們?cè)鯓臃祷囟鄠€(gè)值?
<1> 多個(gè)return?
def create_nums():print("---1---")return 1 # 函數(shù)中下面的代碼不會(huì)被執(zhí)行,因?yàn)閞eturn除了能夠?qū)?shù)據(jù)返回之外,還有一個(gè)隱藏的功能:結(jié)束函數(shù)print("---2---")return 2print("---3---")總結(jié)1
- 一個(gè)函數(shù)中可以有多個(gè)return語句,但是只要有一個(gè)return語句被執(zhí)行到,那么這個(gè)函數(shù)就會(huì)結(jié)束了,因此后面的return沒有什么用處。
-
如果程序設(shè)計(jì)為如下,是可以的因?yàn)椴煌膱?chǎng)景下執(zhí)行不同的return。
<2> 一個(gè)函數(shù)返回多個(gè)數(shù)據(jù)的方式
def divid(a, b):shang = a // byushu = a % breturn shang, yushu # 默認(rèn)是元組result = divid(5, 2) print(result) # 輸出(2, 1)總結(jié)2
return后面可以是元組,列表、字典等,只要是能夠存儲(chǔ)多個(gè)數(shù)據(jù)的類型,就可以一次性返回多個(gè)數(shù)據(jù)。
def function():
? ? return [1, 2, 3]
? ? return (1, 2, 3)
? ? return {"num1": 1, "num2": 2, "num3": 3}
如果return后面有多個(gè)數(shù)據(jù),那么默認(rèn)是元組。
In[1]: a = 1, 2
In[2]: a
Out[2]: (1, 2)
In[3]:
In[3]: b = (1, 2)
In[4]: b
Out[4]: (1, 2)
In[5]:
5.05 函數(shù)的參數(shù)
<1>. 缺省參數(shù)
調(diào)用函數(shù)時(shí),缺省參數(shù)的值如果沒有傳入,則取默認(rèn)值。
下例會(huì)打印默認(rèn)的age,如果age沒有被傳入:
總結(jié)
- 在形參中默認(rèn)有值的參數(shù),稱之為缺省參數(shù)。
- 注意:帶有默認(rèn)值的參數(shù)一定要位于參數(shù)列表的最后面。
<2>. 不定長(zhǎng)參數(shù)
有時(shí)可能需要一個(gè)函數(shù)能處理比當(dāng)初聲明時(shí)更多的參數(shù),這些參數(shù)叫做不定長(zhǎng)參數(shù),聲明時(shí)不會(huì)命名。
基本語法如下:
def functionname([formal_args, ] * args, **kwargs):
? ? """函數(shù)_文檔字符串"""
? ? function_suite
? ? return [expression]
注意
- 加了星號(hào)(*)的變量args會(huì)存放所有未命名的變量參數(shù),args為元組。
- 而加**的變量kwargs會(huì)存放命名參數(shù),即形如key=value的參數(shù), kwargs為字典。
<3>. 缺省參數(shù)在*args后面
說明
- 如果很多個(gè)值都是不定長(zhǎng)參數(shù),那么這種情況下,可以將缺省參數(shù)放到 *args的后面, 但如果有**kwargs的話,**kwargs必須是最后的。
5.06 拆包、交換兩個(gè)變量的值
<1> 對(duì)返回的數(shù)據(jù)直接拆包
總結(jié)
- 拆包時(shí)要注意,需要拆的數(shù)據(jù)的個(gè)數(shù)要與變量的個(gè)數(shù)相同,否則程序會(huì)異常。
-
除了對(duì)元組拆包之外,還可以對(duì)列表、字典等拆包。
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,而不是鍵值對(duì)
In[24]: a
Out[24]: 'm'
In[25]: b
Out[25]: 'n'
<2> 交換2個(gè)變量的值
# 第1種方式 # a = 4 # b = 5 # c = 0 # # c = a # a = b # b = c # # print(a) # print(b)# 第2種方式 # a = 4 # b = 5 # a = a+b # a=9, b=5 # b = a-b # a=9, b=4 # a = a-b # a=5, b=4 # print(a) # print(b)# 第3種方式 a, b = 4, 5 a, b = b, aprint(a) # 5 print(b) # 45.07 引用
??
在python中,值是靠引用來傳遞來的。
我們可以用id()來判斷兩個(gè)變量是否為同一個(gè)值的引用。?我們可以將id值理解為那塊內(nèi)存的地址標(biāo)示。
>>> a = 1 >>> b = a >>> id(a) 13033816 >>> id(b) # 注意兩個(gè)變量的id值相同 13033816 >>> a = 2 >>> id(a) # 注意a的id值已經(jīng)變了 13033792 >>> id(b) # b的id值依舊 13033816 >>> a = [1, 2] >>> b = a >>> id(a) 139935018544808 >>> id(b) 139935018544808 >>> a.append(3) >>> a [1, 2, 3] >>> id(a) 139935018544808 >>> id(b) # 注意a與b始終指向同一個(gè)地址 139935018544808?
總結(jié)
- 之前為了更好的理解變量,咱們可以把a(bǔ)=100理解為變量a中存放了100,事實(shí)上變量a存儲(chǔ)是100的引用(可理解為在內(nèi)存中的一個(gè)編號(hào))。
5.08 可變、不可變類型
總結(jié)
- 所謂可變類型與不可變類型是指:數(shù)據(jù)能夠直接進(jìn)行修改,如果能直接修改那么就是可變,否則是不可變。
- 可變類型有: 列表、字典、集合。
- 不可變類型有: 數(shù)字、字符串、元組。
5.09 引用
引用當(dāng)做實(shí)參
- 可變類型與不可變類型的變量分別作為函數(shù)參數(shù)時(shí),會(huì)有什么不同嗎?
- Python有沒有類似C語言中的指針傳參呢?
總結(jié)
- Python中函數(shù)參數(shù)是引用傳遞(注意不是值傳遞)。
- 對(duì)于不可變類型,因變量不能修改,所以運(yùn)算不會(huì)影響到變量自身。
- 而對(duì)于可變類型來說,函數(shù)體中的運(yùn)算有可能會(huì)更改傳入的參數(shù)變量。
5.10 函數(shù)的注意事項(xiàng)
1. 自定義函數(shù)
無參數(shù)、無返回值
def 函數(shù)名():
? ? 語句
無參數(shù)、有返回值
def 函數(shù)名():
? ? 語句
? ? return 需要返回的數(shù)值
注意:
- 一個(gè)函數(shù)到底有沒有返回值,就看有沒有return,因?yàn)橹挥衦eturn才可以返回?cái)?shù)據(jù)。
- 在開發(fā)中往往根據(jù)需求來設(shè)計(jì)函數(shù)需不需要返回值。
- 函數(shù)中,可以有多個(gè)return語句,但是只要執(zhí)行到一個(gè)return語句,那么就意味著這個(gè)函數(shù)的調(diào)用完成。
有參數(shù)、無返回值
def 函數(shù)名(形參列表):
? ? 語句
注意:
- 在調(diào)用函數(shù)時(shí),如果需要把一些數(shù)據(jù)一起傳遞過去,被調(diào)用函數(shù)就需要用參數(shù)來接收
- 參數(shù)列表中變量的個(gè)數(shù)根據(jù)實(shí)際傳遞的數(shù)據(jù)的多少來確定
有參數(shù)、有返回值
def 函數(shù)名(形參列表):
? ? 語句
? ? return 需要返回的數(shù)值
函數(shù)名不能重復(fù)
- 如果在同一個(gè)程序中出現(xiàn)了多個(gè)相同函數(shù)名的函數(shù),那么在調(diào)用函數(shù)時(shí)就會(huì)出現(xiàn)問題,所以要避免名字相同。
- 還有一點(diǎn) 不僅要避免函數(shù)名之間不能相同,還要避免 變量名和函數(shù)名相同的,否則都會(huì)出現(xiàn)問題。
- 詳細(xì)的講解在python就業(yè)班中進(jìn)行學(xué)習(xí),此階段只要注意這些問題即可。
2. 調(diào)用函數(shù)
調(diào)用的方式為:
函數(shù)名([實(shí)參列表])
調(diào)用時(shí),到底寫不寫 實(shí)參 ?
- 如果調(diào)用的函數(shù) 在定義時(shí)有形參,那么在調(diào)用的時(shí)候就應(yīng)該傳遞參數(shù)。
調(diào)用時(shí),實(shí)參的個(gè)數(shù)和先后順序應(yīng)該和定義函數(shù)中要求的一致。
如果調(diào)用的函數(shù)有返回值,那么就可以用一個(gè)變量來進(jìn)行保存這個(gè)值。
3. 作用域
在一個(gè)函數(shù)中定義的變量,只能在本函數(shù)中用(局部變量)。
在函數(shù)外定義的變量,可以在所有的函數(shù)中使用(全局變量)。
總結(jié)
以上是生活随笔為你收集整理的Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaWeb黑马旅游网-学习笔记04【
- 下一篇: Python基础day05 作业解析【1