python缩进可以嵌套吗_当前行的Python代码能否知道它的缩进嵌套级别吗?

比如下面这样的:print(get_indentation_level()) print(get_indentation_level()) print(get_indentation_level())

我想获取到这样的结果:1

2

3

代码能否通过这种方式读取自身?

我想要的是更多的嵌套部分的代码的输出更多的嵌套。 用同的方式,这使得代码更容易阅读,也使输出更容易阅读。

当然我可以手动实现,使用例如 .format(),但我想到的是一个自定义 print 函数,它将print(i*' ' + string),其中i是缩进级别。这会是一个在终端中产生可读输出的快速方法。有没有更好的、能避免辛苦的手动格式化的方法来做到这一点?

如果你想要嵌套级别的缩进,而不是空格和制表符,事情变得棘手。 例如,在下面的代码中:if True:

print(

get_nesting_level())

对get_nesting_level的调用实际上是嵌套1级,尽管事实上在get_nesting_level的调用行前没有空格。同时,在下面的代码中:print(1,

2,

get_nesting_level())

对get_nesting_level的调用是嵌套0级,尽管在它所在行前存在空格。

在下面的代码中:if True:

if True:

print(get_nesting_level())if True:

print(get_nesting_level())

对get_nesting_level的两次调用处于不同的嵌套级别,尽管空格数是一样的。在下面的代码中:if True: print(get_nesting_level())

是嵌套0级,还是1级? 在正式语法中,对于INDENT和DEDENT符号,它是0级,但你可能不会有同样的感觉。如果你想这样做,你将必须符号化整个文件,并为INDENT和DEDENT符号计数。tokenize模块对于这样的函数非常有用的:import inspect

import tokenizedef get_nesting_level():

caller_frame = inspect.currentframe().f_back

filename, caller_lineno, _, _, _ = inspect.getframeinfo(caller_frame)

with open(filename) as f:

indentation_level = 0

for token_record in tokenize.generate_tokens(f.readline):

token_type, _, (token_lineno, _), _, _ = token_record

if token_lineno > caller_lineno:

break

elif token_type == tokenize.INDENT:

indentation_level += 1

elif token_type == tokenize.DEDENT:

indentation_level -= 1

return indentation_level

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值