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

问题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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值