Python函数/方法中无后缀*参数的含义是什么?
Python中函数/方法里无后缀
*参数的含义 嘿,这个问题问得很精准!我来给你把这个Python语法讲明白~
在Python 3里,函数定义中单独的*是一个强制关键字参数的分隔标记,它的核心作用是:要求*之后的所有参数,必须以关键字参数的形式传递,不能用位置参数来传。
举个简单例子快速理解
比如我们定义这样一个函数:
def calculate(a, *, b, c): return a + b * c
- 正确调用:
calculate(2, b=3, c=4),b和c必须用关键字指定 - 错误调用:
calculate(2, 3, 4),直接传位置参数会抛出TypeError,因为*之后的参数不接受位置传递
回到你提到的Django场景
你看到的get_context_data方法:
def get_context_data(self, *, object_list=None, **kwargs): return super().get_context_data(object_list, **kwargs)
这里的*就是用来强制object_list必须以关键字参数的形式传入。比如调用这个方法时,你必须写get_context_data(object_list=my_data_list, **some_kwargs),不能把object_list放在位置参数的位置。
Django团队这么设计,是为了避免参数传递时的混淆——毕竟类视图的方法参数可能会有调整,强制关键字参数能让代码更清晰,也减少了因为参数位置变化导致的bug。
和*args的核心区别
你已经了解*args,这里再明确下差异:
*args是用来接收任意数量的位置参数,把它们打包成一个元组- 单独的
*不接收任何参数,只是一个分隔符,用来限制后续参数的传递方式
内容的提问来源于stack exchange,提问作者Hadi Farhadi
相关产品推荐
相关产品推荐

