實際參數argument 輸入值
>>> def saysome(name,words):
print(name + '->' + words)
>>> saysome(words='寶寶心裏苦',name='小明')
小明->寶寶心裏苦
在函數定義的過程中,爲形式參數賦值
可變長度參數在定義函數時主要有兩種形式:*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
#不要在函數內部修改全局變量(Python會在函數內部創建一個與全局變量名字相同的局部變量來保護全局變量)
#如果局部變量與全局變量有相同的名字,那麼該局部變量會在自己的作用域內隱藏同名的全局變量。
#在函數內定義的變量只在該函數內起作用,稱爲局部變量。
函數結束時,其局部變量被自動刪除。
>>> count = 5
>>> def myfun():
global count
count = 10
print(count)
>>> myfun()
10
>>> print(count)
10
>>> 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