函數(shù)
作用
為了 提高編寫(xiě)的效率以及代碼的重用,把具有獨(dú)立功能的代碼塊組織為一個(gè)小模塊,這就是函數(shù)
格式
def 函數(shù)名():
代碼
調(diào)用函數(shù)
函數(shù)名()
函數(shù)的文檔說(shuō)明
方便了解函數(shù)的功能,便于維護(hù)
def demo(arg1: int, arg2: str, arg3=None):
"""
我是函數(shù)的文檔說(shuō)明
:param arg1: int 參數(shù)1
:param arg2: str 參數(shù)2
:param arg3: 默認(rèn)為None
:return: None
"""
# 鼠標(biāo)左鍵點(diǎn)一下函數(shù),Ctrl + Q
pass

函數(shù)參數(shù)
什么是參數(shù)?參數(shù)的作用?
定義函數(shù)時(shí),在小括號(hào)“()”中間的,使用的標(biāo)識(shí)符,叫做參數(shù),多個(gè)參數(shù)之間使用“,”(逗號(hào))分隔。
作用:為了讓同一個(gè)函數(shù)可以執(zhí)行出不同的結(jié)果,提高函數(shù)的靈活性
定義帶參函數(shù)
def add2num(a, b): # 參數(shù)根據(jù)需要數(shù)量可變,定義函數(shù)時(shí)的參數(shù),叫做形參
c = a+b
print c
調(diào)用帶有參數(shù)的函數(shù)
# 調(diào)用時(shí)函數(shù)的參數(shù),叫做實(shí)參,
# 實(shí)參的數(shù)量必須與形參的數(shù)量一樣,且位置一一對(duì)應(yīng)。
# 如下 實(shí)參11 對(duì)應(yīng)形參a
add2num(11, 22)
函數(shù)的返回值
什么是返回值?為什么需要返回值?
在函數(shù)中,使用return 關(guān)鍵字返回的數(shù)據(jù)叫做函數(shù)的返回值。
作用:為了得到函數(shù)的處理結(jié)果,比如希望得到兩個(gè)數(shù)相加的結(jié)果
帶有返回值的函數(shù)
def add2num(a, b):
c = a+b
return c
接收函數(shù)的返回值
# 調(diào)用函數(shù),將函數(shù)的返回值賦值給變量,通過(guò)變量使用返回值
result = add2num(100,98)
四種函數(shù)形式
通過(guò)參數(shù)與返回值的組合,可以得到四種函數(shù)形式,可以根據(jù)需要靈活使用
無(wú)參數(shù),無(wú)返回值
無(wú)參數(shù),有返回值
有參數(shù),無(wú)返回值
有參數(shù),有返回值

