Python3中的函式 大全
Python 函式
函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。
函式能提高應用的模組性,和程式碼的重複利用率。Python提供了許多內建函式,比如print()。但也可以自己建立函式,這被叫做使用者自定義函式。
1.函式的定義:
你可以定義一個由自己想要功能的函式,以下是簡單的規則:
函式程式碼塊以 def 關鍵詞開頭,後接函式識別符號名稱和圓括號()。
任何傳入引數和自變數必須放在圓括號中間。圓括號之間可以用於定義引數。
函式的第一行語句可以選擇性地使用文件字串—用於存放函式說明。
函式內容以冒號起始,並且縮排。
pass 關鍵字,代表什麼都不幹
exit(num) 強行退出(num:是一個數字,顯示為退出碼)
return [表示式] 結束函式,選擇性地返回一個值給呼叫方。不帶表示式的return相當於返回 None。
語法
def functionname( parameters ): function_suite return [expression]
預設情況下,引數值和引數名稱是按函式宣告中定義的的順序匹配起來的。
舉例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)# 結果:[0, 1]f(3,[3,2,1])# 結果: [3, 2, 1, 0, 1, 4]f(x=3, l=[])# 結果: [0, 1, 4]
執行結果:
[0, 1] [3, 2, 1, 0, 1, 4] [0, 1, 4]
2.函式的呼叫
定義一個函式只給了函式一個名稱,指定了函式裡包含的引數,和程式碼塊結構。
這個函式的基本結構完成以後,你可以通過另一個函式呼叫執行,也可以直接從Python提示符執行。
如下例項呼叫了add()函式:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/15 21:01# @Author : Feng Xiaoqing# @File : demo2.py# @Function: -----------# 自定義加法函式add()def add(x,y): print("{0} + {1} = {2}".format(x,y,x+y)) return print("finished") #在return後不會執行這條語句# 呼叫函式,計算2+3的得數add(2,3)
執行結果:
2 + 3 = 5
3.函式的引數
形式引數和實際引數
在定義函式時,函式名後面,括號中的變數名稱叫做形式引數,或者稱為"形參"
在呼叫函式時,函式名後面,括號中的變數名稱叫做實際引數,或者稱為"實參"
def fun(x,y): //形參 print(x + y) fun(1,2) //實參 3 fun('a','b') ab
函式預設引數:
預設引數(預設引數)
def fun(x,y=100) print x,y#呼叫:fun(1,2)fun(1)
定義:
#!/usr/bin/env python# -*- coding: utf-8 -*-def fun(x=2,y=3): print x+y
呼叫:
fun()#結果:5fun(23)#結果26fun(11,22)#結果:33
我們經常在看別人的程式碼中,經常出現def(*args, **kwargs)這樣的表現形式:
*args 指的是:tuple (1, )
**kwargs 指的是:dict {“k”: “v”}
fun(*args, **keargs)
fun(1, 2, 3, 4, 5, a=10, b=40)
4.函式的返回值
函式返回值:
函式被呼叫後會返回一個指定的值
函式呼叫後預設返回None
return返回值
返回值可以是任意型別
return執行後,函式終止
return與print區別
#!/usr/bin/env python# -*- coding:utf-8 -*-def fun(): print 'hello world' return 'ok' print 123fun()#結果hello world123None
5.函式的變數
區域性變數和全域性變數:
Python中的任何變數都有特定的作用域
在函式中定義的變數一般只能在該函式內部使用,這些只能在程式的特定部分使用的變數我們稱之為區域性變數
在一個檔案頂部定義的變數可以供檔案中的任何函式呼叫,這些可以為整個程式所使用的變數稱為全域性變數。
def fun(): x=100 print x fun() x = 100 def fun(): global x //宣告 x +=1 print x fun()print x
外部變數被改(x由100改為101):
x = 100def fun(): global x x += 1 print (x) fun()print (x)#結果101101
內部變數外部也可用:
#!/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)#結果:1011011
統計程式中的變數,返回的是個字典
#!/usr/bin/env python# -*- coding:utf-8 -*-x = 100def fun(): x = 1 y = 1 print(locals()) fun()print (locals())
結果:
{'y': 1, 'x': 1} {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x02FF6390>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/PycharmProjects/PythonLive/untitled/day07/demo2.py', '__cached__': None, 'x': 100, 'fun': <function fun at 0x052D2390>}
6.匿名函式
顧名思義就是沒有名字的函式,那為什麼要設立匿名函式,他有什麼作用呢?
lambda 函式是一種快速定義單行的最小函式,可以用在任何需要函式的地方
python 使用 lambda 來建立匿名函式。
lambda只是一個表示式,函式體比def簡單很多。
lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
lambda函式擁有自己的名稱空間,且不能訪問自有引數列表之外或全域性名稱空間裡的引數。
雖然lambda函式看起來只能寫一行,卻不等同於C或C++的行內函數,後者的目的是呼叫小函式時不佔用棧記憶體從而增加執行效率。
語法
lambda函式的語法只包含一個語句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
舉例:
求兩數的乘積:
常規寫法:
def fun(x,y) return x*y
lambda版本寫法:
r = lambda x,y:x*y
7.高階函式
(1)map(f, list)
返回每個元素通過f計算完的value的list
map()
函式接收兩個引數,一個是函式,一個是序列,map
將傳入的函式依次作用到序列的每個元素,並把結果作為新的list返回。
舉例:計算列表裡值的平方
#!/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)
結果:
14916253649
(2)reduce(f,list)函式(求list中數的和)
reduce把一個函式作用在一個序列[x1, x2, x3...]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下一個元素做累積計算,其效果就是:
舉例:計算列表中所有數的和
#!/usr/bin/env python# -*- coding:utf-8 -*-from functools import reduce #匯入reduce函式def f(x,y): return x+y print(reduce(f,[1,2,3,4,5,6,7,8,9,10])) print(reduce(f,range(1,101)))#結果:555050
(3)filter()函式(過濾)
filter函式接收一個函式f和一個list,函式f的作用是對每個元素進行判斷,返回True或者False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回符合要求的元素組成的list
filter(lamdba x: x%2 ==1, [1, 2, 3, 4, 5])
舉例:計算list中小於7的數
#!/usr/bin/env python# -*- coding:utf-8 -*-for i in filter(lambda x:x<7, [1, 2, 3, 4, 5,40,8]): print(i)#結果:12345
(4)sorted()函式(排序)
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
# sorted(iterable, key, reverse)# iterable 一個可迭代的物件# key 對什麼進行排序# reverse bool型別,如果為true為反序, 預設為false# 返回值是一個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值倒序排列#結果:[('b', 20), ('d', 15), ('c', 10), ('a', 1)]