假设某些函数总是得到一些它不使用的参数。
def someFunc(s):
# do something _not_ using s, for example
a=1
现在考虑这个电话
someFunc("the unused string")
它给出一个字符串作为参数,该参数不是在运行时构建的,而是直接编译成二进制文件(希望是正确的)。
问题是:当以这种方式调用someFunc时,例如,数千次,对“未使用的字符串”的引用总是被传递但是这会减慢程序的速度吗?
在我天真的想法中,我会说“未使用的字符串”的引用是“常量”,并且当调用someFunc时,在O(1)中可用。所以我会说'不,这不会影响表现'。
和以前一样的问题:“我是对的吗?”
感谢一些人: - )
答案 0 :(得分:2)
每次都会传递字符串(通过引用),但是开销太小而不能真正影响性能,除非它处于超紧密循环中。
答案 1 :(得分:1)
这是CPython的一个实现细节,可能不适用于其他pythons但是,在很多情况下,在编译模块中,常量字符串将引用同一个对象,从而最大限度地减少了开销。
一般来说,即使它没有,你也不应该担心它,因为与其他事情相比,它可能在不知不觉中微不足道。
但是,这里有一段有趣的代码:
>>> def somefunc(x):
... print id(x) # prints the memory address of object pointed to by x
...
>>>
>>> def test():
... somefunc("hello")
...
>>> test()
134900896
>>> test()
134900896 # Hooray, like expected, it's the same object id
>>> somefunc("h" + "ello")
134900896 # Whoa, how'd that work?
这里发生的是python保持全局字符串查找,在许多情况下,即使连接两个字符串,如果值匹配,您将获得相同的对象。
请注意,这是一个实现细节,您不应该依赖它,因为来自以下任何内容的字符串:文件,套接字,数据库,字符串切片,正则表达式或任何C模块都不能保证具有此属性。但它仍然很有趣。