python function函数_Python34-06-函数(function)
#函數(shù)(function)的參數(shù)(arguments)傳遞
##位置傳遞
##def f(a,b,c):
## ? ?return a+b+c
##
##print(f(1,2,3))
##關(guān)鍵字傳遞
##有些情況下,用位置傳遞會(huì)感覺比較死板。關(guān)鍵字(keyword)傳遞是根據(jù)每個(gè)參數(shù)的名字傳遞參數(shù)。關(guān)鍵字并不用遵守位置的對(duì)應(yīng)關(guān)系。依然沿用上面f的定義,更改調(diào)用方式:
##print(f(c=3,b=2,a=1))
##關(guān)鍵字傳遞可以和位置傳遞混用。但位置參數(shù)要出現(xiàn)在關(guān)鍵字參數(shù)之前
##print(f(1,c=3,b=2))
##參數(shù)默認(rèn)值
##在定義函數(shù)的時(shí)候,使用形如a=19的方式,可以給參數(shù)賦予默認(rèn)值(default)。如果該參數(shù)最終沒有被傳遞值,將使用該默認(rèn)值
##def f(a,b,c=10):
## ? ?return a+b+c
##
##print(f(3,2))
##print(f(3,2,1))
#包裹傳遞
##定義函數(shù)時(shí),我們有時(shí)候并不知道調(diào)用的時(shí)候會(huì)傳遞多少個(gè)參數(shù)。這時(shí)候,包裹(packing)位置參數(shù),或者包裹關(guān)鍵字參數(shù),來(lái)進(jìn)行參數(shù)傳遞,會(huì)非常有用。
##包裹傳遞的關(guān)鍵在于定義函數(shù)時(shí),在相應(yīng)元組或字典前加*或**
##包裹位置傳遞
##def func(*name):
## ? ?print (type(name))
## ? ?print (name)
##
##func(1,4,6)
##func(5,6,7,1,2,3)
##兩次調(diào)用,盡管參數(shù)個(gè)數(shù)不同,都基于同一個(gè)func定義。在func的參數(shù)表中,所有的參數(shù)被name收集,根據(jù)位置合并成一個(gè)元組(tuple),這就是包裹位置傳遞
##包裹關(guān)鍵字傳遞
##def func(**dict):
## ? ?print (type(dict))
## ? ?print (dict)
##
##func(a=1,b=9)
##func(m=2,n=1,c=11)
##在dict前加**
##解包裹
##*和**,也可以在調(diào)用的時(shí)候使用,即解包裹(unpacking)
def func(a,b,c):
print (a,b,c)
args = (1,3,4)
func(*args)
##所謂的解包裹,就是在傳遞tuple時(shí),讓tuple的每一個(gè)元素對(duì)應(yīng)一個(gè)位置參數(shù)。在調(diào)用func時(shí)使用*,是為了提醒Python:我想要把a(bǔ)rgs拆成分散的三個(gè)元素,分別傳遞給a,b,c
##對(duì)詞典的解包裹
dict = {'a':1,'b':2,'c':3}
func(**dict)
##在傳遞詞典dict時(shí),讓詞典的每個(gè)鍵值對(duì)作為一個(gè)關(guān)鍵字傳遞給func
##混合
##在定義或者調(diào)用參數(shù)時(shí),參數(shù)的幾種傳遞方式可以混合。但在過程中要小心前后順序。
##基本原則是,先位置,再關(guān)鍵字,再包裹位置,再包裹關(guān)鍵字,
##并且根據(jù)上面所說(shuō)的原理細(xì)細(xì)分辨
##lambda函數(shù)
##func = lambda x,y: x + y
##print (func(3,4))
##lambda生成一個(gè)函數(shù)對(duì)象。該函數(shù)參數(shù)為x,y,返回值為x+y。函數(shù)對(duì)象賦給func。func的調(diào)用與正常函數(shù)無(wú)異
##以上定義可以寫成以下形式
##def func(x, y):
## ? ?return x + y
##print (func(3,4))
##函數(shù)作為參數(shù)傳遞--函數(shù)可以作為一個(gè)對(duì)象,進(jìn)行參數(shù)傳遞
##def test(f, a, b):
## ? ?print ('test')
## ? ?print (f(a, b))
##test(func, 3, 5)
##也可以如下寫
##test((lambda x,y: x**2 + y), 6, 9)
##map()函數(shù) --- Python的內(nèi)置函數(shù)。它的第一個(gè)參數(shù)是一個(gè)函數(shù)對(duì)象
##re = map((lambda x: x+3),[1,3,5,6])
##這里,map()有兩個(gè)參數(shù),一個(gè)是lambda所定義的函數(shù)對(duì)象,一個(gè)是包含有多個(gè)元素的表。
##map()的功能是將函數(shù)對(duì)象依次作用于表的每一個(gè)元素,每次作用的結(jié)果儲(chǔ)存于返回的表re中。
##map通過讀入的函數(shù)(這里是lambda函數(shù))來(lái)操作數(shù)據(jù)(這里“數(shù)據(jù)”是表中的每一個(gè)元素,“操作”是對(duì)每個(gè)數(shù)據(jù)加3)。
re = map((lambda x,y: x+y),[1,2,3],[6,7,9])
##map()將每次從兩個(gè)表中分別取出一個(gè)元素,帶入lambda所定義的函數(shù)
##filter()函數(shù)
#第一個(gè)參數(shù)也是一個(gè)函數(shù)對(duì)象。它也是將作為參數(shù)的函數(shù)對(duì)象作用于多個(gè)元素。如果函數(shù)對(duì)象返回的是True,則該次的元素被儲(chǔ)存于返回的表中。filter通過讀入的函數(shù)來(lái)篩選數(shù)據(jù)。同樣,在Python 3.X中,filter返回的不是表,而是循環(huán)對(duì)象
def func(a):
if a > 100:
return True
else:
return False
print filter(func,[10,56,101,500])
總結(jié)
以上是生活随笔為你收集整理的python function函数_Python34-06-函数(function)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python把图片另存为_pycharm
- 下一篇: 树转化为二叉树_森林转化为二叉树(详解版