*在Python中和在C中一样有特殊含义吗?我在Python Cookbook中看到了这样一个函数:

def get(self, *a, **kw)

请你给我解释一下,或者指出我在哪里可以找到答案(谷歌将*解释为通配符,因此我找不到满意的答案).

推荐答案

参见语言参考中的Function Definitions.

如果表格*identifier

另请参见Function Calls.

假设知道位置参数和关键字参数是什么,下面是一些示例:

例1:

# Excess keyword argument (python 2) example:
def foo(a, b, c, **args):
    print "a = %s" % (a,)
    print "b = %s" % (b,)
    print "c = %s" % (c,)
    print args

foo(a="testa", d="excess", c="testc", b="testb", k="another_excess")

正如您在上面的示例中所看到的,foo函数的签名中只有参数a, b, c.由于dk不存在,它们被放入args字典.该程序的输出为:

a = testa
b = testb
c = testc
{'k': 'another_excess', 'd': 'excess'}

示例2:

# Excess positional argument (python 2) example:
def foo(a, b, c, *args):
    print "a = %s" % (a,)
    print "b = %s" % (b,)
    print "c = %s" % (c,)
    print args

foo("testa", "testb", "testc", "excess", "another_excess")

这里,因为我们正在测试位置参数,多余的参数必须在末尾,*args个将它们打包成一个元组,所以这个程序的输出是:

a = testa
b = testb
c = testc
('excess', 'another_excess')

您还可以将字典或元组解压缩为函数的参数:

def foo(a,b,c,**args):
    print "a=%s" % (a,)
    print "b=%s" % (b,)
    print "c=%s" % (c,)
    print "args=%s" % (args,)

argdict = dict(a="testa", b="testb", c="testc", excessarg="string")
foo(**argdict)

输出:

a=testa
b=testb
c=testc
args={'excessarg': 'string'}

def foo(a,b,c,*args):
    print "a=%s" % (a,)
    print "b=%s" % (b,)
    print "c=%s" % (c,)
    print "args=%s" % (args,)

argtuple = ("testa","testb","testc","excess")
foo(*argtuple)

输出:

a=testa
b=testb
c=testc
args=('excess',)

Python相关问答推荐

如何计算两极打印机中 * 所有列 * 的出现次数?

大Pandas 胚胎中产生组合

使用新的类型语法正确注释ParamSecdecorator (3.12)

标题:如何在Python中使用嵌套饼图可视化分层数据?

运行Python脚本时,用作命令行参数的SON文本

有症状地 destruct 了Python中的regex?

在Python Attrs包中,如何在field_Transformer函数中添加字段?

scikit-learn导入无法导入名称METRIC_MAPPING64'

如何让程序打印新段落上的每一行?

django禁止直接分配到多对多集合的前端.使用user.set()

从groupby执行计算后创建新的子框架

无法使用requests或Selenium抓取一个href链接

导入...从...混乱

剪切间隔以添加特定日期

使用__json__的 pyramid 在客户端返回意外格式

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

查找数据帧的给定列中是否存在特定值

VSCode Pylance假阳性(?)对ImportError的react

如何在Python中实现高效地支持字典和堆操作的缓存?

Groupby并在组内比较单独行上的两个时间戳