07函數的定義

函數
形式參數parameter  定義參數是括號內字
實際參數argument   輸入值

def myfx(name):
    '函數形式參數爲name'
    #當前爲註釋內容
    print((name+'內容')*10)

1.運行函數
>>> myfx('測試')
測試內容測試內容測試內容測試內容測試內容測試內容測試內容測試內容測試內容

2.函數文檔
>>> help(myfx)
Help on function myfx in module __main__:
myfx(name)    函數形式參數爲name

3.關鍵字參數  防止參數位置搞錯
>>> def saysome(name,words):
 print(name + '->' + words)

>>> saysome(words='寶寶心裏苦',name='小明')
小明->寶寶心裏苦
4.默認參數
 在函數定義的過程中,爲形式參數賦值
#需要注意的是,多次調用函數並且不爲默認值參數傳遞值時,默認值參數只在第一次調用時進行解釋。對列表、字典這樣複雜類型的默認值參數,這一點可能會導致很嚴重的邏輯錯誤。
 
5.收集參數(可變長度參數)
可變長度參數在定義函數時主要有兩種形式:*parameter和**parameter,前者用來接收任意多個實參並將其放在一個元組中,後者接收類似於關鍵參數一樣顯式賦值形式的多個實參並將其放入字典中
>>> def test(*part,extra=3):
 print('參數長度是:',len(part))
 print('第二個參數是:',part[1])
 print('eztra=',extra)
>>> test(10,'大羊駝',7,8,99)
參數長度是: 5
第二個參數是: 大羊駝
eztra= 3
>>> test(10,'大羊駝',7,8,99,extra=98)
參數長度是: 5
第二個參數是: 大羊駝
eztra= 98

>>> def demo(**p):
 for item in p.items():
  print item
>>> demo(x=1,y=2,z=3)
('y', 2)
('x', 1)
('z', 3)

#幾種不同類型的參數可以混合使用,但是不建議這樣做
>>> def func_4(a,b,c=4,*aa,**bb):
 print (a,b,c)
 print aa
 print bb
>>> func_4(1,2,3,4,5,6,7,8,9,xx='1',yy='2',zz=3)
(1, 2, 3)
(4, 5, 6, 7, 8, 9)
{'yy': '2', 'xx': '1', 'zz': 3}
>>> func_4(1,2,3,4,5,6,7,xx='1',yy='2',zz=3)
(1, 2, 3)
(4, 5, 6, 7)
{'yy': '2', 'xx': '1', 'zz': 3}



6.參數傳遞的序列解包
傳遞參數時,可以通過在實參序列前加星號將其解包,然後傳遞給多個單變量形參。
>>> def demo(a,b,c):
 print a+b+c
>>> seq=[1,2,3]
>>> demo(*seq)
6

7.變量作用域
#不要在函數內部修改全局變量(Python會在函數內部創建一個與全局變量名字相同的局部變量來保護全局變量)
#如果局部變量與全局變量有相同的名字,那麼該局部變量會在自己的作用域內隱藏同名的全局變量。
#在函數內定義的變量只在該函數內起作用,稱爲局部變量。
函數結束時,其局部變量被自動刪除。

在函數內部一般不要試圖修改全局變量,若要訪問,可使用global關鍵字
>>> count = 5
>>> def myfun():
 global count
 count = 10
 print(count)
 
>>> myfun()
10
>>> print(count)
10
如果想要在函數內部給一個定義在函數外的變量賦值,那麼這個變量就不能是局部的,其作用域必須爲全局的,能夠同時作用於函數內外,稱爲全局變量,可以通過global來定義。
(1)一個變量已在函數外定義,如果在函數內需要爲這個變量賦值,並要將這個賦值結果反映到函數外,可以在函數內用global聲明這個變量,將其定義爲全局變量。
(2)在函數內部直接將一個變量聲明爲全局變量,在函數外沒有聲明,在調用這個函數之後,將增加爲新的全局變量。
>>> def demo():
 global x
 x = 3
 y =4
 print x,y
>>> x = 5
>>> demo()
3  4
>>> x
3
>>> y
出錯
NameError: name 'y' is not defined
>>> del x
>>> x
出錯
NameError: name 'x' is not defined
>>> demo()
3  4
>>> x
3
>>> y
出錯
NameError: name 'y' is not defined



發佈了41 篇原創文章 · 獲贊 1 · 訪問量 3372
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章