局部變量
什么是局部變量?作用是什么?
定義在函數(shù)內(nèi)部的變量,叫做局部變量。在不同函數(shù)內(nèi)部可以有相同名字的局部變量,但是他們之間互不干擾。
作用:在函數(shù)內(nèi)臨時(shí)保存數(shù)據(jù),讓數(shù)據(jù)方便使用。
# a,b,c 都是局部變量
def add2num(a, b):
c = a+b
print c
全局變量
什么是全局變量?作用是什么?
定義在函數(shù)外部的變量,叫做全局變量。
作用:全局范圍內(nèi)都可以使用的變量
# 定義全局變量
a = 100
def test1():
print(a) # 雖然沒(méi)有定義變量a但是依然可以獲取其數(shù)據(jù)
def test2():
print(a) # 雖然沒(méi)有定義變量a但是依然可以獲取其數(shù)據(jù)
局部變量與全局變量同名問(wèn)題
a =100 # 全局變量
def add2num(a, b): # 局部變量
c = a+b
return c
- 函數(shù)內(nèi)部,使用的是局部變量的值
- 函數(shù)外部,或其他函數(shù)內(nèi)部,使用的全局變量的值
修改全局變量的值
- 如果在函數(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
全局變量 與 局部變量的區(qū)別
定義
- 全局變量定義在函數(shù)外部
- 局部變量定義在函數(shù)內(nèi)部
使用范圍
- 全局變量可以在全局范圍內(nèi)使用。(函數(shù)內(nèi)部、函數(shù)外部)
- 局部變量只能在定義變量的函數(shù)內(nèi)部使用
修改
- 全局變量
- 函數(shù)外 可以任意修改
- 函數(shù)內(nèi) 需要使用global 先聲明之后,才能修改
- 局部變量
- 函數(shù)外 不能使用
- 函數(shù)內(nèi) 可以任意修改
函數(shù)間共享數(shù)據(jù)
- 全局變量
# 全局變量
a = 0
def func1():
global a # 在 func1 里修改全局變量
a = 100
print('func1----a=', a)
def func2():
print('func2----a=', a) # 在 func2 里可以使用 func1 的計(jì)算結(jié)果
def func3():
global a # 使用全局變量,很容易被第三者修改數(shù)據(jù),導(dǎo)致錯(cuò)誤
a = 300
print('func3----a=', a)
func1()
func3()
func2()
- 函數(shù)傳參
# 函數(shù)傳參
def func1():
a = 100
print('func1----a=', a)
return a # func1 將結(jié)果作為返回值處理
def func2(a):
print('func2----a=', a) # 在 func2 里可以使用參數(shù)來(lái)接收 func1 的計(jì)算結(jié)果
def func3():
global a
a = 300
print('func3----a=', a)
tmp = func1()
func3()
func2(tmp)
- 函數(shù)的嵌套調(diào)用
# 函數(shù)嵌套
def func1():
a = 100
print('func1----a=', a)
return a # func1 將結(jié)果作為返回值處理
def func2():
a = func1() # 在 func2 里直接調(diào)用 func1 并獲取返回值
print('func2----a=', a)
def func3():
global a
a = 300
print('func3----a=', a)
func3()
func2()
函數(shù)多返回值以及返回多值
多返回值
一個(gè)函數(shù)根據(jù)情況的不同,會(huì)出現(xiàn)多個(gè)return。
def demo(age):
if age > 17:
return "成年了"
elif age > 12:
return "青少年"
else:
return "少年郎"
返回多值
同一個(gè)return,可以返回多個(gè)值。這里需要容器,來(lái)存放多個(gè)值。
容器有 String(字符串)、List(列表)、Tuple(元組)、Dictionary(字典)、Set(集合),雖然有這么多容器 推薦使用List(列表)、Tuple(元組)、Dictionary(字典)。
為什么不推薦使用String(字符串)、Set(集合)
?
因?yàn)镾tring(字符串)可以 split() 字符串,可以產(chǎn)生一個(gè)列表,所以不如直接使用列表
Set(集合)不能存儲(chǔ)重復(fù)數(shù)據(jù),而且不能存儲(chǔ)列表,字典,集合
def divid(a, b):
quotient = a//b
residue = a%b
return quotient, residue # 默認(rèn)是元組
def divid(a, b):
quotient = a//b
residue = a%b
return [quotient, residue] # 使用列表
def divid(a, b):
quotient = a//b
residue = a%b
return {"quotient":quotient, "residue":residue} # 使用字典
函數(shù)參數(shù)
缺省參數(shù)
什么是缺省參數(shù)? 調(diào)用函數(shù)時(shí),缺省參數(shù)的值如果沒(méi)有傳入,則取默認(rèn)值。
def demo(args1,args2=""): # args2 就是缺省參數(shù)
pass
不定長(zhǎng)參數(shù)
- *args, 在變量args前使用一個(gè) * (星號(hào)),表示用元組接收無(wú)人接收的位置參數(shù)
- **kwargs,在變量kwargs前使用一個(gè) ** (兩個(gè)星號(hào)),表示用字典接收無(wú)人接收的關(guān)鍵字參數(shù)
def demo(args1, *args, **kwargs):
print(args)
print(kwargs)
demo(1, 2, 3, 4, 5, name="qwer", age=17, sex="gg")

拆包

交換變量的值
- 中間變量
a = 4
b = 5
c = 0
c = a
a = b
b = c
- 數(shù)學(xué)運(yùn)算
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
- 打包拆包
a, b = 4, 5
a, b = b, a
引用
變量通過(guò)數(shù)據(jù)在內(nèi)存中的起始地址來(lái)讀取數(shù)據(jù)

不可變類型
什么是不可變類型
不可變,數(shù)據(jù)內(nèi)容不可變。因?yàn)閿?shù)據(jù)內(nèi)容不可變,如果修改變量的值,則引用的地址會(huì)發(fā)生變化
- Number(數(shù)字)

-
Boolean(布爾)
不可變類型-Boolean -
String(字符串)
不可變類型-String
- Tuple(元組)

可變類型
什么是可變類型
可變,數(shù)據(jù)內(nèi)容可變。因?yàn)閿?shù)據(jù)內(nèi)容可變,如果修改變量的值,則引用的地址不會(huì)發(fā)生變化
-
List(列表)
可變類型-List -
Dictionary(字典)
可變類型-Dictionary -
Set(集合)
可變類型-Set
到此結(jié)?DragonFangQy?2018.4.7




