python语句分为复合语句和_Python词法分析逻辑行与复合语句

所以我明白:The end of a logical line is represented by the token NEWLINE

这意味着Python语法的定义方式结束逻辑行的唯一方法是使用\n标记。在

物理行也一样(更确切地说是EOL,它是编写文件时使用的平台的EOL,但是通过Python转换为通用的\n)。在

一条逻辑线可以等价于一条或多条物理线,也可以不等价于一条或多条物理线,但通常是一条,如果编写干净的代码,大多数情况下是一条。在

从某种意义上说:foo = 'some_value' # 1 logical line = 1 physical

foo, bar, baz = 'their', 'corresponding', 'values' # 1 logical line = 1 physical

some_var, another_var = 10, 10; print(some_var, another_var); some_fn_call()

# the above is still still 1 logical line = 1 physical line

# because ; is not a terminator per se but a delimiter

# since Python doesn't use EBNF exactly but rather a modified form of BNF

# p.s one should never write code as the last line, it's just for educational purposes

我的问题是文档中的以下部分,而不是举例说明1逻辑如何等同于>1物理的问题:Statements cannot cross logical line boundaries except where NEWLINE

is allowed by the syntax (e.g., between statements in compound

statements)

但这又意味着什么呢?我理解复合语句的列表,不管它们是:if,while,for,等等。它们都由一个或多个子句组成,每个子句依次由标题和一个套件。

套件由一个或多个语句组成,让我们举一个更具体的例子:

因此,根据语法(不包括elifs和else子句),if语句是这样的:

^{pr2}$

其中,该套件及其后续语句:suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT

statement ::= stmt_list NEWLINE | compound_stmt

stmt_list ::= simple_stmt (";" simple_stmt)* [";"]

所以这意味着,如果你想选择(用“|”表示)你的套房可以是以下两种方式中的一种:在同一条线上:

缺点:不是pythonic,并且不能有另一个引入新块的复合语句(如func def、另一个if等)

建议:我猜是一行

示例:if 'truthy_string': foo, bar, baz = 1, 2, 3; print('whatever'); call_some_fn();引入新区块:

优点:所有,以及正确的方法

示例:if 'truthy_value':

first_stmt = 5

second_stmt = 10

a, b, c = 1, 2, 3

func_call()

result = inception(nested(calls(one_param), another_param), yet_another))

但我不知道怎么做Statements cannot cross logical line boundaries except where NEWLINE

is allowed by the syntax

我在上面看到的是一个套件,它是一个由if子句控制的代码块,套件由逻辑独立的行(语句)组成,其中每个逻辑行都是一条物理行(巧合)。我看不出一条逻辑线是如何跨越界限的(基本上只是结尾、极限的一个花哨的词,这就是新行),我看不出一个语句如何跨越这些界限并延伸到下一个语句中,或者我真的很困惑,把所有的事情都搞混了,但如果有人能解释一下。在

感谢您提前抽出时间。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值