python之函数参数

python之函数参数

为啥写这个,因为看了一下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

注:位置参数 和 可选参数 以及 过量位置参数 不可以在 过量关键字参数后面

即: 过量关键字参数必须是最后一位

常用的顺序

  • 位置参数 可选参数 过量位置参数 过量关键字参数
  • 位置参数 过量位置参数 可选参数 过量关键字参数
  • 可选参数 位置参数 过量位置参数 过量关键字参数
  • 过量位置参数 可选参数 过量关键字参数
  • 过量位置参数
  • 过量关键字参数
  • 可选参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值