关键字参数
可以指明参数名称,不需要严格按照顺序。
def mySum(num1, num2):
print(num1, num2)
mySum(num2 = 5, num1 = 6)
6 5
不定长参数
*args
函数体中可以直接以元组变量的方式使用该参数
def mySum(*t):
print(t, type(t))
result = 0
for v in t:
result += v
print(result)
mySum(4, 5, 6)
(4, 5, 6) <class ‘tuple’>
15
**dic
函数体中可以直接以字典变量的方式使用该参数
以关键字参数来使用。
def mySum(**kwargs):
print(kwargs, type(kwargs))
mySum(name='sz', age=12)
{‘name’: ‘sz’, ‘age’: 12} <class ‘dict’>
参数拆包
装包: 把传递的参数,包转成一个集合
拆包:把集合参数再次分解为单独的个体
def mySum(a, b, c, d):
print(a + b + c + d)
def test(*args):
print(args)
# 拆包
print(*args)
mySum(*args)
test(1, 2, 3, 4)
(1, 2, 3, 4)
1 2 3 4
10
PS
def mySum(a, b):
print(a + b)
def test(**kwargs):
print(kwargs)
# 拆包
mySum(**kwargs)
test(a=1, b=2)
{‘a’: 1, ‘b’: 2}
3
缺省参数
某个数据是默认值
def hit(sombody='dd'):
print(sombody)
hit()
dd
值传递和引用传递
值传递:传递过来的是一个数据的副本
引用传递:传递过来的是一个变量的地址
在python中只有引用传递(地址传递)。如果数据类型是可变类型,则可以改变原件。如果数据类型是不可变类型,则不可以改变原件。
def change(num):
print(id(num))
num = 666
print(id(num))
b = 10
print(id(b))
change(b)
print(b)
1855677760
1855677760
61872112
10
def change(num):
print(id(num))
num.append(666)
print(id(num))
b = [1, 2, 3]
print(id(b))
change(b)
print(b)
67832168
67832168
67832168
[1, 2, 3, 666]
返回值
def caculate(a, b):
he = a + b
cha = a - b
return (he, cha)
he, cha = caculate(6, 7)