所以我看到了很多。人们称他们的词典dict
,他们的列表list
,等等。我知道这是不赞成的,因为它会覆盖Python中的内置值。
问题是,为什么这不会引发异常?我看到很多人都说从不这样做,但为什么不是错误呢?我能得出的唯一结论是,有一段时间需要发生这种事情。
那么,在什么情况下,有人可以通过覆盖内置来获得编程优势?或者,如果我的结论是错误的,为什么不存在对这种覆盖的保护?
答案 0 :(得分:4)
让我们说我们这样做。然后,您需要考虑重新定义自己的函数时会发生什么:
from mymodule import func
def func(): # is this allowed?
pass
func() # should this now fail?
因此,Python会如何处理从您自己的函数中覆盖内置函数的方式。我认为重新定义自己的函数是公平的,为什么内置函数会有所不同?
允许人们重新定义内置插件和您自己的功能可能更好。这使Python变得简单,它为开发人员编写代码提供了灵活性。
答案 1 :(得分:1)
Builtins只是全局命名空间中的名称,因此同样的规则适用于导入命名空间的任何其他非内置函数。现在考虑如果将新名称添加到导入的模块,或者添加了新的内置,其名称已在代码中使用,会发生什么。
使用当前规则,您的代码仍然有效,但如果您想修改它以使用新名称,则必须明确写入module.name
或__builtin__.name
。
如果规则是它引发了异常,那么在您更改对该名称的所有引用之前,您的代码将立即停止工作。
我认为第一种情况更可取。
当然,这并不总是一个错误。能够将自己的函数或对象注入代码的其他部分是动态语言设计的一部分,如python。