Python只支持“共享传参”,即传递的是引用的一个副本,函数中对形参的修改,直接作用于引用对象。(Python的变量本质是对对象的引用标记),C++语言则是默认复制数据副本,要达到Python的共享传参的效果,采用指针形参传递地址,或者采用&。
例如:
def share(c):
c[0]=3
a=[1]
b=a
print(a)
print(b)
share(c)
print(a)
print(b)
结果:
[1]
[1]
[3]
[3]
可以看出,a,b都是指向同一个List对象,而传给share()函数之后,形参c也是指向这个List对象,所有的操作都是在这个对象之上操作,这就是共享传参的含义。
形参的传递形式
了解了python传参的本质,下面学习传参形式的约定
最简单的,对应位置传参:
比如上个例子的share(c),就是声明要传入一个形参c,如果
share(c=1),则在没有传入c时,c默认赋值1
可变参数传参:
如果不确定要传入的参数数量,则要采用可变参数传参,在形参前面加,注意这个只是一种可变参数的标识,和C中的用法不一样。带有*的参数视为列表。
def share(*num):
for i in num:
print(i)
share(1,2,3)
#result
1
2
3
关键字参数
可变参数是一个列表,关键字参数是一个key-value的字典,用**标识
def share(**d):
for key in d:
print(key,d[key])
share(a=1,b=2,c=3)
#result
a 1
b 2
c 3
拓展
命令行参数的读入一般采用argparse库,后续补充