为啥写这个,因为看了一下subprocess源码,发现里面函数参数的不一样的用法,so,想搞一下。
def run(*popenargs,
input=None, capture_output=False, timeout=None, check=False, **kwargs)
之前我了解的函数参数使用顺序是:
- 位置参数(requireParameter)
- 可选参数(optionalParameter)或 默认参数
- 过量位置参数(excessPositionParameter)
- 过量关键字参数(excessKeyParameter)
之前看到的是:
#
def foo(requireParameter,optionalParameter=True,*excessPositionParameter,**excessKeyParameter):
print("all")
#常用的形式,主要是后两个
def foo(require,optional = True , *args, **kwargs ):
print("all")
参数分类
-
位置参数(requireParameter)
def foo(val,val2,val3): print("这些都是位置参数")
-
可选参数(optionalParameter)或 默认参数
def foo(val=1,val2="1",val3=True,val4=[]): print("这些都是可选参数或默认参数")
-
过量位置参数(excessPositionParameter)
def foo(*args): print(args) # foo(1,2,3,4,'1,','w') #show (1, 2, 3, 4, '1,', 'w') # 返回的是一个元组
-
过量关键字参数(excessKeyParameter)
def foo(**kwargs): print(kwargs) foo(key = "value",key1=[1,2,3],key3={"keys":"values"}) #{'key': 'value', 'key1': [1, 2, 3], 'key3': {'keys': 'values'}} #返回的是一个字典
多变的函数参数——正戏
normal
#常用的形式,主要是后两个
def foo(require,optional = True , *args, **kwargs ):
print("all")
"""
位置参数
可选参数
过量位置参数
过量关键字参数
"""
special one
def sepcial_one(require,*args,optional=True,**kwargs):
"""
:param require: 位置参数
:param args: 过量位置参数
:param optional:可选参数
:param kwargs:过量的键值参数
:return: None
"""
print("位置参数 %d;\n可选参数 %s;\n过量位置参数 %s;\n过量的键值参数 %s"%
(require,optional,args,kwargs))
sepcial_one(1138,
"my key","second",3,[4,5,6],{'six':7},
optional=False,
key1='value1',key2=[8],key3={'nine':9})
"""
结果:
位置参数 1138;
可选参数 False;
过量位置参数 ('my key', 'second', 3, [4, 5, 6], {'six': 7});
过量的键值参数 {'key1': 'value1', 'key2': [8], 'key3': {'nine': 9}}
"""
special two
def sepcial_two(*args,require,optional=True,**kwargs):
"""
当位置参数在 过量位置参数之后,
:param require: 位置参数
:param args: 过量位置参数
:param optional:可选参数
:param kwargs:过量的键值参数
:return: None
"""
print("位置参数 %d;\n可选参数 %s;\n过量位置参数 %s;\n过量的键值参数 %s"%
(require,optional,args,kwargs))
#输入 位置参数的方式 就变成了的可选参数的
sepcial_two(
"my key","second",3,[4,5,6],{'six':7},
require=1138,
optional=False,
key1='value1',key2=[8],key3={'nine':9})
"""
结果:
位置参数 1138;
可选参数 False;
过量位置参数 ('my key', 'second', 3, [4, 5, 6], {'six': 7});
过量的键值参数 {'key1': 'value1', 'key2': [8], 'key3': {'nine': 9}}
"""
def sepcial_twoP1(*args,val,val2,val3):
"""
这个后面的位置参数 ,输入就变成了 必须 val= xx 的样式,但这是必须要输入的,
不输入会报错的。
感觉没啥卵用
"""
print(args,val,val2,val3)
sepcial_twoP1("112",12,val=2,val2=3,val3=4)
end
==注:==位置参数 和 可选参数 以及 过量位置参数 不可以在 过量关键字参数后面
==即:== 过量关键字参数必须是最后一位
常用的顺序
- 位置参数 可选参数 过量位置参数 过量关键字参数
- 位置参数 过量位置参数 可选参数 过量关键字参数
- 可选参数 位置参数 过量位置参数 过量关键字参数
- 过量位置参数 可选参数 过量关键字参数
- 过量位置参数
- 过量关键字参数
- 可选参数