这里涉及什么概念? Python和R中的示例

时间:2014-01-27 16:21:55

标签: python r functional-programming

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

这是关于编程的一般问题,但我将使用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中,你也可以这样做,但必须使用不同的语法,这意味着你必须知道两种完全不同的语法编程方式。

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

3 个答案:

答案 0 :(得分:1)

我相信这种编程语言“功能”被称为“裸字符串”。

PHP也有(不建议使用)支持:Why is $foo[bar] wrong?

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

var obj = { key: "value" };

您可以在不使用引号的情况下在内联对象上定义键。这是有效的,因为你不能以其他方式执行它 - 键被解析为字符串,而不是变量名。我发现在程序中你只使用字典中的预定义键是一个非常有用的权衡。作为参考,Python版本需要引号,但允许您使用变量,如您所示:

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

答案 1 :(得分:0)

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

def myFun(a):
    # magic happens

并且您将函数调用为myFun("goober"),您将传入字符串文字("goober"),而不是定义变量b = "goober"然后传入变量为myFun(b)

答案 2 :(得分:0)

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