【问题标题】:What concept is involved here? Example in Python and R.这里涉及到什么概念? Python 和 R 中的示例。
【发布时间】:2014-01-27 16:21:55
【问题描述】:

我正在尝试找到合适的语言来描述以下概念。也许有人可以帮助我。

这是一个关于编程的一般问题,但我将使用 Python 和 R 作为示例。

在 Python 中,我们可以像这样将一些东西放入字典中

myData = {}
myData["myField"] = 14

例如,在 R 中,使用 data.table 包,我们可以编写类似

data = data.table(x = c(1, 2, 3))
data[,myField: = x^2]

这些做不同的事情,但比较它们每个的第二行。在 Python 中,"myField" 是一个字符串。在 R data.table 示例中,没有字符串。 R 示例有点好,因为它可以节省你的打字时间,但是如果你想编写一个myField 是变量的程序,它会给你带来麻烦。在 Python 中这很简单,因为你可以这样做

myData[myVariable] = 14

myVariable 被定义为另一个字符串。在 R 中,您也可以这样做,但必须使用不同的语法,这意味着您必须了解两种完全不同的语法编程方式。

我的问题:这叫什么?我知道它与范围规则有关(也许是元编程?),但无法为它找出正确的语言。任何人?

【问题讨论】:

  • 您确实意识到,不是吗,您在 R 中描述的行为特定于 data.table 包,以及它解析其参数的方式。更基本的数据结构(如数据框和列表)可以很好地处理字符索引。
  • 这就是将词法作用域与表达式是第一类对象的原则结合起来的结果。后者在 Python 中不成立。
  • 请注意,在 data.table 中您可以这样做:myFieldName <- "myField"; data[, c(myFieldName) := x^2] .
  • 在 R 中也称为非标准评估。见developer.r-project.org/nonstandard-eval.pdf
  • 更好的 R 等价物可能是 `myData adv-r.had.co.nz/Computing-on-the-language.html 信息丰富。

标签: python r functional-programming


【解决方案1】:

我相信这种编程语言的“特性”被称为“裸字符串”。

PHP 对此也有(已弃用)支持:Why is $foo[bar] wrong?

这被广泛认为是一个非常糟糕的想法,因为存在与变量或常量名称重叠的风险,并且在生产代码中绝对应该避免。然而,JavaScript 在避免这些问题的想法上有一个有趣的转折:

var obj = { key: "value" };

您可以在不使用引号的情况下定义内联对象的键。这是可行的,因为您不能以另一种方式进行 - 键被解析为字符串,而不是变量名。我发现在只使用字典中预定义键的程序中,这是一个非常有用的折衷方案。供参考的 Python 版本需要引号,但允许您使用变量,如您所演示的:

obj = { "key": "value", key_var: "value" }

【讨论】:

    【解决方案2】:

    我不确定这是否是您要问的,但是,在您的 Python 示例中,myData["myField"] 中的 "myField"字符串文字 - 即,您是硬编码键值。同样,如果你定义了一个 Python 函数

    def myFun(a):
        # magic happens
    

    如果您以 myFun("goober") 的形式调用函数,您将传入一个字符串文字 ("goober"),而不是定义一个变量 b = "goober" 然后将变量作为 myFun(b) 传入。

    【讨论】:

      【解决方案3】:

      您的问题似乎与 Lisp(以及相关语言以及 Mathematica)中(未评估的)符号的定义/使用有关,c.f. the answers here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 2013-08-13
        • 1970-01-01
        相关资源
        最近更新 更多