目錄
一、函式定義
二、函式編寫說明文件
三、函式的返回值
四、函式引數
1、位置引數與關鍵字引數
2、預設引數
3、可變長引數
4、可變關鍵字引數
五、作用域
1、全域性變數
2、區域性變數
3、global關鍵字
4、內嵌函式與 nonlocal關鍵字
5、閉包
6、遞迴
7、lambda匿名函式
一、函式定義
in [17]
:def
info_1
(a,b,c)
:print
(a)print
(b)print
(c)in [20]
:info_1(1,
2,3)
# 賦值呼叫,這樣就可以重複呼叫12
3
二、函式編寫說明文件
def
test
(a,b)
:# test的函式解釋就是『用來實現兩個數的求和』
''' 用來實現兩個數的求和
'''print
(a+b)
三、函式的返回值
def
abs_1
(x):
# return返回乙個值,下面的程式就不會執行
if x >=0:
return
(x)else
:return
(-x)
in [32]
:abs_1(
-444
)out[32]
:444
四、函式引數
1、位置引數與關鍵字引數
# 位置引數
in [53]
:def
test
(a,b,c)
:print
(a)print
(b)print
(c)in [54]
:test(1,
2,3)
# 1,2,3分別對應a,b,c12
3
# 關鍵字引數
in [57]
:test(a=
2,b=
1,c=3)
213
關鍵字引數必須放在位置引數後⾯
使⽤名稱指定的引數,有助於澄清各個引數的作⽤。這樣,函式調⽤不再像下⾯這樣怪異⽽神秘。
使⽤關鍵字引數使每個引數的作⽤清晰明了。另外,引數的順序錯了也沒關係。
另外,關鍵字引數最⼤的優點還在於可以指定預設值。
2、預設引數
def
test
(a,b,c=1)
:print
(a)print
(b)print
(c)in [64]
:test(b=
1,a=2)
# c=1是預設引數21
1
必選引數在前,預設引數在後,否則會報錯。
預設引數降低了函式調⽤的難度,⽽⼀旦需要更複雜的調⽤時,⼜可以傳遞更多的引數來實現。⽆
論是簡單調⽤還是複雜調⽤,函式只需要定義⼀個。
3、可變長引數
in[76
]:defsum_2
(*x_list)
:# 在引數前面加個*
n=0for i in x_list:
n+=i
return n
in [77]
:sum_2(3,
4,5,
1,2,
3,4,
5,1,
2,3)
out[77]
:33
4、可變關鍵字引數
⼀個星號不會收集關鍵字引數,要收集關鍵字引數,可使⽤兩個星號。
⼀個星號就是打包成元組傳⼊進來,兩個星號就是打包成字典傳⼊進來。
in[79]
:def
test
(**x)
:# 在引數前加兩個*
return x
in [80]
:test(a=
1,b=
2,c=
3,d=
4)
out[80]
:
五、作用域
1、全域性變數和區域性變數
# 全域性作用域a=1
# 區域性作用域 n= 0即為區域性變數
deftest_1
(*args)
: n=
0for i in args:
n+=i*i
return n
在函式外邊定義的變數叫做全域性變數
全域性變數能夠在所有的函式中進⾏訪問
如果在函式中修改全域性變數,那麼就需要使⽤global進⾏宣告,否則出錯
如果全域性變數的名字和區域性變數的名字相同,那麼使⽤的是區域性變數的,⼩技巧:強⻰不壓地頭蛇
2、global關鍵字
# global關鍵字,全域性變數不可變時使用
a=100
deftest5()
:global a # 呼叫全域性變數
a+=1print
(a)test5(
)
3、內嵌函式與 nonlocal關鍵字
def
outer()
: num =
10def
inner()
:nonlocal num # nonlocal關鍵字宣告
num =
100print
(num)
inner(
)print
(num)
outer(
)100
100
4、閉包
in [
111]
:def
funcx
(x):
deffuncy
(y):
return x *y
return funcy
in [
112]
:funcx(1)
(2)out[
112]
:2
5、遞迴
在程式上,遞迴實質上是函式調⽤⾃身的⾏為。
# 遞迴
defcaljie
(n):
if n>1:
result = n* caljie(n-1)
else
: result=
1return result
in [
131]
:caljie(3)
out[
131]
:6
6、lambda匿名函式
①基本語法
in [
148]
:f =
lambda x:x*
2if x>
5else x/
2# else不能省略 可用else nonef(3
)out[
148]
:1.5
②使用場景
函式作為引數進⾏傳遞
lambda函式能接收任何數量的引數,但只能返回⼀個表示式的值
匿名函式不能直接調⽤print,因為lambda需要⼀個表示式
把函式功能遮蔽
import time
time.sleep(10)
# 讓程式休眠10秒
print
('------zzz-------'
)
③作為高階函式的引數
a、map
a =[1
,2,3
,4,5
,6,7
,8,9
,10]in [
152]
:list
(map
(lambda x:x*2+
10, a)
)out[
152]:[
12,14,
16,18,
20,22,
24,26,
28,30]
b、filter
in[
153]
:def
f(x)
:if x %2==
0:# 函式⽤於過濾序列
return x
list
(filter
(f,a)
)out[
153]:[
2,4,
6,8,
10]
c、sorted
in[
159]
:sorted
(a, key=
lambda x:
abs(
5- x)
)#對所有可迭代的物件進⾏排序操作。
out[
159]:[
5,6,
4,4,
3,3,
2,8,
2,1,
1,10,
22,55,
77]
python一般函式 python 函式
秋風蕭瑟 1.在乙個函式的命名空間中給乙個變數賦全域性的值,要把該變數賦為global a none def bind a variable global a a bind a variable print a 2.一般情況下函式返回多個物件時,會返回乙個tuple。但是也可以返回乙個dict,有時...
建構函式和一般函式
建構函式 構建創造物件時呼叫的函式,作用 可以給物件進行初始化。建立物件都必須要通過建構函式初始化。如果乙個類中沒有定義建構函式,那麼該類中就會有乙個預設的無參建構函式。如果在類中定義了指定的建構函式,那麼類中的預設建構函式就沒有了。建構函式和一般函式有什麼區別呢?建構函式 物件建立時,就會呼叫與之...
一般時控函式
隨著軟硬體的飛速發展,計算機技術已經廣泛地應用到自動化控制領域,為了實現實時控制,控制程式必須能夠精確地完成定時和計時功能。vc提供了很多關於時間操作的函式,下面根據它們精度的不同,分別進行說明。一般時控函式 vc程式設計師都會利用windows的wm timer訊息對映來進行簡單的時間控制 1.呼...