我想知道我是否有函数
def f(*args):
print(*args)
如果我这样运行,我是否可以保证处理论点的顺序?我知道C 不能保证这样的订单。
>>> d = {1:2, 3:4, 5:6, 7:8}
>>> f(d.pop(1), d.pop(3), {k:v for k, v in d.items()})
2 4 {5: 6, 7: 8}
如果参数是故障处理的,我们可能会得到
2 4 {1:2, 3:4, 5:6, 7:8}
或
2 4 {1:2, 5:6, 7:8}
或
2 4 {3:4, 5:6, 7:8}
这似乎有效,但是我不确定这只是Cpython还是Python标准的效果。我似乎无法找到有关此文档的文档。
*args
将以您发送的顺序进行,这是由语言保证的。功能参数也从左到右评估,这是由语言保证的。Python必须对此做出一些的选择,否则对一个参数的评估可以突变另一个论点并导致未指定的行为。
您可以依靠问题中描述的行为:
2 4 {5: 6, 7: 8}
但是,请注意以下结果也是有效的Python输出。尽管由于有关dict
和int
的某些实现细节,您不太可能在Cpython中看到它。
2 4 {7: 8, 5: 6}
与C和C 不同,Python保证对函数参数从左到右评估。您可以确定pop
的呼叫将在DICE理解之前运行。
6.15。评估顺序
Python评估从左到右的表达式。请注意,在评估作业时,右侧 在左侧进行评估。
在以下几行中,表达式将在 后缀的算术顺序:
expr1, expr2, expr3, expr4 (expr1, expr2, expr3, expr4) {expr1: expr2, expr3: expr4} expr1 + expr2 * (expr3 - expr4) expr1(expr2, expr3, *expr4, **expr5) expr3, expr4 = expr1, expr2