在 django-viewflow 流中使用 paratheses 符号
Use of paratheses symbols in django-viewflow flow
我一直对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 e.t.c。这是什么意思。根据我的最佳猜测,.Next
函数似乎接受一个元组作为输入。
注意 我理解这里使用的方法链接。我只是对大括号的使用一头雾水
谢谢。
如果我没理解错的话,你想知道外括号有什么用。
让我们先写出不带外括号的(第一个,但适用于第二个)语句:
start = flow.Start(views.StartView).Permission('shipment.can_start_request').Next(this.split_clerk_warehouse)
这完全等同于您示例中的代码。但您可能同意这相当不可读。它需要用户滚动代码,而且它是一长串字符,没有任何结构。程序员很难理解它,尤其是如果 - 稍后 - 我们也会在调用参数中使用方括号。
所以也许这样写是有意义的:
<s>start = flow.Start(views.StartView).
Permission('shipment.can_start_request').
Next(this.split_clerk_warehouse)</s>
但这行不通:Python 是一种使用间距作为在代码上附加语义的方式的语言。结果它将中断:Python 将尝试将单独的链接解析为单独的语句。但是,如何处理拖尾点呢?结果解析器会出错。
现在 Python 有一些方法可以多行 方式编写语句。例如反斜杠:
start = flow.Start(views.StartView). <b>\</b>
Permission('shipment.can_start_request'). <b>\</b>
Next(this.split_clerk_warehouse)
我们使用反斜杠指定下一行实际上属于当前行,因此它被解析为我们将所有内容写在一行中。
缺点是我们很容易忘记这里的反斜杠,这又会让解析器出错。此外,这需要线性工作:我们必须为每一行添加一个元素。
但是编程语言实际上通常具有程序员经常使用的将(子)表达式组合在一起的功能:括号。我们用它来赋予优先级(例如 3 * (2 + 5)
),但我们也可以用它来简单地将一个表达式分组到多行中,例如:
start = <b>(</b>
flow.Start(views.StartView)
.Permission('shipment.can_start_request')
.Next(this.split_clerk_warehouse)
<b>)</b>
括号内的所有内容都属于同一个表达式,因此 Python 将忽略新行。
请注意,元组文字 也使用方括号。例如:
() # empty tuple
(1, ) # singleton tuple (one element)
(1, 'a', 2, 5) # 4-tuple
但是这里对于单例元组,或者多个元素用逗号分隔的,
(空元组除外)需要在最后写一个逗号。
我一直对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 e.t.c。这是什么意思。根据我的最佳猜测,.Next
函数似乎接受一个元组作为输入。
注意 我理解这里使用的方法链接。我只是对大括号的使用一头雾水
谢谢。
如果我没理解错的话,你想知道外括号有什么用。
让我们先写出不带外括号的(第一个,但适用于第二个)语句:
start = flow.Start(views.StartView).Permission('shipment.can_start_request').Next(this.split_clerk_warehouse)
这完全等同于您示例中的代码。但您可能同意这相当不可读。它需要用户滚动代码,而且它是一长串字符,没有任何结构。程序员很难理解它,尤其是如果 - 稍后 - 我们也会在调用参数中使用方括号。
所以也许这样写是有意义的:
<s>start = flow.Start(views.StartView).
Permission('shipment.can_start_request').
Next(this.split_clerk_warehouse)</s>
但这行不通:Python 是一种使用间距作为在代码上附加语义的方式的语言。结果它将中断:Python 将尝试将单独的链接解析为单独的语句。但是,如何处理拖尾点呢?结果解析器会出错。
现在 Python 有一些方法可以多行 方式编写语句。例如反斜杠:
start = flow.Start(views.StartView). <b>\</b>
Permission('shipment.can_start_request'). <b>\</b>
Next(this.split_clerk_warehouse)
我们使用反斜杠指定下一行实际上属于当前行,因此它被解析为我们将所有内容写在一行中。
缺点是我们很容易忘记这里的反斜杠,这又会让解析器出错。此外,这需要线性工作:我们必须为每一行添加一个元素。
但是编程语言实际上通常具有程序员经常使用的将(子)表达式组合在一起的功能:括号。我们用它来赋予优先级(例如 3 * (2 + 5)
),但我们也可以用它来简单地将一个表达式分组到多行中,例如:
start = <b>(</b>
flow.Start(views.StartView)
.Permission('shipment.can_start_request')
.Next(this.split_clerk_warehouse)
<b>)</b>
括号内的所有内容都属于同一个表达式,因此 Python 将忽略新行。
请注意,元组文字 也使用方括号。例如:
() # empty tuple
(1, ) # singleton tuple (one element)
(1, 'a', 2, 5) # 4-tuple
但是这里对于单例元组,或者多个元素用逗号分隔的,
(空元组除外)需要在最后写一个逗号。