標籤:bsp 使用 結果 style img 執行 傳遞參數 參數傳遞 pytho
對於初學者而言,感覺函數還是不是很好理解,尤其是當寫一個指令碼,或者是寫一個演算法,認為可能for迴圈就已經可以解決的問題為什麼還要用函數來實現呢?
今天就來說一下函數的優點,其實函數的最大優點就是可重用,一個函數實現後可以被其他不同的指令碼來調用,這也就是體現了代碼的重用性。
- 函數的定義:def 函數名():,在定義函數時,一定要用關鍵字def開頭,然後緊接著是函數名,括弧裡是要傳的的參數,當然也可不傳,最後面是個冒號:
def add(x,y):
return x+y
這就是一個最簡單的函數
2.函數的傳回值:Python中自訂的函數如果有return,則返回實際的結果,如果沒有傳回值,則返回None,這是Python與其他語言的區別之一
3.函數的調用:在定義好一個函數後,如果要實現函數的功能,一定要對其進行引用,不然函數體是不會被執行的,調用的方法也很簡單,就是函數名和需要的參數即可
例如上邊add函數的調用: add(2,3)即可返回5
注意:此處如果傳入兩個字串也是OK的,這也是Python的特殊之處,他會根據傳入的值來進行相應操作,如果傳入的是兩個數字,則進行相加,如果是兩個字串則進行拼接,但是此處必須傳入的類型一致,否則會報錯,所以可以根據你的需要進行處理,如果要做特定的實現可以用isinstance來判斷一下類型,來達到自己想要的效果。
4.函數的傳參:函數的參數分為按值傳遞和按地址傳遞。按值傳遞是將不可變的參數傳遞給函數,按地址傳遞是將可變的參數傳遞給函數。此處的可變參數與不可變參數是相對記憶體位址而言的,如果傳入的是字串、元祖、數字,是不可變對象,就是按值傳遞,為什麼說是不可變的,例如如果將a=1這樣一個變數傳遞給函數,那麼就是說將1的記憶體位址傳給函數,那麼電腦給1分配過記憶體位址後就不會在變化,所以說在函數體內對a做的任何操作都不會影響函數體外a的值,來看一個例子就會比較好理解了:
a =1
def print_sth(s):
s=s+1
return s
print print_sth(a)
print a
執行結果:
下面我們來看一下原理:
這就是按值傳遞的原理,當函數體內對a進行加1操作,實際是指向另一個記憶體位址了,用id()就可以查看記憶體位址
5.看了按值傳遞的原理,按引用傳遞應該就好理解了,按引用傳遞就是傳遞一些可變參數,例如list、dict等,先來看一下他們的記憶體位址的變化:
可以看到當你在對一個list進行操作時,它指向的記憶體位址實際是沒有變化的,所以說當傳遞可變參數時,函數體內對變數的操作是會影響函數體外的變數的,看一個例子就更明白了:
現在對函數的按值傳遞和按引用傳遞參數應該非常瞭解了吧。
6.可變參數的表示:*args表示傳入的是一個元祖,**args表示傳入的是一個字典,在實際使用中當不確定要傳入多少個參數時,就可以使用這種方法:
def func(a,*args):
for i in args:
a +=i
return a
你會發現,你傳遞幾個參數都不會出問題,這就是可變參數的好處,然後看一下**args吧:
看完這些,你是否對函數有了很大理解,現在應該感覺函數可以實現很多你想要實現的功能吧,這可不僅僅是幾個for迴圈就能實現的哦,趕快學學函數吧,這也是後面寫好代碼的基礎。
Python測試開發之函數