美文网首页Python
函数的常用参数定义及返回

函数的常用参数定义及返回

作者: cook__ | 来源:发表于2018-10-04 13:06 被阅读8次
    问题1:我们想编写一个可接受任意数量参数的函数
    解决方案:

    1、要编写一个可接受任意数量的位置参数的函数,可以使用以*开头的参数

    def avg(first, *rest):
        """ rest是一个元组 """
        return (first + sum(rest)) / (1 + len(rest))
    
    print(avg(2))
    print(avg(1, 2, 3))
    
    2.0
    2.0
    

    2、要接受任意数量的关键字参数,可以使用开头的参数;
    3、如果要函数能同时接受任意数量的位置参数和关键字参数,需要联合使用
    *

    def anyargs(*args, **kwargs):
        print(args)  # 元组
        print(kwargs)  # 字典
    
    注意:

    打头的参数只能作为最后一个位置参数出现;而以*打头的参数只能作为最后一个参数出现

    问题2:我们希望函数只通过关键字的形式接受特定的参数
    解决方案:将关键字参数位置放在以打头的参数或者是一个单独的之后
    def recv(maxsize, *, block):
        'Receives a message'
        pass
    
    # recv(1024, True) # TypeError: recv() takes 1 positional argument but 2 were given
    recv(1024, block=True)
    
    总结:

    1、当指定可选参数的时,keyword-only参数方式可读性更高;
    2、在有关**kwagrs的技巧中,使用keyword-only参数常常也是可取的。

    问题3:将元数据信息附加到函数参数上
    def add(x: int, y: int) -> int:
        """
        1、注解仅仅是提示的作用;
        2、通常只有类和字符串才显得最有意义;
        """
        return x + y
    
    问题4:定义带有默认参数的函数:想定义一个函数,其中一个或多个参数是可选的并且带有默认值
    注意事项:

    1、参数默认值已经在函数定义的时候就确定好了

    x = 1
    def spam(a, b=x):
        print(a, b)
    spam(1)  # 1,1
    x = 2  # 修改变量x的值并没有对函数产生任何效果
    spam(1)  # 1,1
    

    2、给默认参数赋值的应该总是不可变对象,比如:None, True, False、数字或者字符串。
    如果默认参数是个可变的对象,下面示例展示出产生的问题:

    def spam(a, b=[]):
      return b
    x = spam(1)
    print(x)
    x.append(99)  # 修改了返回值得内容
    print(x)
    print(spam(1))  # [99]
    
    # 解决方案:
    def spam(a, b=None):
      if b is None: # 不要使用not b的语法(因为'', 0这些都会导致这个条件成立)
          b = []
    
    问题5:我们想从函数中返回多个值
    解决方案:只要简单的返回一个元组即可
    def myfun():
        """ 返回了一个元组 """
        return 1, 2, 3
    

    相关文章

      网友评论

        本文标题:函数的常用参数定义及返回

        本文链接:https://www.haomeiwen.com/subject/sbjtaftx.html