我有一个优化Python代码格式的脚本,自己写的,可以部分实现你说的这种功能。本意是为了提高pylint评分的。分享一下,希望能给你提供一些思路。方法比较琐碎,分两部分:
1,双目运算符。
先处理双目的运算符。先将有空格的替换成无空格的,例如" == "替换成"=="。然后再将无空格的替换成有空格的。以此来避免部分有空格而部分没有空格,以及重复添加空格的情况。只有一个空格的情况,如"== ",由于我写代码的习惯,我没有考虑。你可以自己添加。
2,单目运算符。
使用正则匹配单目运算符,如re.find(r"[\S]\=[\S]")就是匹配单个=号的。并且只匹配旁边没有空格的"a=b"这个形式的,不匹配"a= b"。因为双目的==等已经处理过,所以==等前后一定有空格,因此不会匹配到了。这样就解决了单双目符号冲突的问题。
当然也可以使用1中相同的伎俩,在1之前就将" =","= "等替换成"="。
以下是我的代码的片段。仅供参考,请勿直接复制(因为是片段无法正常运行)。
def addSpace(s):return ' ' + s + ' '
……
#简单替换一些双目符号
for ch in ['!=', '>=', '<=', '==', '+=',
'-=', '*=', '/=', '**', '>>', '<<']:
lines[i] = lines[i].replace(addSpace(ch), ch)
lines[i] = lines[i].replace(ch, addSpace(ch))
#将单个符号两边加空格
for d in ['\=', '\+', '\-', '\*', '\>',
'\,', '\<', '\^', '\&','\%' ]:#斜杠是为re语句加的
with_singles = re.findall('[\S]' + d + '[\S]', lines[i])
for j in with_singles:
if len(j) != 3:continue
if d == '\,':
lines[i] = lines[i].replace(j, j[0] + j[1] + ' ' + j[2])#逗号后加空格
else:
lines[i] = lines[i].replace(j, j[0] + addSpace(j[1]) + j[2])
python常见的运算符1.算数运算符
算术运算符用于执行加减乘除、取余等基本数学运算,其中为了方便输入用斜杠"/"表示除号。和其它编程语言中两个整数相除结果为整数不同,Python中两个整数相除结果为小数,如果需要获取整除结果则需要使用两个斜杠"//"。Python中用两个“*”号表示求幂,例如 2**3=8,3**2=9。
①+ 名称:加
可用于对数字,序列等数据操作 。对于数字进行求和;其他的是连接
②- 名称 :减 只是求差
③* 名称:乘法
可用于数字、序列等数据进行操作;数字是求积;其他类型进行连续性的操作
④/ 名称:除法 求商
⑤% 名称:取余 求两个数字除法运算的余数
⑥** 名称:幂求a的b次幂
⑦// 名称:地板除法求商取整
2.关系运算符
关系运算符用于比较两个操作数之间的大小关系,返回值为True或False。
① == 名称:等于 ② !=不等于③ > 大于④ < 小于⑤ <= 小于等于 ⑥ >= 大于等于
注意:1. 一个=表示赋值,两个==表示判断两个对象是否相等
2.关系运算符可以连用
3.逻辑运算符
逻辑运算符用于判断多个条件是否满足某一要求。与其他编程语言不同的是:Python中用 not 表示逻辑非,and 表示逻辑与, or 表示逻辑或。
① and 名称:逻辑与 只有当and两边的之都为 True时,结果为True,否则结果均为False
② or 名称:逻辑或只有当or两边的之都为False时,结果为False,否则结果均为True
③not 名称:逻辑非结果与原来的结果相反,总是。
注意:逻辑与和了逻辑或在进行求解期间 ,总是从左到右一次执行 ,如果在某一步可以确定结果,那么将不在执行后面的表达式。
4.赋值运算符
运算符 += -= *= /= %= **= //= &= |= ^= <<= >>=
名称 加赋值 减赋值 乘赋值 除赋值 取余赋值 幂赋值 地板除法赋值 位与赋值 位或赋值 位异或赋值 左移赋值 右移赋值
例子 a +=b a -= b a *= b a /= b a %= b a **= b a //= b a &= b a |= b a ^= b a <<= b a >>= b
说明 a = a + b a = a - b a = a * b a = a / b a = a % b a = a ** b a = a // b a = a &b a =a | b a = a ^ b a = a <<b a = a >>b
5.身份运算符
in 例子:x in y 表示y中是否含有x,如果有则返回True,没有责则返回False
not in 例子: x not in y 表示y中是否含有,没有返回位True,有返回False