最全 Python3 函數知識點大全

2020-08-13 16:44:35

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\(\)  
#結果:  
5  

fun\(23\)  
#結果  
26  

fun\(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 123  

fun\(\)  

#結果  
hello world  
123  
None

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 = 100  

def fun\(\):  
  global x  
  x += 1  
  print \(x\)  

fun\(\)  
print \(x\)  

#結果  
101  
101

內部變數外部也可用:

#\!/usr/bin/env python  
\# -\*- coding: utf-8 -\*-  
\# \@Time    : 2018/4/15 21:33  
\# \@Author  : Feng Xiaoqing  
\# \@File    : demo2.py  
\# \@Function: -----------  

x = 100  

def fun\(\):  
    global x  
    x +=1  
    global y  
    y = 1  
    print\(x\)  

fun\(\)  
print\(x\)  
print\(y\)  

#結果:  
101  
101  
1

統計程式中的變數,返回的是個字典

#\!/usr/bin/env python  
\# -\*- coding:utf-8 -\*-  

x = 100  
def 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\*x  

for i in map\(f,\[1,2,3,4,5,6,7\]\):  
    print\(i\)

結果:

1  
4  
9  
16  
25  
36  
49

(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\)\)\)  

#結果:  
55  
5050

(3)filter()函數(過濾)

filter函數接收一個函數f和一個list,函數f的作用是對每個元素進行判斷,返回True或者False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回符合要求的元素組成的listfilter(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\)  

#結果:  
1  
2  
3  
4  
5

(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\)\]

最近還爲大家精心整理了一份關於linux和python的學習資料大合集!有需要的可私信,或在「python頭條」後臺回覆 回復關鍵詞「資料合集」即可免費領取!