gpt4 book ai didi

python - python中元组拆包的语义

转载 作者:IT老高 更新时间:2023-10-28 22:12:11 26 4
gpt4 key购买 nike

为什么python在函数调用中只允许命名参数跟随元组解包表达式?

>>> def f(a,b,c):
... print a, b, c
...
>>> f(*(1,2),3)
File "<stdin>", line 1
SyntaxError: only named arguments may follow *expression

这仅仅是一种审美选择,还是在某些情况下允许这样做会导致一些歧义?

最佳答案

我很确定人们“自然”不喜欢这个的原因是因为它使后面的论点的含义模棱两可,具体取决于插值序列的长度:

def dangerbaby(a, b, *c):
hug(a)
kill(b)

>>> dangerbaby('puppy', 'bug')
killed bug
>>> cuddles = ['puppy']
>>> dangerbaby(*cuddles, 'bug')
killed bug
>>> cuddles.append('kitten')
>>> dangerbaby(*cuddles, 'bug')
killed kitten

仅查看对 dangerbaby 的最后两个调用,您无法判断哪一个按预期工作,哪一个杀死了小猫绒毛。

当然,在最后进行插值时也会出现一些不确定性。但混淆仅限于插值序列 - 它不会影响其他参数,例如 bug.

[我快速搜索了一下是否可以找到任何官方信息。似乎 varags 的 * 前缀是 introduced in python 0.9.8 .前面的语法是 discussed here它的工作规则相当复杂。由于在没有 * 标记的情况下“必须”添加额外的参数,因此似乎只是延续了。终于有 mention here不是通过电子邮件就参数列表进行的长时间讨论。]

关于python - python中元组拆包的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10725322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com