在Python中,使用默认行为,如果要从加载的包fun
中使用函数package
,则在调用它时必须将其指定为属于某个新的/不同的命名空间,即package.fun()
。如果你已安装但未加载包,则根本无法调用该功能(据我所知)。
在R中,使用默认行为,如果要使用加载包fun
中的函数package
,则可以使用全局命名空间而不会出现任何问题,即fun()
调用{{ 1}}。如果软件包已安装但未加载,您可以仍然通过指定新的/不同的名称空间来调用它,即fun
。
问题:如果管理已安装软件包中的命名空间的一种方法比另一种更好,那么为什么两种编程语言都不会使用相同的默认行为?
我看过很多人都说默认的Python命名空间行为很棒,但我从未见过有人使用R感觉有必要捍卫R的默认行为,即使它与默认行为有很大不同Python应该很棒。
可能不同之处在于没有CRAN的Python版本?作为初学者,我真的不知道这是如何相关的,但CRAN至少与包装有关。虽然我认为并非所有Roc包都在CRAN上也可以使用Bioconductor。
示例:更具体的例子:在Python中
package::fun()
有效,但不是
import numpy
numpy.array()
,也不
import numpy
array()
作品。
在R中,两者
numpy.array()
和
library(ggplot2)
ggplot()
的工作。
答案 0 :(得分:1)
不同的语言表现不同,没有“最好的”#34;所有语言的行为,因为上下文(一致性,传统,最少惊讶的原则)很重要。 Python只是与其哲学(和实际事实)一致,即一切都是一个对象。模块是一个对象。如果要访问对象的属性,请使用点表示法。如果找不到某个对象(在您没有numpy
的第三个import numpy
示例中),则会得到一个NameError
,这也是您对一致行为的期望。