您可以将splat参数放在中间而不是最后(似乎仅在python 3中:]]
import functools def wierd_sum(use_str_cat=False, *args, use_product=False): if use_str_cat: return ''.join([str(a) for a in args]) elif use_product: return functools.reduce(lambda a,b : a*b, args) else: return functools.reduce(lambda a,b : a+b, args)
现在如何使用所说的功能?
print(wierd_sum(1, 2, 3)) # 23 -> Concatenation, 1 counts as True. print(wierd_sum(False, 2, 3, 4, 5, True)) # 15 -> Addition, True counts as 1. print(wierd_sum(False, 2, 3, 4, 5, use_product=True)) # 120 -> Multiplication 2*3*4*5 print(wierd_sum(use_str_cat=True, 1, 2, 3)) # SyntaxError: positional argument follows keyword argument. print(wierd_sum(1, 2, 3, use_str_cat=False)) # TypeError: wierd_sum() got multiple values for argument 'use_str_cat'
我的问题是,有[
您可以将splat参数放在中间而不是结尾(似乎仅在python 3中:导入functools def wierd_sum(use_str_cat = False,* args,use_product = False):如果use_str_cat:...,EVER做这种事情的理由吗?
但是理想情况下,除非您实际需要varargs,否则应省略名称以禁止提供varargs: