zoukankan      html  css  js  c++  java
  • python收集参数

    最近学习python,看《Python基础教程》(第2版),发现函数定义里面有一个“收集参数”很有趣。

    用户定义函数时,可以定义一个确定参数数量的函数,如:

    >>> store(data, name1, name2, name3)

    但是假如定义前不知道有多少个参数,该如何定义呢,C++和java中都有相应的解决方法,python中自然也有

    def print_params(*params):
        print(params)

    这里参数前面加上了星号*,即是不确定数量的参数,调用方式如下:

    >>> print_params('Testing')
    ('Testing',)
    >>> print_params(1, 2, 3)
    (1, 2, 3)
    >>> print_params()
    ()

    从上面的三个例子可以看出,使用*作为不确定数量参数,输入参数为元组类型

    这种方法为啥叫收集参数呢?因为它收集所有其余位置参数,这样其实说明,它只能在参数末尾进行收集,而不能在开头或者中间收集

    除了收集散列的参数,还可以收集key-value字典类型的参数,例如:

    def print_params_3(**params):
        print(params)

    调用方式:

    >>> print_params_3(x=1, y=2, z=3)
    {'z': 3, 'x': 1, 'y': 2}

    二者一起用:

    print_params_4(x, y, z=3, *pospar, **keypar):
        print(x, y, z)
        print(pospar)
        print(keypar)

    调用方式;

    >>> print_params_4(1, 2, 3, 4, 5, 6, 7, foo=1, bar=2)
    1 2 3
    (5, 6, 7)
    {'foo' : 1, 'bar' : 2}
    >>> print_params_4(1,2)
    1 2 3
    ()
    {}

    参数收集的逆过程:

    函数参数使用*号收集得到元组,使用**收集得到字典,那么反过来使用元组和字典可以作为函数参数

    def add(x,y):
        return x+y

    >>> params = (1, 2)
    >>> add(*params)
    3
  • 相关阅读:
    sql server的for xml path与变通的行转列
    nginx产生【413 request entity too large】错误的原因与解决方法
    spring的15个经典面试题
    数据库死锁预防规范
    服务端高并发分布式架构的演进
    后端接口统一返回响应对象
    数据库的dml、ddl和dcl的概念
    [na]ip routing&no ip routing
    [na]一站式学习wireshark
    [na]tcpdump参数应用参考
  • 原文地址:https://www.cnblogs.com/lxx-coder/p/10099939.html
Copyright © 2011-2022 走看看