Python3中的函數

Python 函數

函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。python

函數能提升應用的模塊性,和代碼的重複利用率。Python提供了許多內建函數,好比print()。但也能夠本身建立函數,這被叫作用戶自定義函數。express

1.函數的定義:

你能夠定義一個由本身想要功能的函數,如下是簡單的規則:app

  • 函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括號()
  • 任何傳入參數和自變量必須放在圓括號中間。圓括號之間能夠用於定義參數。
  • 函數的第一行語句能夠選擇性地使用文檔字符串—用於存放函數說明。
  • 函數內容以冒號起始,而且縮進。
  • pass 關鍵字,表明什麼都不幹
  • exit(num)   強行退出(num:是一個數字,顯示爲退出碼)
  • return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return至關於返回 None。

語法

def functionname( parameters ):
   function_suite
   return [expression]

默認狀況下,參數值和參數名稱是按函數聲明中定義的的順序匹配起來的。函數

舉例1:ui

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:spa

#!/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]

運行結果:code

[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 4]

 

2.函數的調用

定義一個函數只給了函數一個名稱,指定了函數裏包含的參數,和代碼塊結構。orm

這個函數的基本結構完成之後,你能夠經過另外一個函數調用執行,也能夠直接從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()根據判斷結果自動過濾掉不符合條件的元素,返回符合要求的元素組成的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)]
相關文章
相關標籤/搜索