3

我有一个简单的问题。

我有一个字典:table = collections.defaultdict(set)和一个先前定义的由如下规则组成的语法:

Rule(('Noun', ('money',)))
Rule(('Noun', ('book',)))
Rule(('S', ('book',)))

现在,当我输入这个时,什么也没有发生。

for rule in grammar:
    if rule.symbols == ("book"):
        table[col - 1, col].add(rule.head)

当我键入此内容时,将添加该条目。

for rule in grammar:
    if rule.symbols == ("book",):
        table[col - 1, col].add(rule.head)

两者之间的唯一区别是“书”后面的逗号。这个逗号有什么作用,为什么有必要?

谢谢!

4

4 回答 4

4

您需要添加逗号以使其成为元组,否则它只是一个字符串。

于 2012-12-27T09:34:49.247 回答
4

一是字符串,二是元组(,):

>>> ("book")
'book'
>>> ("book",)
('book',)
于 2012-12-27T09:36:12.630 回答
4

在第一种情况下,("book")括号只是对表达式进行分组的一种方式。该表达式的值就是字符串"book"

在第二种情况下,它正在创建一个包含一个元素的元组。

于 2012-12-27T09:36:43.020 回答
0

The comma transform the expression type from str (with useless parenthesis around) to tuple with single element.

Use type() to see this in action:

>>> type(("book"))
<class 'str'>
>>> type(("book",))
<class 'tuple'>
于 2017-02-25T08:37:19.023 回答