Python基礎(chǔ)(四)

函數(shù)介紹

如果在開發(fā)程序時(shí),需要某塊代碼多次,但是為了提高編寫的效率以及代碼的重用,所以把具有獨(dú)立功能的代碼塊組織為一個(gè)小模塊,這就是函數(shù)。

函數(shù)定義和調(diào)用

定義函數(shù)

格式如下:

def 函數(shù)名():
代碼

示例:

# 定義一個(gè)函數(shù),能夠完成打印信息的功能
def printInfo():
print '------------------------------------'
print ' 人生苦短,我用Python'
print '------------------------------------'

調(diào)用函數(shù)

定義了函數(shù)之后,就相當(dāng)于有了一個(gè)具有某些功能的代碼,想要讓這些代碼能夠執(zhí)行,需要調(diào)用它。調(diào)用函數(shù)很簡(jiǎn)單,通過(guò)函數(shù)名()即可完成調(diào)用。

示例:

# 定義完函數(shù)后,函數(shù)是不會(huì)自動(dòng)執(zhí)行的,需要調(diào)用它才可以
printInfo()

函數(shù)的文檔說(shuō)明

>>> def test(a,b):
... "用來(lái)完成對(duì)2個(gè)數(shù)求和"
... print("%d"%(a+b))
...
>>>
>>> test(11,22)
33

如果執(zhí)行,以下代碼:

>>> help(test)

能夠看到test函數(shù)的相關(guān)說(shuō)明:

Help on function test in module __main__:

test(a, b)
用來(lái)完成對(duì)2個(gè)數(shù)求和
(END)

函數(shù)參數(shù)

定義帶有參數(shù)的函數(shù)

def add2num(a, b):
c = a+b
print c

調(diào)用帶有參數(shù)的函數(shù)

def add2num(a, b):
c = a+b
print c

add2num(11, 22) #調(diào)用帶有參數(shù)的函數(shù)時(shí),需要在小括號(hào)中,傳遞數(shù)據(jù)

調(diào)用帶有參數(shù)函數(shù)的運(yùn)行過(guò)程:

調(diào)用函數(shù)

調(diào)用函數(shù)時(shí)參數(shù)的順序:

>>> def test(a,b):
... print(a,b)
...
>>> test(1,2)
1 2
>>> test(b=1,a=2)
2 1
>>>
>>> test(b=1,2)
File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>>

缺省參數(shù)

調(diào)用函數(shù)時(shí),缺省參數(shù)的值如果沒(méi)有傳入,則被認(rèn)為是默認(rèn)值。下例會(huì)打印默認(rèn)的age,如果age沒(méi)有被傳入:

def printinfo( name, age = 35 ):
# 打印任何傳入的字符串
print "Name: ", name
print "Age ", age

# 調(diào)用printinfo函數(shù)
printinfo(name="miki" )
printinfo( age=9,name="miki" )

以上實(shí)例輸出結(jié)果:

Name: miki
Age 35
Name: miki
Age 9

注意:帶有默認(rèn)值的參數(shù)一定要位于參數(shù)列表的最后面。

>>> def printinfo(name, age=35, sex):
... print name
...
File "<stdin>", line 1
SyntaxError: non-default argument follows default argument

不定長(zhǎng)參數(shù)

有時(shí)可能需要一個(gè)函數(shù)能處理比當(dāng)初聲明時(shí)更多的參數(shù)。這些參數(shù)叫做不定長(zhǎng)參數(shù),聲明時(shí)不會(huì)命名。
基本語(yǔ)法如下:

def functionname([formal_args,] *args, **kwargs):
"函數(shù)_文檔字符串"
function_suite
return [expression]

加了星號(hào)( * )的變量args會(huì)存放所有未命名的變量參數(shù),args為元組;而加**的變量kwargs會(huì)存放命名參數(shù),即形如key=value的參數(shù), kwargs為字典。

示例:

>>> def fun(a, b, *args, **kwargs):
... """可變參數(shù)演示示例"""
... print "a =", a
... print "b =", b
... print "args =", args
... print "kwargs: "
... for key, value in kwargs.items():
... print key, "=", value
...
>>> fun(1, 2, 3, 4, 5, m=6, n=7, p=8) # 注意傳遞的參數(shù)對(duì)應(yīng)
a = 1
b = 2
args = (3, 4, 5)
kwargs:
p = 8
m = 6
n = 7
>>>
>>>
>>>
>>> c = (3, 4, 5)
>>> d = {"m":6, "n":7, "p":8}
>>> fun(1, 2, *c, **d) # 注意元組與字典的傳參方式
a = 1
b = 2
args = (3, 4, 5)
kwargs:
p = 8
m = 6
n = 7
>>>
>>>
>>>
>>> fun(1, 2, c, d) # 注意不加星號(hào)與上面的區(qū)別
a = 1
b = 2
args = ((3, 4, 5), {'p': 8, 'm': 6, 'n': 7})
kwargs:

