个人做短视频网站,网站的建设原始代码,优质服务的网页归档,重庆网络营销网站建设销售1. 前言
防御性编程指的是为了防止代码泄露后被竞品公司窃取技术#xff0c;使用一种较高级的明文加密编程方式。也可以当做一种带解密性质的时间胶囊#xff0c;锻炼程序员自己的记忆能力、读代码能力等。 2. 案例分析 2.1 import
Import里面可以多取一些喜欢的名字#…1. 前言
防御性编程指的是为了防止代码泄露后被竞品公司窃取技术使用一种较高级的明文加密编程方式。也可以当做一种带解密性质的时间胶囊锻炼程序员自己的记忆能力、读代码能力等。 2. 案例分析 2.1 import
Import里面可以多取一些喜欢的名字也可以取简写原生库和三方库混着Import单Import和from交错使用增加美观性模块和模块内的函数都分别导入使用更加方便相同作用的库都导入如这里的pathlib和os又比如可以math和numpy换着用
import json as j
from pathlib import Path as P
import dicttoxml as dtxfrom xml.dom.minidom import parseString as pS
import os as oasis
from json import dumps as ds2.2 函数
将完全不需要组成函数的内容组成函数没啥可说的基本技巧别写类型提示注意函数名和参数名也有讲究我个人是简洁派whatever
def psd(s,did, fn,p, name,d,os):l1 ...l2 ...l ...c m.get(l)try:if ...:l ...except:passos.append(...)if c and c not in str(p):...return os交替使用实参和外部的全局变量如此处的d变量和全局的dt变量实则为同一个
def gd(d
):if not oasis.path.exists(pc):with open(pc, w) as lq:lq.write(ds(d, ensure_asciiFalse))else:with open(pc, r) as lq:dc j.loads(lq.read())dc[...] dtwith open(pc, w) as lq:lq.write(ds(dc, ensure_asciiFalse))函数调用的时候能用位置参数就不用关键字参数
dtx.dicttoxml(lq,True,...,True,False,False,lambda lq:...)能用自己的函数就不用标准库/三方库的函数比如将.rglob(*.json)替换为下面的函数
def gj(p
):for x in p.rglob(*):if x.is_file():if x.suffix .json:yield x2.3 注释
适当增加一些没有意义的注释注释加的位置多进行变化避免单一
# 遍历JSON
for x in gj(pa):...for x in gj(pa): # 再次遍历JSON...在有问题的地方注释上noqa如下面这里的dd变量是循环内的一个变量一般不在循环外调用但是注释上noqa权当无事发生
for x in l1:dd ...
if dd is None: # noqaraise ValueError(unexpected value)2.4 if-else
能嵌套if就绝不用elif能多写if就绝不写and
if ct 0:...
else:if ct 1:if ... in sn:...else:if ct 1:if ... in sn:...if ct 1:if ... in ht or ... in ht or ... in ht or ... in ht:if no ! ...:...else:if ... in ht:if no ! ...:...至于1个if做2件事还是2个if各做1件事见仁见智比如我这里就写了2次if ct 1: 如果没有那么多条件拿来判断可以多加入一些边缘情况如下面案例中的dd变量一般不会为None但是万一呢同理f变量本来不可能超过10但是万一呢
for x in gen_json(pa): # 再次遍历JSONr1 j.load(x.open(encodingutf-8))dd r1[...]if dd is None:raise ValueError(unexpected value)else:f r1[...][...] 1if f 12:raise ValueError(...)else:...2.5 变量
简洁有力能一起创建就一起创建不同类型变量混一起
pa, m,pc, dt,pb,s P(r...), {...},P(r...), {},P(r...),{}重复使用同样的变量名如这里的lq变量最初指向一个列表通过psd函数更新单看这里看不出来之后又指向一个DOM最后又指向了一个Path对象
lq []
# 遍历data
for y in dl[:1]:psd(y,dd,f,po,po.name,dt,lq)
lq pS(dtx.dicttoxml(lq,True,...,True,False,False,lambda lq:...))
udm(d.getElementsByTagName(...)[0],lq)
lq pb/of/x.relative_to(pa).with_suffix(...)
lq.parent.mkdir(511,True,True)
lq.write_text(d.toprettyxml())2.6 代码风格
从头到尾不用空行分隔或随心情添加空行绝不换行多嵌套多用火车式代码如这是一行代码
d pS(dtx.dicttoxml({...: P(r1[...][...]).parent.name,...: P(r1[...][...]).name,...: P(r1[...][...]).name,...: {...: ...},...: {...: ..., ...: ..., ...: ...},...: ...},True,...,True,False,False))不用刻意乱打空格因为一个ctrlaltL就纠正过来了
2.7 异常捕获
将try-except作为if-else的替代可以增加两行代码
try:assert len(dl) 1
except:...用try-except包住绝大部分代码让报错有处遁形锻炼debug能力。如下面这段代码数据量大的时候如果有少量报错的很难从结果端察觉
for x in gj(pa):try:...except:...