【Python】防御性编程入门

2024-05-15 06:20
文章标签 python 入门 编程 防御性

本文主要是介绍【Python】防御性编程入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 前言

防御性编程指的是为了防止代码泄露后被竞品公司窃取技术,使用一种较高级的明文加密编程方式。也可以当做一种带解密性质的时间胶囊,锻炼程序员自己的记忆能力、读代码能力等。


2. 案例分析


2.1 import

  • Import里面可以多取一些喜欢的名字,也可以取简写
  • 原生库和三方库混着Import
  • Importfrom交错使用,增加美观性
  • 模块和模块内的函数都分别导入,使用更加方便
  • 相同作用的库都导入,如这里的pathlibos,又比如可以mathnumpy换着用
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 ds

2.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_ascii=False))else:with open(pc, 'r') as lq:dc = j.loads(lq.read())dc['...'] = dtwith open(pc, 'w') as lq:lq.write(ds(dc, ensure_ascii=False))
  • 函数调用的时候能用位置参数就不用关键字参数
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 x

2.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(encoding="utf-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))
  • 不用刻意乱打空格,因为一个ctrl+alt+L就纠正过来了

2.7 异常捕获

  • try-except作为if-else的替代,可以增加两行代码:
try:assert len(dl) <= 1
except:...
  • try-except包住绝大部分代码,让报错有处遁形,锻炼debug能力。如下面这段代码,数据量大的时候如果有少量报错的很难从结果端察觉:
for x in gj(pa):try:...except:...

这篇关于【Python】防御性编程入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991041

相关文章

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3