引用傳參

Python中函數(shù)參數(shù)是引用傳遞(注意不是值傳遞)。對(duì)于不可變類型,因變量不能修改,所以運(yùn)算不會(huì)影響到變量自身;而對(duì)于可變類型來(lái)說(shuō),函數(shù)體中的運(yùn)算有可能會(huì)更改傳入的參數(shù)變量。
示例:

>>> def selfAdd(a):
... """自增"""
... a += a
...
>>> a_int = 1
>>> a_int
1
>>> selfAdd(a_int)
>>> a_int
1
>>> a_list = [1, 2]
>>> a_list
[1, 2]
>>> selfAdd(a_list)
>>> a_list
[1, 2, 1, 2]

函數(shù)返回值

帶有返回值的函數(shù)

想要在函數(shù)中把結(jié)果返回給調(diào)用者,需要在函數(shù)中使用return。如下:

def add2num(a, b):
c = a+b
return c

函數(shù)返回多個(gè)值

本質(zhì)其實(shí)是利用了元組。

>>> def divid(a, b):
... shang = a//b
... yushu = a%b
... return shang, yushu
...
>>> sh, yu = divid(5, 2)
>>> sh
5
>>> yu
1

四種函數(shù)的類型

函數(shù)根據(jù)有沒(méi)有參數(shù),有沒(méi)有返回值,可以相互組合,一共有4種:

  • 無(wú)參數(shù),無(wú)返回值
  • 無(wú)參數(shù),又反悔
  • 有參數(shù),無(wú)返回值
  • 有參數(shù),有返回值

函數(shù)的嵌套調(diào)用

示例:

def testB():
print('---- testB start----')
print('這里是testB函數(shù)執(zhí)行的代碼...(省略)...')
print('---- testB end----')

def testA():

print('---- testA start----')

testB()

print('---- testA end----')

testA()

結(jié)果:

---- testA start----
---- testB start----
這里是testB函數(shù)執(zhí)行的代碼...(省略)...
---- testB end----
---- testA end----

局部變量與全局變量

局部變量

  • 在函數(shù)內(nèi)部定義的變量
  • 不同的函數(shù),可以定義相同的名字的局部變量,但是各個(gè)不會(huì)產(chǎn)生影響
  • 局部變量是為了臨時(shí)保存數(shù)據(jù)需要在函數(shù)中定義變量來(lái)進(jìn)行存儲(chǔ)

全局變量

  • 在函數(shù)外邊定義的變量叫做全局變量
  • 全局變量能夠在所有的函數(shù)中進(jìn)行訪問(wèn)
  • 如果在函數(shù)中修改全局變量,那么就需要使用global進(jìn)行聲明,否則出錯(cuò)
  • 如果全局變量的名字和局部變量的名字相同,那么使用的是局部變量的

遞歸函數(shù)

函數(shù)在內(nèi)部調(diào)用自己本身。

遞歸

匿名函數(shù)

用lambda關(guān)鍵詞能創(chuàng)建小型匿名函數(shù)。這種函數(shù)得名于省略了用def聲明函數(shù)的標(biāo)準(zhǔn)步驟。
lambda函數(shù)的語(yǔ)法只包含一個(gè)語(yǔ)句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

如下實(shí)例:

sum = lambda arg1, arg2: arg1 + arg2

#調(diào)用sum函數(shù)
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )

以上實(shí)例輸出結(jié)果:

Value of total : 30
Value of total : 40

示例:

>>> def fun(a, b, opt):
... print "a =", a
... print "b =", b
... print "result =", opt(a, b)
...
>>> fun(1, 2, lambda x,y:x+y)
a = 1
b = 2
result = 3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,677評(píng)論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,552評(píng)論 19 139
  • 一直覺(jué)得若站在上帝視角俯視人間一定是很有意思的場(chǎng)景。 青春里的愛(ài)情故事, 他和她中間再來(lái)個(gè)她\他,那么一場(chǎng)三角戀便...
    Ms_晴小姐閱讀 293評(píng)論 2 0
  • 最是那一抹淺笑 嫣紅桃粉的 柳眉間輕佻著燈簾 照一唇紅顏露水 羞澀了碧池 倦懶了斜陽(yáng) 小滿也戀了早 細(xì)雨潤(rùn)了物 趕...
    李小米C閱讀 265評(píng)論 0 0
  • 黎明在黑夜的盡頭, 揭開塵封在黑暗里的恐懼。 暮夜里 所幸是星辰也懂溫柔, 在黑暗里 指引了迷途中的夜鶯, 照...
    草芥人閱讀 288評(píng)論 0 0

友情鏈接更多精彩內(nèi)容