函數(shù)是組織好的,可重復(fù)使用的,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。
函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。Python提供了許多內(nèi)建函數(shù),比如print()。但也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。
1.函數(shù)的定義:
你可以定義一個(gè)由自己想要功能的函數(shù),以下是簡(jiǎn)單的規(guī)則:
函數(shù)代碼塊以def關(guān)鍵詞開(kāi)頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào)()。
任何傳入?yún)?shù)和自變量必須放在圓括號(hào)中間。圓括號(hào)之間可以用于定義參數(shù)。
函數(shù)的第一行語(yǔ)句可以選擇性地使用文檔字符串—用于存放函數(shù)說(shuō)明。
函數(shù)內(nèi)容以冒號(hào)起始,并且縮進(jìn)。
pass關(guān)鍵字,代表什么都不干
exit(num) 強(qiáng)行退出(num:是一個(gè)數(shù)字,顯示為退出碼)
return [表達(dá)式]結(jié)束函數(shù),選擇性地返回一個(gè)值給調(diào)用方。不帶表達(dá)式的return相當(dāng)于返回 None。
語(yǔ)法
def functionname( parameters ): function_suite return [expression]
默認(rèn)情況下,參數(shù)值和參數(shù)名稱是按函數(shù)聲明中定義的的順序匹配起來(lái)的。
舉例1:
def add(x, y):print(“x = {0}”.format(x))print(“x = {0}”.format(x))print(“x + y = {0}”.format(x+y))return x+y
舉例2:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/14 20:31# @Author : Feng Xiaoqing# @File : demo1.py# @Function: -----------def f(x,l=[]): for i in range(x): l.append(i*i) print(l)# f(2) = f(2, l=[])f(2)# 結(jié)果:[0, 1]f(3,[3,2,1])# 結(jié)果: [3, 2, 1, 0, 1, 4]f(x=3, l=[])# 結(jié)果: [0, 1, 4]
運(yùn)行結(jié)果:
[0, 1][3, 2, 1, 0, 1, 4][0, 1, 4]
2.函數(shù)的調(diào)用
定義一個(gè)函數(shù)只給了函數(shù)一個(gè)名稱,指定了函數(shù)里包含的參數(shù),和代碼塊結(jié)構(gòu)。
這個(gè)函數(shù)的基本結(jié)構(gòu)完成以后,你可以通過(guò)另一個(gè)函數(shù)調(diào)用執(zhí)行,也可以直接從Python提示符執(zhí)行。
如下實(shí)例調(diào)用了add()函數(shù):
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/15 21:01# @Author : Feng Xiaoqing# @File : demo2.py# @Function: -----------# 自定義加法函數(shù)add()def add(x,y): print("{0} + {1} = {2}".format(x,y,x+y)) return print("finished") #在return后不會(huì)執(zhí)行這條語(yǔ)句# 調(diào)用函數(shù),計(jì)算2+3的得數(shù)add(2,3)
運(yùn)行結(jié)果:
2 + 3 = 5
3.函數(shù)的參數(shù)
形式參數(shù)和實(shí)際參數(shù)
在定義函數(shù)時(shí),函數(shù)名后面,括號(hào)中的變量名稱叫做形式參數(shù),或者稱為"形參"
在調(diào)用函數(shù)時(shí),函數(shù)名后面,括號(hào)中的變量名稱叫做實(shí)際參數(shù),或者稱為"實(shí)參"
def fun(x,y): //形參 print(x + y) fun(1,2) //實(shí)參 3 fun('a','b') ab
函數(shù)默認(rèn)參數(shù):
缺省參數(shù)(默認(rèn)參數(shù))
def fun(x,y=100) print x,y#調(diào)用:fun(1,2)fun(1)
定義:
#!/usr/bin/env python# -*- coding: utf-8 -*-def fun(x=2,y=3): print x+y
調(diào)用:
fun()#結(jié)果:5fun(23)#結(jié)果26fun(11,22)#結(jié)果:33
我們經(jīng)常在看別人的代碼中,經(jīng)常出現(xiàn)def(*args, **kwargs)這樣的表現(xiàn)形式:
*args 指的是:tuple (1, )**kwargs 指的是:dict {“k”: “v”}fun(*args, **keargs)fun(1, 2, 3, 4, 5, a=10, b=40)
4.函數(shù)的返回值
函數(shù)返回值:
函數(shù)被調(diào)用后會(huì)返回一個(gè)指定的值
函數(shù)調(diào)用后默認(rèn)返回None
return返回值
返回值可以是任意類型
return執(zhí)行后,函數(shù)終止
return與print區(qū)別
#!/usr/bin/env python# -*- coding:utf-8 -*-def fun(): print 'hello world' return 'ok' print 123fun()#結(jié)果hello world123None
5.函數(shù)的變量
局部變量和全局變量:
Python中的任何變量都有特定的作用域
在函數(shù)中定義的變量一般只能在該函數(shù)內(nèi)部使用,這些只能在程序的特定部分使用的變量我們稱之為局部變量
在一個(gè)文件頂部定義的變量可以供文件中的任何函數(shù)調(diào)用,這些可以為整個(gè)程序所使用的變量稱為全局變量。
def fun(): x=100 print xfun()x = 100def fun(): global x //聲明 x +=1 print xfun()print x
外部變量被改(x由100改為101):
x = 100def fun(): global x x += 1 print (x)fun()print (x)#結(jié)果101101
內(nèi)部變量外部也可用:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/15 21:33# @Author : Feng Xiaoqing# @File : demo2.py# @Function: -----------x = 100def fun(): global x x +=1 global y y = 1 print(x)fun()print(x)print(y)#結(jié)果:1011011
統(tǒng)計(jì)程序中的變量,返回的是個(gè)字典
#!/usr/bin/env python# -*- coding:utf-8 -*-x = 100def fun(): x = 1 y = 1 print(locals())fun()print (locals())
結(jié)果:
{'y': 1, 'x': 1}{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x02FF6390>, '__spec__': None, '__annotations__': {}, '__builtins__':
6.匿名函數(shù)
顧名思義就是沒(méi)有名字的函數(shù),那為什么要設(shè)立匿名函數(shù),他有什么作用呢?lambda 函數(shù)是一種快速定義單行的最小函數(shù),可以用在任何需要函數(shù)的地方
python 使用 lambda 來(lái)創(chuàng)建匿名函數(shù)。
lambda只是一個(gè)表達(dá)式,函數(shù)體比def簡(jiǎn)單很多。
lambda的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。
lambda函數(shù)擁有自己的命名空間,且不能訪問(wèn)自有參數(shù)列表之外或全局命名空間里的參數(shù)。
雖然lambda函數(shù)看起來(lái)只能寫(xiě)一行,卻不等同于C或C++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時(shí)不占用棧內(nèi)存從而增加運(yùn)行效率。
語(yǔ)法
lambda函數(shù)的語(yǔ)法只包含一個(gè)語(yǔ)句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
舉例:
求兩數(shù)的乘積:
常規(guī)寫(xiě)法:
def fun(x,y) return x*y
lambda版本寫(xiě)法:
r = lambda x,y:x*y
7.高階函數(shù)
(1)map(f, list)
返回每個(gè)元素通過(guò)f計(jì)算完的value的list
map()函數(shù)接收兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是序列,map將傳入的函數(shù)依次作用到序列的每個(gè)元素,并把結(jié)果作為新的list返回。
舉例:計(jì)算列表里值的平方
#!/usr/bin/env python# -*- coding:utf-8 -*-def f(x): return x*xfor i in map(f,[1,2,3,4,5,6,7]): print(i)
結(jié)果:
14916253649
(2)reduce(f,list)函數(shù)(求list中數(shù)的和)
reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3...]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算,其效果就是:
舉例:計(jì)算列表中所有數(shù)的和
#!/usr/bin/env python# -*- coding:utf-8 -*-from functools import reduce #導(dǎo)入reduce函數(shù)def f(x,y): return x+yprint(reduce(f,[1,2,3,4,5,6,7,8,9,10]))print(reduce(f,range(1,101)))#結(jié)果:555050
(3)filter()函數(shù)(過(guò)濾)
filter函數(shù)接收一個(gè)函數(shù)f和一個(gè)list,函數(shù)f的作用是對(duì)每個(gè)元素進(jìn)行判斷,返回True或者False,filter()根據(jù)判斷結(jié)果自動(dòng)過(guò)濾掉不符合條件的元素,返回符合要求的元素組成的list
filter(lamdba x: x%2 ==1, [1, 2, 3, 4, 5])
舉例:計(jì)算list中小于7的數(shù)
#!/usr/bin/env python# -*- coding:utf-8 -*-for i in filter(lambda x:x<7, [1, 2, 3, 4, 5,40,8]): ? ?print(i)#結(jié)果:12345
(4)sorted()函數(shù)(排序)
sorted(...) sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
# sorted(iterable, key, reverse)# iterable 一個(gè)可迭代的對(duì)象# key 對(duì)什么進(jìn)行排序# reverse bool類型,如果為true為反序, 默認(rèn)為false# 返回值是一個(gè)list
舉例:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/15 22:47# @Author : Feng Xiaoqing# @File : demo3.py# @Function: -----------m = dict(a=1, c=10, b=20, d=15)print(sorted(m.items(), key = lambda d:d[1],reverse = True)) #按value值倒序排列#結(jié)果:[('b', 20), ('d', 15), ('c', 10), ('a', 1)]
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4377瀏覽量
64548 -
代碼
+關(guān)注
關(guān)注
30文章
4893瀏覽量
70445 -
python3
+關(guān)注
關(guān)注
0文章
18瀏覽量
4051
原文標(biāo)題:最全 Python3 函數(shù)知識(shí)點(diǎn)大全
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
一文詳解python調(diào)用函數(shù)
python2和python3同時(shí)安裝的詳細(xì)步驟
安裝python3的步驟
請(qǐng)舉例說(shuō)明如何使用TIME.SETUP() 中的新選項(xiàng)?
python2與python3問(wèn)題的分析
Python私有變量的定義方法
C語(yǔ)言程序設(shè)計(jì)教程課件之函數(shù)的詳細(xì)資料說(shuō)明

C語(yǔ)言函數(shù)的實(shí)驗(yàn)詳細(xì)資料說(shuō)明

C語(yǔ)言教程之函數(shù)的詳細(xì)資料說(shuō)明

評(píng)論