Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,str和int之间的哪种转换方式更快?_Python_Performance_Casting_Python 3.5 - Fatal编程技术网

在Python中,str和int之间的哪种转换方式更快?

在Python中,str和int之间的哪种转换方式更快?,python,performance,casting,python-3.5,Python,Performance,Casting,Python 3.5,假设我有几个数值变量将在整个代码中使用,比如int和str对象。所以我想知道,我应该使用哪种类型来存储它们 下面是一个例子: class Nums: a = 1 # stored as int b = '2' # stored as str print(int(Nums.b) + 5) # 7 print(str(Nums.a) + 'Hello') # 1Hello 如您所见,存储和示例使用有两种选择。但是用法不会像这里这样定义。例如,我将迭代类变量,并将它们连接在一

假设我有几个数值变量将在整个代码中使用,比如
int
str
对象。所以我想知道,我应该使用哪种类型来存储它们

下面是一个例子:

class Nums:
    a = 1  # stored as int
    b = '2'  # stored as str

print(int(Nums.b) + 5)  # 7
print(str(Nums.a) + 'Hello') # 1Hello
如您所见,存储和示例使用有两种选择。但是用法不会像这里这样定义。例如,我将迭代类变量,并将它们连接在一个字符串中,还将计算它们的乘积。因此,我应该在需要连接时将它们存储为
int
并转换为
str
,还是在乘法之前将它们存储为
str
并转换为
int

使用IPython的
%timeit
进行的一些简短研究表明,性能大致相同,
int
str
的速度稍微快一点:

In [3]: %timeit int('56')
The slowest run took 12.92 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 360 ns per loop

In [4]: %timeit str(56)
The slowest run took 8.36 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 353 ns per loop
我希望得到这样的结果,因为
str
调用实际上只调用对象的
\uuuu str\uuuu
方法,而将字符串作为数字读取可能更复杂。有什么真正的区别吗?背后的原因是什么


我说的是Python 3.5,尤其是

如果您的程序使用数值,您当然应该将它们存储为type
int
。数字类型几乎总是比字符串类型快,即使您的用例意味着字符串表示更快,其他好处也是值得的。举几个例子:

  • 你可以免费得到健康检查。如果有人试图在你的程序中输入“5”,如果你将其存储为整数,那么你会很早得到一个错误。如果您存储为字符串,那么您的错误可能更难解释
  • 任何拿起你的程序的人都希望数值以数字类型存储
  • 同样,将事物存储为数字类型几乎总是更快

我们讨论的是几个问题,真的不值得讨论imho@sirfz是的,这些ns不会对我的程序产生巨大的影响,但这里的问题更多的是关于更好的存储实践。什么更有效?为什么,不管我们实际获得了多大的效率,我的程序都使用数值和它们的字符串表示来进行字符串操作。“以数字类型存储东西几乎总是更快”是什么意思?对象访问速度更快吗?是的。字符串存储为对象,需要额外的解引用才能访问字符数组。整数没有这种开销。