【问题标题】:passing tuple into a python class method [duplicate]将元组传递给python类方法[重复]
【发布时间】:2013-02-20 09:23:03
【问题描述】:

我并不是一个真正的 Python 人,但因为一位书籍作者在 Python 中发布了他们的代码示例,我不得不处理它。我收到以下代码的语法错误:

class SimpleGraph:

    def __init__(self):
        self._spo = {}
        self._pos = {}
        self._osp = {}

    def add(self, (sub, pred, obj)):
        """
        Adds a triple to the graph.
        """
        self._addToIndex(self._spo, sub, pred, obj)
        self._addToIndex(self._pos, pred, obj, sub)
        self._addToIndex(self._osp, obj, sub, pred)
...
...

错误: def add(self, (sub, pred, obj)): ^ SyntaxError: 无效语法

这是python版本问题还是什么?我似乎无法以这种原始形式将元组传递给类方法。建议表示赞赏。顺便说一句,我刚刚下载了 Python 3.3 编译器。

【问题讨论】:

  • 请参阅PEP 3113,了解为什么此语法不再有效。
  • 哦,所以对于最新版本的 python,它的语法不正确。让我试试旧版本,我只关心我是否可以在没有太多工作的情况下运行这些示例,并且实际上对学习 python 本身并不感兴趣。我会尽快发布我的发现

标签: python class methods parameters tuples


【解决方案1】:

是的,这是 Python 版本的问题。 Python 3 中不再允许使用元组参数解包语法。请参阅 http://www.python.org/dev/peps/pep-3113/ 以获取说明和示例。

【讨论】:

  • 感谢大家如此快地分享答案......它确实适用于 2.7。将结果授予任何人感觉不公平,但由于这篇文章有额外的原因等信息,我选择这个作为答案,谢谢!
【解决方案2】:

试试这样的:

def add(self, myTup):
    """
    Adds a triple to the graph.
    """
    (sub, pred, obj) = myTup
    self._addToIndex(self._spo, sub, pred, obj)
    self._addToIndex(self._pos, pred, obj, sub)
    self._addToIndex(self._osp, obj, sub, pred)

【讨论】:

  • 嗯,我可以试试,但是有很多例子,我想避免重写他们的代码——有点违背我的目的,因为我永远不会将 python 用于我的目的,而只是试图理解整体所描述事物的逻辑。
  • 所以我的问题是,原始代码发布是否应该出错?这是不是一个正确的语法 - 很难想象有人会在不运行它们的情况下出版一本书
  • 啊。好吧,正如其他人所说,原始语法不再有效。如果您不想重构代码,那么您可以下载 Python 2.7 编译器并使用它。
  • >所以我的问题是,原始代码帖子是否应该出错?它将在 Python 3.0+ 中。
【解决方案3】:

该代码适用于 python 2.7,但在 3.0 版等中不再有效......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2017-02-07
    • 2012-06-10
    • 2012-12-26
    • 2018-04-11
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多