如何修复str的重新定义?

J0e*_*gan 4 python string

尝试使用Python解释器,我无意中分配了一个字符串,str如下所示:

str = 'whatever'
Run Code Online (Sandbox Code Playgroud)

后来在同一场会议上,我打电话给另一个声明str(),说......

double_whatever = str(2) + ' * whatever'
Run Code Online (Sandbox Code Playgroud)

...,并得到错误TypeError: 'str' object is not callable(而不是预期的输出'2 * whatever').一个相关的SO答案帮助我快速看到了我犯的错误.

但是,我仍然不清楚如何str()在受影响的会话中修复呼叫.当然我可以退出Python解释器并启动另一个会话,但我很好奇如何避免这种情况.

到目前为止,我已确认......

double_whatever = __builtins__.str(2) + ' * whatever'  # => '2 * whatever'
Run Code Online (Sandbox Code Playgroud)

...仍然像我想要的那样工作; 但我不清楚如何回到不需要__builtins__.资格.

如何修复我无意识的重新定义,str以便我str()在Python-interpreter会话中的调用再次起作用?

sat*_*oru 9

只需删除覆盖str:

del str
Run Code Online (Sandbox Code Playgroud)

阅读http://www.diveintopython.net/html_processing/locals_and_globals.html,了解Python如何为您找到变量.

其基本思路是,在这里你定义变量的命名空间首先搜索,因此,如果你定义一个名称的变量str,在built-in一个被覆盖.

  • 你打败我赢得一些简单的积分.:) (5认同)
  • @ J0e3gan我已经更新了答案并添加了从Dive到Python的相关章节的链接. (2认同)