【问题标题】:Use of paratheses symbols in django-viewflow flow在 django-viewflow 流程中使用 paratheses 符号
【发布时间】:2018-06-07 09:23:08
【问题描述】:

我一直不明白 django-viewflow 流程代码中括号的使用。 例如在下面的代码中

start = (
    flow.Start(views.StartView)
    .Permission('shipment.can_start_request')
    .Next(this.split_clerk_warehouse)
)

# clerk
split_clerk_warehouse = (
    flow.Split()
    .Next(this.shipment_type)
    .Next(this.package_goods)
)

来自here

似乎,一个包含函数的元组被分配给 start 和 split_clerk_warehouse 等。这是什么意思。根据我的最佳猜测,.Next 函数似乎接受一个元组作为输入。

注意我明白这里使用的方法链接。我只是对大括号的使用感到茫然。

谢谢。

【问题讨论】:

  • 不,外括号仅用于允许适当的缩进。
  • @Willem Van Onsem,python 是如何允许的。我认为python是空格缩进的。我也可以在代码的其他地方使用它吗?
  • 这正是原因:因为 Python 是为了空间而设计的。
  • 这让我大吃一惊。所以你是说外括号没有在元组内实例化一个函数? @WillemVanOnsem
  • 不,对于单例元组,尾逗号是必需的,对于 2 元组或多元组,应该有逗号,但这里没有逗号,而是点,用于属性访问。

标签: django parentheses django-viewflow


【解决方案1】:

如果我理解正确,你想知道 括号有什么用。

让我们首先编写不带外括号的(第一个,但适用于第二个)语句:

start = flow.Start(views.StartView).Permission('shipment.can_start_request').Next(this.split_clerk_warehouse)

完全等同于您示例中的代码。但您可能同意这是非常不可读。它需要用户滚动代码,而且它是一长串字符,没有任何结构。程序员将很难理解它,尤其是如果 - 稍后 - 我们还将在调用参数中使用括号。

所以也许把它写成这样是有意义的:

start = flow.Start(views.StartView).
             Permission('shipment.can_start_request').
             Next(this.split_clerk_warehouse)

但这行不通:Python 是一种使用空格作为在代码上附加语义的一种方式的语言。结果它将中断:Python 将尝试将单独的链接解析为单独的语句。但是,如何处理拖尾点呢?结果解析器会出错。

现在 Python 有一些方法可以以 多行 方式编写语句。例如使用反斜杠:

start = flow.Start(views.StartView). \
             Permission('shipment.can_start_request'). \
             Next(this.split_clerk_warehouse)

我们用反斜杠指定下一行实际上属于当前行,因此它的解析就像我们在一行上写的一样。

缺点是我们很容易忘记这里的反斜杠,这会再次让解析器出错。此外,这需要线性工作:我们必须为每一行添加一个元素。

但编程语言实际上通常具有程序员经常用来将(子)表达式组合在一起的特性:括号。我们使用它来提供优先级(例如3 * (2 + 5)),但我们也可以使用它来简单地将一个表达式分组到多行,例如:

start = (
    flow.Start(views.StartView)
    .Permission('shipment.can_start_request')
    .Next(this.split_clerk_warehouse)
)

括号内的所有内容都属于同一个表达式,因此 Python 将忽略新行。

请注意,元组文字也使用括号。例如:

()              # empty tuple
(1, )           # singleton tuple (one element)
(1, 'a', 2, 5)  # 4-tuple

但是这里我们需要在单例元组的末尾写一个逗号,或者多个元素用逗号的,隔开(空元组除外)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多