gpt4 book ai didi

python - 依赖 Python 函数参数评估顺序是否安全?

转载 作者:IT老高 更新时间:2023-10-28 22:14:43 27 4
gpt4 key购买 nike

假设函数参数在 Python 中从左到右计算是否安全?

引用说明它是这样发生的,但也许有一些方法可以改变这个顺序,这可能会破坏我的代码。

我要做的是为函数调用添加时间戳:

l = []
l.append(f(), time.time())

我知道我可以按顺序评估参数:

l = []
res = f()
t = time.time()
l.append(res, t)

但它看起来不太优雅,所以如果我可以依赖它,我更喜欢第一种方式。

最佳答案

引自 reference documentation :

Python evaluates expressions from left to right.

所以是的,你可以指望这一点(有一个异常(exception),见下文)。

一个调用(主后的(...)部分,例如函数名)只是另一个expression primary , 调用的参数只是更多的表达式。

注意:此规则有一个异常(exception)。当在调用中使用 *expression 时(扩展一个可迭代对象以形成额外的位置参数),那么这个表达式在任何关键字参数表达式之前被计算:

>>> from itertools import count
>>> def bar(n, r=(), c=count()): print(f'{next(c)}: bar({n!r})'); return r
...
>>> def foo(*args, **kwargs): pass
...
>>> foo(bar('a1'), spam=bar('a2'), *bar('varargs'), **bar('kwargs', {}))
0: bar('a1')
1: bar('varargs')
2: bar('a2')
3: bar('kwargs')

链接的文档指出:

A consequence of this is that although the *expression syntax may appear after explicit keyword arguments, it is processed before the keyword arguments[.]

关于python - 依赖 Python 函数参数评估顺序是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17948369/

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