gpt4 book ai didi

python - 下面两个语句有什么区别?

转载 作者:行者123 更新时间:2023-11-28 21:46:40 24 4
gpt4 key购买 nike

x = func(*(xa,) + args)
y = func(*((xc,) + args))

其中 args 是一个数组,函数定义是:

def func(lamb, data):
# statements

我了解了 *args,但我找不到这些行之间的确切区别。

最佳答案

唯一的区别是多了一组括号,一个使用xa,另一个使用xc,但即便如此也没有太大区别to the byte code ,看看:

# python 2 needs to use dis.dis(compile("func(*(xa,)+args)","","eval"))
# to get same result, see http://stackoverflow.com/questions/12673074/how-should-i-understand-the-output-of-dis-dis
>>> dis.dis("func(*(xa,)+args)")
1 0 LOAD_NAME 0 (func)
3 LOAD_NAME 1 (xa)
6 BUILD_TUPLE 1
9 LOAD_NAME 2 (args)
12 BINARY_ADD
13 CALL_FUNCTION_VAR 0 (0 positional, 0 keyword pair)
16 RETURN_VALUE
>>> dis.dis("func(*((xc,)+args))")
1 0 LOAD_NAME 0 (func)
3 LOAD_NAME 1 (xc)
6 BUILD_TUPLE 1
9 LOAD_NAME 2 (args)
12 BINARY_ADD
13 CALL_FUNCTION_VAR 0 (0 positional, 0 keyword pair)
16 RETURN_VALUE

这是precedence的简单事,添加优先于 * 解包(CALL_FUNCTION_VAR 是使用的确切字节码)所以添加括号不会改变任何东西,就像这里一样:

3 * 5 + 1

乘法将首先发生,因此在其周围添加括号:

(3 * 5) + 1

不会改变将要发生的事情。


另请注意,在解包参数时不必将元组加在一起,您可以轻松地做到:

func(xa, *args)

实现相同的结果而不必将元组加在一起(这将在 args 不是元组的情况下起作用,因为您的版本会引发 TypeError)

关于python - 下面两个语句有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37608192/

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