必选参数:
def f(a,b):
return a+b
print(f(1,2)) 输出3 #有几个必须传几个
默认参数:
def f(a,b=100):
return a+b
print(f(1)) 输出101 # 1默认给a,b=100
print(f(1,2)) 输出3 #有值就传递,没有就不传
def f(a=100,b=200):
return a+b
print(f()) 输出300 #都有默认值可以不传
print(f(1)) 输出201 #默认给a赋值
print(f(b=2)) 输出102 #给b赋值
def f(a=1,b): #a为默认值
print('a=%s,b=%s'%(a,b))
f(200) 输出错误。
#默认值的参数一定写在非默认值参数的后面!
可变参数元祖:
将传入的参数,依次放入元组中
如果不传,得到空元组()
def f(*num):
print('a=%s'%str(num)) # %s是转化为字符串,所以加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为函数内置求和:
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],) #把这整个当成一个元祖
求和:
f1(*ls) 输出10
可变参数 字典:
调用传值的时候,键 = 值
键不要加单引号,值是任何类型
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':'老王'}
关键字参数:
def f(a,b):
print('a={0},b={1}'.format(a,b))
f(b=1,a=2)
参数的顺序
def f(a,b=1,*c,**d): #这个顺序
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}
全局和局部变量:
在函数之前,定义的所有的变量都是全局变量。一旦定义了,后面所有的地方一直访问使用。
在函数里定义的变量,都是局部变量,一旦函数运行完毕,局部变量就会被垃圾回收机制回收。
1、参数
2、在函数里直接定义的变量
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)) 输出