我有两个名为a
和b
的数值。
我想将名称low
分配给较小的值,将名称high
分配给较大的值
做这件事的蟒蛇方式是什么?
我考虑过
low, high = sorted([a, b])
但这似乎有些过头了。
为什么它会被高估?sorted
具有明确、高效、简洁的特点。
只需使用:low, high = sorted([a, b])
谈到Python的和性能,您可以编写low, high = sorted((a, b))
,因为元组几乎总是比列表更具性能,但这实际上是一个微观优化。
除了调用BUILD_UPLE而不是BUILD_LIST之外,没有什么区别。
证据如下:
import dis
import timeit
print("list:")
dis.dis("low, high = sorted([a, b])")
print( timeit.timeit("[a, b]", setup="a,b=1,'x'", number=10000000) )
print("-"*60)
print("tuple:")
dis.dis("low, high = sorted((a, b))")
print( timeit.timeit("(a, b)", setup="a,b=1,'x'", number=10000000) )
输出:
list:
1 0 LOAD_NAME 0 (sorted)
2 LOAD_NAME 1 (a)
4 LOAD_NAME 2 (b)
6 BUILD_LIST 2
8 CALL_FUNCTION 1
10 UNPACK_SEQUENCE 2
12 STORE_NAME 3 (low)
14 STORE_NAME 4 (high)
16 LOAD_CONST 0 (None)
18 RETURN_VALUE
0.47138820000000003
------------------------------------------------------------
tuple:
1 0 LOAD_NAME 0 (sorted)
2 LOAD_NAME 1 (a)
4 LOAD_NAME 2 (b)
6 BUILD_TUPLE 2
8 CALL_FUNCTION 1
10 UNPACK_SEQUENCE 2
12 STORE_NAME 3 (low)
14 STORE_NAME 4 (high)
16 LOAD_CONST 0 (None)
18 RETURN_VALUE
0.3673789999999999
相关:在Python中,元组比列表更有效率吗?
您可以使用三元条件表达式和元组拆包。
low, high = (a, b) if a < b else (b, a)