【发布时间】:2017-06-10 07:25:48
【问题描述】:
在 Python 中,使用默认行为,如果您想使用来自已加载包 package 的函数 fun,则在调用它时始终必须将其指定为属于某个新的/不同的命名空间,即 package.fun()。如果您已安装但未加载包,则根本无法调用该函数(据我所知)。
在 R 中,使用默认行为,如果您想使用已加载包 package 中的函数 fun,您可以毫无问题地使用全局命名空间,即 fun() 调用 fun。如果包已安装但未加载,您可以仍然通过指定一个新的/不同的命名空间来调用它,即package::fun()。
问题:如果从已安装包管理命名空间的一种方式比另一种更好,那么为什么两种编程语言不使用相同的默认行为?
我读过很多人说默认 Python 命名空间行为很棒,但我从未见过使用 R 的人觉得有必要捍卫 R 的默认行为,即使它与默认行为有很大不同Python,应该很棒。
也许不同之处在于没有 CRAN 的 Python 版本?作为一个初学者,我真的不明白这有什么关系,但至少 CRAN 确实与包有关。虽然我认为并非 Bioconductor 上的所有 R 包都在 CRAN 上可用。
示例:作为更具体的示例:在 Python 中
import numpy
numpy.array()
有效,但都没有
import numpy
array()
也没有
numpy.array()
有效。
在 R 中,两者都
library(ggplot2)
ggplot()
和
ggplot2::ggplot()
工作。
【问题讨论】:
-
如果你这样做 - from numpy import *
-
我不知道 python 是如何工作的,但据我所知(我很乐意得到纠正)库并没有真正从包中加载所有内容。元素在您需要时加载。如果您不调用库并调用 :: 表示法,我想这些数据将在操作结束时被清除。另外,你能在 python 中处理 maggritr 类型的运算符吗?对于其余部分,我认为这是一致性、可读性和易用性之间的权衡。
-
为什么要专门比较 python 和 R?每种语言都有自己处理扩展/模块/库/任何东西的方式,因此不同语言在这件事上表现不同也就不足为奇了。
-
@nicola Python 和 R 应该是“顶级数据科学语言”。因此,我在学习 R 的同时尝试重新熟悉 Python,以便能够同时使用这两种语言。我同意这并不奇怪,我想我感到惊讶的是为什么没有人抱怨或捍卫 R 的行为,考虑到 Python 的行为受到了多少赞扬。既然 Python 的行为对数据科学如此有利,那么为什么将 R 用于数据科学的人们会忍受与 R 完全相反的行为呢?
-
python 和 R 都不是为“数据科学”而构思和开发的,因为当时甚至不存在数据科学。它们现在(也)用于相同目的的事实完全无关紧要。关于人们的抱怨或赞美,我什么也说不出来;只是问他们为什么。对于语言加载库的方式,我个人看不出太多可抱怨或称赞的地方。我只是学习如何做到这一点。
标签: python r namespaces