函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。python
函數能提升應用的模塊性,和代碼的重複利用率。Python提供了許多內建函數,好比print()。但也能夠本身建立函數,這被叫作用戶自定義函數。express
你能夠定義一個由本身想要功能的函數,如下是簡單的規則:app
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]
定義一個函數只給了函數一個名稱,指定了函數裏包含的參數,和代碼塊結構。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
形式參數和實際參數
在定義函數時,函數名後面,括號中的變量名稱叫作形式參數,或者稱爲"形參"
在調用函數時,函數名後面,括號中的變量名稱叫作實際參數,或者稱爲"實參"
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)
函數返回值:
函數被調用後會返回一個指定的值
函數調用後默認返回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
局部變量和全局變量:
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>}
顧名思義就是沒有名字的函數,那爲何要設立匿名函數,他有什麼做用呢?
lambda 函數是一種快速定義單行的最小函數,能夠用在任何須要函數的地方
python 使用 lambda 來建立匿名函數。
lambda函數的語法只包含一個語句,以下:
lambda [arg1 [,arg2,.....argn]]:expression
舉例:
求兩數的乘積:
常規寫法:
def fun(x,y) return x*y
lambda版本寫法:
r = lambda x,y:x*y
(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)]