必選參數(shù):
def f(a,b):
return a+b
print(f(1竭钝,2))? ? 輸出3 #有幾個(gè)必須傳幾個(gè)
默認(rèn)參數(shù):
def f(a,b=100):
return a+b
print(f(1))? ? 輸出101? # 1默認(rèn)給a,b=100
print(f(1,2))? 輸出3? #有值就傳遞,沒有就不傳
def f(a=100,b=200):
return a+b
print(f())? ? ? 輸出300 #都有默認(rèn)值可以不傳
print(f(1))? ? 輸出201? #默認(rèn)給a賦值
print(f(b=2))? 輸出102? #給b賦值
def f(a=1,b):? #a為默認(rèn)值
print('a=%s,b=%s'%(a,b))
f(200)? 輸出錯(cuò)誤安聘。
#默認(rèn)值的參數(shù)一定寫在非默認(rèn)值參數(shù)的后面干厚!
可變參數(shù)元祖:
將傳入的參數(shù),依次放入元組中
如果不傳,得到空元組()
def f(*num):
print('a=%s'%str(num)) # %s是轉(zhuǎn)化為字符串骆膝,所以加str為字符串
f(1)? ? 輸出a=1
f(1,2,3,4,5)? 輸出a=(1,2,3,4,5)
def f(*nums):
print(nums)
f(1,2,3,4,5)
f(100,110)
f(1111)
f([1,2,3],None,True,{'a':20})? # 傳遞任何類型都行
f()
求和 sum為函數(shù)內(nèi)置求和:
def f1(*args):
print(sum(args))
num1=100
num2=200
num3=30
f1(num1,num2,num3)? 輸出330
ls = [100,200,300]
f1(ls[0],ls[1],ls[2])? 輸出600
ls = [i for i in range(5)]? #元祖也可以
f(*ls)? 輸出(0,1,2,3,4)? #把所有值依次拿到
f(ls)? 輸出([0,1,2,3,4],)? #把這整個(gè)當(dāng)成一個(gè)元祖
求和:
f1(*ls)? 輸出10
可變參數(shù) 字典:
調(diào)用傳值的時(shí)候,鍵 = 值
鍵不要加單引號灶体,值是任何類型
def f(**kvs):
print(kvs)? ? 輸出 {'c':[1,2,3],'b':'abc','a':1}
#print(kvs[a])? 指定拿a傳過去
f(a=1,b='abc',c=[1,2,3])
infos={'sid':1,'sname':'老王'}
f(**infos)? 輸出{'sid':1,'sname':'老王'}
關(guān)鍵字參數(shù):
def f(a,b):
print('a={0},b={1}'.format(a,b))
f(b=1,a=2)
參數(shù)的順序
def f(a,b=1,*c,**d):? #這個(gè)順序
print(a)
print(b)
print(c)
print(d)
f(1,2,3,4,5,67,dd=100,bb=30)
輸出:
1
2
(3,4,5,67)
{'bb':30,'dd':100}
全局和局部變量:
在函數(shù)之前阅签,定義的所有的變量都是全局變量。一旦定義了蝎抽,后面所有的地方一直訪問使用政钟。
在函數(shù)里定義的變量,都是局部變量樟结,一旦函數(shù)運(yùn)行完畢养交,局部變量就會(huì)被垃圾回收機(jī)制回收。
1瓢宦、參數(shù)
2碎连、在函數(shù)里直接定義的變量
a = 100
print('a={0}'.format(a))? 輸出a=100
for i in range(100):
pass
print(i)? 輸出99
def f():
a=200
f()
print('a={0}'.format(a))? 輸出