一、函式
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修飾它們表示不會改...