歡迎光臨
每天分享高質量文章

最全 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):  //形參
   printx + 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="" class="hljs-default-number" style="color: rgb(209, 154, 102);background: rgba(0, 0, 0, 0);display: inline;width: 66px;text-decoration: none solid rgb(209, 154, 102);font-weight: 400;font-style: normal;">0x02FF6390>, '__spec__': None, '__annotations__': {}, '__builtins__': 'builtins'

(built-in)>, ‘__file__’: ‘D:/PycharmProjects/PythonLive/untitled/day07/demo2.py’, ‘__cached__’: None, ‘x’: 100, ‘fun’: 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()根據判斷結果自動過濾掉不符合條件的元素,傳回符合要求的元素組成的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)


#結果:
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)]

作者:楓葉雲

來源:見文末https://my.oschina.net/u/3804957/blog/1795973


《Python人工智慧和全棧開發》2018年07月23日即將在北京開課,120天衝擊Python年薪30萬,改變速約~~~~

*宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。

– END –


更多Python好文請點選【閱讀原文】哦

↓↓↓

贊(0)

分享創造快樂