博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tinypy中缩进的处理
阅读量:4294 次
发布时间:2019-05-27

本文共 1383 字,大约阅读时间需要 4 分钟。

先贴上代码

主程序

def do_tokenize(s):    global T    T,i,l = TData(),0,len(s)    T.f = (T.y,i-T.yi+1)    while i < l:        c = s[i]; T.f = (T.y,i-T.yi+1)        if T.nl: T.nl = False; i = do_indent(s,i,l)        elif c == '\n': i = do_nl(s,i,l)        elif c in ISYMBOLS: i = do_symbol(s,i,l)        elif c >= '0' and c <= '9': i = do_number(s,i,l)        elif (c >= 'a' and c <= 'z') or \            (c >= 'A' and c <= 'Z') or c == '_':  i = do_name(s,i,l)        elif c=='"' or c=="'": i = do_string(s,i,l)        elif c=='#': i = do_comment(s,i,l)        elif c == '\\' and s[i+1] == '\n':            i += 2; T.y,T.yi = T.y+1,i        elif c == ' ' or c == '\t': i += 1        else: u_error('tokenize',s,T.f)    indent(0)    r = T.res; T = None    return r
处理缩进程序

def do_indent(s,i,l):    v = 0    while i
T.indent[-1]: T.indent.append(v) T.add('indent',v) elif v < T.indent[-1]: n = T.indent.index(v) while len(T.indent) > n+1: v = T.indent.pop() T.add('dedent',v)

这里主程序只看

if T.nl: T.nl = False; i = do_indent(s,i,l)

这一行

nl是new line代表遇到换行符进行缩进判断

然后看do_indent方法可以看出是通过记录空格或tab的个数,然后使用indent函数与indent集合对比,判断当前代码行属于哪个程序块,T.add函数是添加一个标识符的类型和值。

结果就在这里发现的以前所不知道的:

python缩进是通过判断空格和tab个数来实现的,并不是强制规定4个空格或一个tab的!!!

难道是tinypy为了省事才这样?

用标准python2.x检测一下!

可以运行!!!实在孤陋寡闻了!!!以后再也不用担心循环嵌套太深了!!!对于过于深层的嵌套可以考虑使用2个空格的缩进,当然,过深的嵌套本省就有进一步优化的必要。

转载地址:http://ftuws.baihongyu.com/

你可能感兴趣的文章
<a4j:keeyAlive>的英文介绍
查看>>
关于list对象的转化问题
查看>>
VOPO对象介绍
查看>>
jqpl语法一
查看>>
suse创建的虚拟机,修改ip地址
查看>>
linux的挂载的问题,重启后就挂载就没有了
查看>>
docker原始镜像启动容器并创建Apache服务器实现反向代理
查看>>
docker容器秒死的解决办法
查看>>
管理网&业务网的一些笔记
查看>>
openstack报错解决一
查看>>
openstack报错解决二
查看>>
linux source命令
查看>>
openstack报错解决三
查看>>
乙未年年终总结
查看>>
子网掩码
查看>>
第一天上班没精神
查看>>
启动eclipse报错:Failed to load the JNI shared library
查看>>
eclipse安装插件的两种方式在线和离线
查看>>
linux下源的相关笔记(suse)
查看>>
linux系统分区文件系统划分札记
查看>>