函數(shù)的作用
寫代碼忌諱的是重復(fù)辐棒,當(dāng)有重復(fù)的代碼塊出現(xiàn)時胶果,可以使用函數(shù)
對代碼塊進(jìn)行封裝,使得重復(fù)部分只用一個函數(shù)就能實現(xiàn)饺谬,比如我們要計算cc
3!*4!*5!
ok,一般我們可以寫成:
a = 3
b = 4
c = 5
r = 1
for i in range(1,a+1):
r *= i
p = 1
for i in range(1,b+1):
p *= i
q = 1
for i in range(1,c+1):
q *= i
print(r*p*q)
對,三個一樣的階乘計算代碼谣拣,相當(dāng)麻煩募寨,所以我們只需將重復(fù)的代碼封裝到一個函數(shù)即可。
def factorial(num):
r = 1
for i in range(1,num+1):
r *= i
return r
那么3森缠,4拔鹰,5的階乘的乘積:
factorial(3)*factorial(4)*factorial(5)
是不是相當(dāng)簡單。
定義函數(shù)
這里我們將階乘的代碼塊定義為factorial
贵涵,括號內(nèi)是我們需要傳入的參數(shù)列肢,return
是將結(jié)果輸出。函數(shù)的命名規(guī)則與變量的命名規(guī)則相同宾茂。
函數(shù)參數(shù)
當(dāng)然瓷马,這里我們將參數(shù)定義為一個需要傳入的變量,我們也可以直接將參數(shù)固定:
def parameter(a=3,b=4):
print(a+b)
parameter()
parameter(4)
parameter(4,8)
結(jié)果是7跨晴,8欧聘,12.
當(dāng)沒有參數(shù)傳入時,使用的是默認(rèn)參數(shù)端盆。
參數(shù)的設(shè)置還有一個更'懶'的方法怀骤。
直接定義為*args
這表示傳入的參數(shù)是可變參數(shù)费封,可以是0個也可以是多個。
當(dāng)然晒喷,如果這種方式被濫用的話,還是蠻惡心的访敌。
變量作用域
def foo():
b = 'hello,world'
def bar():
global a
print(a)
a = 300
print(a)
print(b)
bar()
if __name__=='__main__':
a =100
print('a:',a)
foo()
結(jié)果是
a: 100
100
300
hello,world
當(dāng)global
被刪掉時凉敲,就會報錯UnboundLocalError: local variable 'a' referenced before assignment
因為原來a就是全局變量,如果你修改寺旺,就會變成局部變量爷抓,所以可以先聲明一下a的作用域。