學習python內一般函式知識

2021-09-27 07:12:16 字數 4812 閱讀 9370

目錄

一、函式定義

二、函式編寫說明文件

三、函式的返回值

四、函式引數

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.呼...