函數(shù)的作用
寫代碼忌諱的是重復(fù),當(dāng)有重復(fù)的代碼塊出現(xiàn)時(shí),可以使用函數(shù)對(duì)代碼塊進(jìn)行封裝,使得重復(fù)部分只用一個(gè)函數(shù)就能實(shí)現(xiàn),比如我們要計(jì)算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)
對(duì),三個(gè)一樣的階乘計(jì)算代碼,相當(dāng)麻煩,所以我們只需將重復(fù)的代碼封裝到一個(gè)函數(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)簡(jiǎn)單。
定義函數(shù)
這里我們將階乘的代碼塊定義為factorial,括號(hào)內(nèi)是我們需要傳入的參數(shù),return是將結(jié)果輸出。函數(shù)的命名規(guī)則與變量的命名規(guī)則相同。
函數(shù)參數(shù)
當(dāng)然,這里我們將參數(shù)定義為一個(gè)需要傳入的變量,我們也可以直接將參數(shù)固定:
def parameter(a=3,b=4):
print(a+b)
parameter()
parameter(4)
parameter(4,8)
結(jié)果是7,8,12.
當(dāng)沒有參數(shù)傳入時(shí),使用的是默認(rèn)參數(shù)。
參數(shù)的設(shè)置還有一個(gè)更'懶'的方法。
直接定義為*args
這表示傳入的參數(shù)是可變參數(shù),可以是0個(gè)也可以是多個(gè)。
當(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被刪掉時(shí),就會(huì)報(bào)錯(cuò)UnboundLocalError: local variable 'a' referenced before assignment
因?yàn)樵瓉韆就是全局變量,如果你修改,就會(huì)變成局部變量,所以可以先聲明一下a的作用域。