函式引數複習

2021-09-09 02:37:59 字數 3259 閱讀 1266

一、函式

1.為什麼要使用函式?

減少**的冗餘

2.函式先定義後使用(相當於變數一樣先定義後使用)

3.函式的分類:

內建函式:python直譯器自帶的,直接拿來用就行了

自定義函式:根據自己的需求自己定義的函式

def func(): #函式名列印出來的是記憶體位址

'''注釋'''

函式體4.函式定義都幹了些什麼事?

只檢測語法,不執行**

5.函式就是一段功能,盡量把函式名定義的有意義

6.定義函式的三種方式:

有引數的函式:就是接受外部傳進來的值,進行一系列的運算,最後吧結果返回出來

無引數的函式:通常只是做一下操作而已

空函式:什麼事情都不做就是乙個空函式(即便是乙個空函式,他也會有如下屬性)

7.函式的返回值:可返回任意型別的值

什麼時候需要有返回值:具體情況具體分析

什麼時候沒有返回值:具體情況具體分析

8.yield和return的區別

yield 停在那呢,掛起了

yield 能返回多次值;return 返回一次值

yield 儲存函式狀態

9.函式的呼叫:函式名加()

10.函式引數

形參:定義函式時括號內寫的引數

形參在定義階段是不佔記憶體空間的,在呼叫的時候才占用記憶體空間

實參:在呼叫函式時括號內傳進來的值

函式引數的具體用法

1.位置引數:

1.按照位置傳參

按位置定義的形參必須要傳值

按位置定義的實參按照位置與形參一一對應的傳

2.按照關鍵字傳數:按照key=value的形式定義的實參,傳的時候與位置沒有關係

def foo(x,y):

pass

foo(1,2) #與形參一一對應

foo(y=2,x=1) #關鍵字引數,指名道姓的傳

foo(1,y=2) #混用位置實參和關鍵字實參

#混著用時:注意:1.不能給同乙個形參重複賦值

2.位置實參必須在關鍵字實參的前面

2.預設引數:在定義階段就已經為形參賦值了,意味著在呼叫階段就可以不為預設引數傳值

如果給預設引數傳值了,就把一開始設定的給替換了。

預設引數定義的場景:大多數都是男性,女性很少時就可以設定個預設,當然還有其他場景

注意:1.預設引數必須在位置形參後面

2.預設引數的值只在函式定義階段生效一次,定義之後的修改不會影響它的值

3.預設引數不要弄成可變型別的,就像是列表,就是乙個坑

3.動態引數

可變長度的引數(長度指的是引數的個數):引數*,**

1.*會把多出來的值傳給z,並且以元組的形式返回   

2.**會把多出來的值傳給z,並且以字典的形式返回

3.在實參中只要碰到*(),就是打散了

只要是可迭代的就可以用*

*就相當於for迴圈的操作,遇到*先打散

*args,**kwargs(可傳任意值)

可變長度的引數:從實參的角度推算出形參對應的形式*和**

針對按照位置定義的實參多出來的那部分,會被形參中的*處理,並且儲存成元組的形式複製給args

針對按照關鍵字定義的實參多出來的那部分,會被形參中的**處理,並且儲存成字典的形式複製給kwargs

1

#1.舉例一、

2def foo(x,y,*args):

3print

(x,y)

4print(args)#

args相當於(3, 4, 5, 6, 7, 8, 9),那麼*args相當於*(3, 4, 5, 6, 7, 8, 9)

5print

(args[0])

6print(*args) #

加個*就是把上面的元組給打散了,就還是和原來傳實參的時候的形式一樣了

78 foo(1,2,3,4,5,6,7,8,9)

9 foo(1,2,3,*(4,5,6,7,8,9)) #

也可以這樣傳 就相當於foo(1,2,3,4,5,6,7,8,9)

1011

#2.舉例二、

12def

bar(x,y,z):

13print

(x,y,z)

14 bar(1,2,3)

15 bar(*['

b','

a','

c']) #

bar('b','a','c')

16 bar(*'

hel') #

bar('h','e','l')

17 bar(*) #

bar('b','a','c')18#

強調:如果實參**現了*和**,第一時間打散了去看

1920

#3.舉例三、

21def foo(x,y,**kwargs):

22print

(x,y)

23print(kwargs) #

吧多餘的元素以字典的形式返回了

24print(*kwargs) #

輸出c d f ,就是把字典打散了25#

26#foo(1,y=2,c=3,d=4,f=6)

2728

#4.舉例四、

29def index(x,y,z=1):

30print

(x,y,z)

3132

index(args,kwargs)

33 index(*args, **kwargs) #

就是打散了

38'''

可變長度的引數:從實參的角度推算出形參對應的形式 * 和 **

39針對按照位置定義的實參冗餘的部分,會被形參中的 * 儲存成元組的形式賦值給args

40針對按照關鍵定義的實參冗餘的部分,會被形參中的 ** 儲存成字典的形式賦值給kwargs

41強調:

42如果實參**現了 * 和 **,第一時間打散了去看。

43'''

強調:如果實參**現了*和**,第一時間打散了去看

11.命名關鍵字引數(了解):在定義階段,在*之後定義的形參稱為命名關鍵字引數

特點是:在呼叫階段,該引數必須以關鍵字的形式被傳值

def foo(x,y,*,a,b):

print(x)

print(y)

print(a)

print(b)

foo(1,2,b=20,a=10)

控制函式呼叫的時候必須以關鍵字傳參的時候就用命名關鍵字傳參

AS函式複習

actionscript 3.0 中有兩種函式型別 方法 和函式閉包 方法 如果您將函式定義為類定義的一部分或者將它附加到物件的例項,則該函式稱為方法。函式閉包 如果您以其它任何方式定義函式,則該函式稱為函式閉包 隨機函式 var randomnumber number math.random 函式...

虛函式複習

虛函式聯絡到多型,多型聯絡到繼承。所以本文中都是在繼承層次上做文章。沒了繼承,什麼都沒得談。下面是對c 的虛函式這玩意兒的理解。一,什麼是虛函式 如果不知道虛函式為何物,但有急切的想知道,那你就應該從這裡開始 簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來...

複習8 函式

1.內聯函式 2.引數傳遞 2.1引數傳遞的求值順序是未定義的。如f i,i 的引數值是未定義的,結果也是不可知的。2.2引數傳遞一般為值傳遞,保證了實參的值不會修改,但存在效率問題。於是我們使用指標和引用做引數,但使用它們可能會修改實參。為了給呼叫者足夠的保證,我們使用const修飾它們表示不會改...