Python函式
文章目錄
- Python函式
- 一般函式定義方式
- 一些概念與特性
- 嵌套
- 閉包
- lambda運算式
- 概念
- 格式
- 與兩個過濾器一起使用
- Filter
- Map
- 遞回
- 概念
- 基本的求和
- 斐波拉契數列
- 寫函式檔案
一般函式定義方式
def sum(a, b):
return a+b
##回傳a與b的和
一些概念與特性
嵌套
Python的函式是可以嵌套定義的
def Fun1():
print("Runing Fun1...")
def Fun2():
print("Runing Fun2...")
Fun2()
但是要注意在內部定義就只能在內部使用,超出函式范圍不能再呼叫Fun2,只能通過Fun1來呼叫Fun2
當嘗試在外部呼叫Fun2時會報錯
例如
def Fun1():
print("Runing Fun1...")
def Fun2():
print("Runing Fun2...")
Fun2()
此時Python解釋器會報錯
閉包
閉包的定義:閉包就是能夠讀取其他函式內部變數的函式,
由這個定義我們可以知道上例中Fun2算得上是一個閉包,不過一般不稱之為閉包,因為它并未讀取Fun1的內部變數,
閉包示例:
def Fun1(x):
def Fun2(y):
return x*y
return Fun2();
##呼叫
Fun1(2)(3)
以上可以稱為閉包
解釋:Fun1會回傳一個函式,其實就是回傳的Fun2,它需要傳遞一個引數,來進行后續操作,所以Fun(2)(3)>相當于是把兩個引數同時傳入經行乘積,
但是Fun2是不能改變Fun1里面的值
例如:
def Fun1():
x = 5
def Fun2():
x *= x
return x
return Fun2()
上述代碼會報錯,
在早期,程式員們對于這種問題的解決方案是用容器型別來處理,因為容器型別不會存放在堆疊里,不會被屏蔽,例如上述問題可以用串列來解決,
def Fun1():
x = [5]
def Fun2():
x[0] *= x[0]
return x[0]
return Fun2()
后來在一次Python更新中解決了這個問題,使用nonlocal修飾即可
def Fun1():
nonlocal x = 5
def Fun2():
x *= x
return x
return Fun2()
lambda運算式
概念
沒什么具體定義,就相當于是一個沒有名字的匿名函式,用Python實作比Java簡單一點
格式
一般這樣定義
lambda x, y : x + y
最基本的使用
fun = lambda x, y : x + y
fun(2, 3)
與兩個過濾器一起使用
Filter
Filter的用法大概是這樣
filter(fun, 可迭代序列)
然后它就會迭代第二個引數的每一個元素,將它們放入第一個引數里面計算,得到的值是真就保留該元素,是假就將其過濾,
示例
filter(lambda x : x % 2, range(20))
就可以立刻過濾出由0到19的所有奇數,
Map
Map的用法
map(lambda x : x % 2, range(20))
map會把串列(可迭代序列)里面所有的值拿出來進行前面所給的函式操作,回傳一個容器,
list(map(lambda x : x%2, range(20)))
就會把所有的偶數變為0,奇數變為1,
上述的兩個過濾器都不改變原來可迭代序列,而是回傳一個新的容器
遞回
概念
程式呼叫自身的編程技巧稱為遞回
基本的求和
def mysum(x):
if x != 0:
return x + mysum(x-1)
else:
return x
##求前x項的和
斐波拉契數列
def Feb(x-1):
if x== 1 or x == 0:
return x
else:
return feb(x-1)+feb(x-2)
#求斐波拉契數列的第x項(從第一項開始!)
寫函式檔案
當你在不知道python里面某一個函式的作用時,比如說你不知道max函式的作用,可以輸入help(max)來獲取相關資訊,這些資訊就是max函式的函式檔案內容,它的撰寫方式如下,
def FunDoc():
'''這是FunDoc函式的函式檔案'''
print(FunDoc Run...)
help(FunDoc)
運行結果如下
FunDoc()
這是FunDoc函式的函式檔案
函式檔案相當于是屬于一個函式的專有注釋,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/247661.html
標籤:python
下一篇:task01,lc:2,4,5
