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

您可以使用sys.current_frame.f_lineno来获取行号。然后,为了找到缩进级别的数量,您需要找到缩进为零的前一行,然后从该行的数量中减去当前行号,您将得到缩进的数量:import sys

current_frame = sys._getframe(0)

def get_ind_num():

with open(__file__) as f:

lines = f.readlines()

current_line_no = current_frame.f_lineno

to_current = lines[:current_line_no]

previous_zoro_ind = len(to_current) - next(i for i, line in enumerate(to_current[::-1]) if not line[0].isspace())

return current_line_no - previous_zoro_ind

演示:if True:

print get_ind_num()

if True:

print(get_ind_num())

if True:

print(get_ind_num())

if True: print(get_ind_num())

# Output

1

3

5

6

如果您想要基于前面带有:的行的缩进级别的数量,只需稍作更改即可:def get_ind_num():

with open(__file__) as f:

lines = f.readlines()

current_line_no = current_frame.f_lineno

to_current = lines[:current_line_no]

previous_zoro_ind = len(to_current) - next(i for i, line in enumerate(to_current[::-1]) if not line[0].isspace())

return sum(1 for line in lines[previous_zoro_ind-1:current_line_no] if line.strip().endswith(':'))

演示:if True:

print get_ind_num()

if True:

print(get_ind_num())

if True:

print(get_ind_num())

if True: print(get_ind_num())

# Output

1

2

3

3

另一个答案是,这里有一个函数,用于获取缩进的数量(空白):import sys

from itertools import takewhile

current_frame = sys._getframe(0)

def get_ind_num():

with open(__file__) as f:

lines = f.readlines()

return sum(1 for _ in takewhile(str.isspace, lines[current_frame.f_lineno - 1]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值