python - 为什么 R 和 Python 中加载包的默认命名空间行为不同?

标签 python r namespaces

<分区>

在 Python 中,使用默认行为,如果你想使用加载包 package 中的函数 fun 你总是必须将它指定为属于一些新的/不同的调用它时的命名空间,即 package.fun()。如果您已经安装但没有加载包,则根本无法调用该函数(据我所知)。

在 R 中,使用默认行为,如果你想使用加载包 package 中的函数 fun 你可以毫无问题地使用全局命名空间,即 fun() 调用 fun。如果包已安装但未加载,您仍然可以通过指定新的/不同的命名空间来调用它,即 package::fun()

问题:如果一种从已安装包管理命名空间的方法比另一种更好,那么为什么两种编程语言不使用相同的默认行为?

我读过很多人说默认的 Python 命名空间行为很棒,但我从未见过使用 R 的人感到有必要捍卫 R 的默认行为,即使它与默认行为有很大不同Python,应该很棒。

也许区别在于没有 Python 版本的 CRAN?作为初学者,我真的不明白这有什么关系,但 CRAN 至少与包有关。虽然我认为并非所有 Bioconductor 上的 R 包也可以在 CRAN 上使用。

例子:作为更具体的例子:在Python中

import numpy
numpy.array()

有效,但都无效

import numpy
array()

也不

numpy.array()

有效。

在 R 中,两者都是

库(ggplot2) ggplot()

ggplot2::ggplot()

工作。

最佳答案

不同的语言表现不同,所有语言都没有“最佳”行为,因为上下文(一致性、传统、最小意外原则)很重要。 Python 只是与它的哲学(和事实)一致,即一切都是对象。模块是一个对象。如果要访问对象的属性,请使用点表示法。如果找不到对象(在您的第三个 numpy 示例中,您没有 import numpy),您将得到一个 NameError,这也是您想要的期待一致的行为。

关于python - 为什么 R 和 Python 中加载包的默认命名空间行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44470728/

相关文章:

php - 如何在 PHP 中实现嵌套命名空间?

生产环境中的 python 和 SQLite

python - read_data_sets 已弃用,将在未来版本中删除。更新说明

python - Gmpy sqrt精度

r - 推广任意大小矩阵的函数

xamarin - 为什么需要在 Xamarin.Forms 应用中更改程序集名称?

node.js - 编译后从 typescript 命名空间导出类给出未定义(NestJS)

python - Django、Python、Mysql

r - 使用 googlesheets4 通过 R 中的 Shiny 连接到 googlesheets

r - 并排绘制 gList