【问题标题】:Why assigning value to str won't throw SyntaxError like it does for True/False?为什么给 str 赋值不会像 True/False 那样抛出 SyntaxError?
【发布时间】:2019-01-17 13:53:48
【问题描述】:

在 Python 中有内置函数 str 可以转换为字符串。 但是当我给str 赋值时,我就不能再使用这个函数了。 我希望 Python 不允许重载 Python 保留字。不? (好像我做不到True = False

>>> i = 12
>>> str(i)
'12'
>>> str = "test"
>>> print(str)
test
>>> str(i)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable
>>> True = False
  File "<stdin>", line 1
SyntaxError: can't assign to keyword
>>>

我知道最好不要使用保留字。 不过,我想知道我是否错过了什么。

我预计 Python 会抛出 SyntaxError。 在那之后就不能使用str函数了。

【问题讨论】:

  • 恐怕您的期望是基于错误的前提,即str(就像其他内置类型和函数一样)是保留字。它不是,所以你不应该期望在这里出现 SyntaxError。

标签: python python-3.x keyword built-in


【解决方案1】:

str 不是保留字,它是一个恰好内置的普通函数。TrueFalse 是关键字(从 Python 3 开始)。

Python 3 关键字的完整列表在the language reference

False      await      else       import     pass
None       break      except     in         raise
True       class      finally    is         return
and        continue   for        lambda     try
as         def        from       nonlocal   while
assert     del        global     not        with
async      elif       if         or         yield

【讨论】:

    【解决方案2】:

    你总是可以通过他们的包访问内置的

    import builtins
    
    str = 9
    print(builtins.str(str))
    >>> '9'
    str(9)
    >>>TypeError: 'int' object is not callable
    

    也就是说,覆盖内置函数并不是一个好习惯 - 这对于在您之后使用代码的开发人员来说可能会非常混乱

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 2014-11-05
      相关资源
      最近更新 更多