函式就是將一些語句集合在一起的部件,他們能夠不止一次的程式中執行,函式還能夠計算出乙個返回值,並能夠改變作為函式輸入的引數。而這些引數在**執行時每次都不同。以函式的形式去編寫乙個操作可以使它成為乙個廣泛的應用工具。
基本格式:
def函式名:
函式體return 返回值
定義函式按照前面的基本格式定義函式,呼叫函式時要使用函式名加括號來呼叫函式,括號中可以包含乙個或多個引數。這些引數將會傳遞給函式頭部的引數名。
#定義def
test(x,y):
return x*y#呼叫
test(5,10)
func(valule) 函式呼叫時會通過位置來匹配,呼叫函式時引數不能省略。
func(name=value) 函式如果在呼叫的時候不給引數,就按預設引數的值進行傳遞,如果在呼叫函式時給預設引數重新賦值則原值會被覆蓋,
def func(name="joe"
):
(name)
func()
>>>joe
func(
"austinjoe
") #
func(name="austinjoe")也是可以的
>>>austinjoe
func(*args) 將所有位置相關的引數收集到乙個新的元組之中,並將這個元組值賦值給變數args。*可以匹配任意長度和數目的引數。
def func(*args):(args)
func(*(1,2,3,4))#
func(1,2,3,4)這種形式也是可以的
>>>(1, 2, 3, 4)
func([1,2,3],'
hello
','python')
>>>([1, 2, 3], '
hello
', '
python
')
2.func(**kwargs)與上面類似,但是是將引數收集到字典中。
def func(**kwargs):(kwargs)
func(a=1,b=2)
>>>
func(**)
>>>
在python中我們可以用*和**對引數解包。
deffunc(a,b,c,d):
(a,b,c,d)
args=(1,2,3,4)
func(*args)
>>>1 2 3 4
deffunc(a,b,c,d):
(a,b,c,d)
args=
func(**args)
>>>1 2 3 4
引數型別是可以混合使用的,但必須遵循以下法則:
在函式呼叫中,引數必須以此順序出現:位置引數,後面跟著任何關鍵字引數,然後是*args,最後跟著**kwargs。
在函式頭部,引數必須以此順序出現:一般引數後面緊跟著預設引數,如果有的話後面是*args,最後是**kwargs。
lambda是乙個表示式,表示式建立了乙個之後能夠呼叫的函式,但是他返回了乙個函式而不是將這個函式賦值給變數名。
其一般格式為:
lambda:argument1,argument2··· argumentn :expression using arguments
f = lambda x, y, z: x + y +zprint(f(2, 3, 4))
>>>9
lambda表示式常常與map()和filter()函式結合使用,我們接下來就學習這兩個函式。
map函式會對乙個序列物件中的每個元素應用被傳入的函式,並且返回了包含所用函式呼叫結果的乙個列表。
l=list(map((lambda x:x+2),[1,2,3,4]))print(l)
>>>[3, 4, 5, 6]
l=list(map(pow,[1,2,3],[5,6,7]))(l)>>>[1, 64, 2187]
filter()函式會根據測試函式過濾出一些元素。
l=list(filter((lambda x:x>0),range(-10,10)))(l)>>>[1, 2, 3, 4, 5, 6, 7, 8, 9]
reduce()函y數會對每乙個元素應用函式並執行到最後結果。
from functools importreduce
result=reduce((lambda x,y:x+y),[1,2,3,4])
(result)
>>>10
閉包是指函式外面呼叫函式裡面的的函式,即函式巢狀。
defmain():
print("
hello world")
defnest():
print("
我是巢狀的函式!")
return
nest
#第一種形式
main()()
>>>hello world
>>>我是巢狀的函式!
#第二種形式
m=main()
m()>>>hello world
>>>我是巢狀的函式!
遞迴函式的使用要注意:
遞迴的次數在python中是有限制的;
遞迴函式使用時占用的記憶體成幾何量增長;
遞迴函式要有終止條件。
#對乙個列表求和
defsumtree(l):
tot =0
for x in
l:
ifnot
isinstance(x, list):
tot +=x
else
: tot +=sumtree(x)
return
totl = [1, [1, 2, [6, 7], 3], 4, 5, [9, 8]]
(sumtree(l))
>>>46
函式a的執行取決於函式b中某一條件的執行,則函式a為**函式。
defmain(x):
if x>5:
print("
**函式未執行!!")
else
:
return
callback()
defcallback():
print("
**函式執行!!")
main(10)
>>>**函式未執行!!
main(4)
>>>**函式執行!!
作用域法則:
內嵌的模組是全域性作用域;
全域性作用域的範圍僅限於單個檔案;
每次對函式的呼叫都建立了乙個本地作用域;
賦值的變數名除非宣告為全域性變數和非本地變數,否則均為本地變數;
所有其他的變數名都可以歸納為本地,全域性或者內建的。
x=88deffunc(y):
z=x+y
return
zprint(func(12))
#其中x和函式func都是全域性變數名,而y和z均為本地變數名
global 語句用來宣告乙個全域性或多個全域性變數名。
x = 88deffunc():
global
x x = 99func()
(x)>> > 99
在宣告nonlocal變數名時,該變數名必須存在函式的巢狀的作用域,即他們只能存在於乙個巢狀的函式中,並且不能有乙個巢狀的def中的第一次賦值建立。
deftester(start):
state =start
defnested(label):
nonlocal state
(label, state)
state += 1
return
nested
f =tester(0)
print(f('
first'))
>>>first 0
print(f('
second'))
>>>second 1
print(f('
third'))
>>>third 2
python基礎知識(六)函式 (八)
目錄 六 函式 八 6.1匿名函式的格式 6.2匿名函式和五個特殊的內建函式可以結合使用 6.3面試題練一練 lambda 引數,引數2 返回值表示式 def add x,y return x y add lambda x,y x y print add 1,4 匿名函式在內建函式 max 求最大值...
python基礎 函式,作用域介紹(八)
函式,函式也是乙個物件 物件是記憶體中用來儲存資料的區域。函式可以用來儲存一些可執行 並且在需要的時候對這些 多次呼叫。建立函式 def 函式名 塊 def fn print this is my first function 函式中的 塊不會直接執行,需要呼叫該函式fn 後才會執行。print f...
Python基礎語法(八)
2.lambda表示式 3.高階函式 特點 函式內部自己呼叫自己 必須有出口 def fn sum inum if inum 1 return inum return inum fn sum inum 1 print fn sum 3 輸出結果 6如果乙個函式有乙個返回值,並且只有一句 可以使用la...