如何尽量增加 Python 代码行数,在不改变功能的前提下,代码尽量复杂化

2023-11-30 15:14:49 +08:00
 shijingshijing

RT ,帮朋友问的,他 6 月毕业一直空档,现在好容易找了个传统公司,偏制造业的那种,开发就几个人,老板定 KPI 主要是看代码行数和文档字数。老板的思路是,我提一个功能,朋友帮他实现,然后按代码行数来算这个功能的复杂程度和绩效。老板虽然不懂编程,但是还是很精明的,会给让他们自己排期,定节点,然后评审。项目开始和结束的时候,都会找他懂技术的朋友帮忙看一下。

他们老板和老板的朋友不傻,所以塞注释那种肯定是不行的。我帮他在网上找了一堆 Python 代码混淆的工具,Pyobfuscate 那种把函数名改成 lllllll 的,肯定也不行。但评审也不会太深入,塞点无效代码应该是可以的,就是太费脑子了。

目前我和他两个臭皮匠总结了下面几个可行的方法:
1 ,所有变量都尽量单独显式定义并赋值,美其名曰初始化。
2 ,能不写在一行的,尽量不写在一行。
3 ,能封装成函数的,尽量封装成函数,既增加行数,还增加复杂度。
4 ,tkinter 写的窗口什么的,即使是有默认值,也单独拿出来重新赋值一下。

效果也是有的,一个 200 多行的 Python 脚本干到了 500 行,但是还是不够,朋友的意思是,最好是随着老板提出的功能线性增加,这样符合他的预期。大家还有什么好办法,集思广益,帮帮他。

13306 次点击
所在节点    程序员
102 条回复
SenLief
2023-11-30 15:58:18 +08:00
这个很容易啊,把包重新实现一下就好了。
zhixi
2023-11-30 16:01:07 +08:00
@Goooooos 那我觉得不如直接学某大道至简的语言,直接扔上去满屏的

err := xxxxxx
if err != nil {

}
yph007595
2023-11-30 16:01:10 +08:00
@jrtzxh020 #8 这里的’朋友‘是指 up 主的朋友,而非老板的朋友
secpool
2023-11-30 16:04:28 +08:00
我能说我才帮老板写了脚本 统计 gitlab 所有人的代码提交量吗?😂
weiwenhao
2023-11-30 16:12:08 +08:00
我最近写 golang 就想到这个问题,如果统计代码行数,golang 绝对是最多的。if err + log 至少占了代码量的一半。

写 python 也可以,方法的开始写个 log, 结束写个 log, 每个 if 里面也写个 log 这样也可以增加代码行数。
Rebron1900
2023-11-30 16:23:46 +08:00
@iorilu 好家伙,指了条明路
Kinnice
2023-11-30 16:28:07 +08:00
每一个函数都实现单独一个 class , class 中把所有的魔法函数都 rewrite 一下,最少也得打个日志之类的。
使用的 的时候必须 x = funcClass() x.init() x.func() x.clean() x.exit()
ZXiangQAQ
2023-11-30 17:42:43 +08:00
@zhixi 好思路,err 处理时顺便打印下日志,日志使用结构化,然后每个属性单独起一行,绝对够行数,类似
jianchang512
2023-11-30 17:49:52 +08:00
1. 把用到的内置函数都统统再封装一层
2. 写一堆用不到的复杂算法
3. 能用 if 就不要用 for while
killva4624
2023-11-30 18:41:19 +08:00
我贡献一个思路:把 lint 工具的每行最大长度减少,比如 PEP 是 79 ,改成 70 或者 65 ,甚至 50
param
2023-11-30 19:08:56 +08:00
所有入参都判断一下类型,不对就抛异常
littlewing
2023-11-30 19:17:28 +08:00
离职
Chuckle
2023-11-30 19:58:21 +08:00
库拿出来二次封装很合理吧,瞬间代码量就爆炸了
louisxxx
2023-11-30 20:19:53 +08:00
if record['name'] in ["zhang", "liu", "wang", "wu", "le", "liu"]:
a = a +1

改成

if record['name'] == 'zhang':
a = a + 1
if record['name'] == 'liu':
a = a + 1
if record['name'] == 'wang':
a = a + 1
if record['name'] == 'wu':
a = a + 1
if record['name'] == 'le':
a = a + 1
if record['name'] == 'liu':
a = a + 1
mylifcc
2023-11-30 20:27:49 +08:00
上 pydantic 写几个元类就行了
iOCZS
2023-11-30 20:48:28 +08:00
不要以身犯险,有违职业道德,待遇觉得不行,你可以干一段时间跑路。但是务必做好自己的本职工作。
thinkm
2023-11-30 20:51:44 +08:00
不要用循环
Bigscience
2023-11-30 20:57:16 +08:00
建议换老板
自己人为故意地堆答辩代码,损人害己,建议远离这种不合理的绩效规则
llsquaer
2023-11-30 20:59:50 +08:00
import 的库都是深度封装的。你就拆散,按照需要的内容自己封装一次。。即阅读了源码,也自己实现了一遍简易功能,还令老板开心,简直三丰收。

第二种,GitHub 上随便抄几百行代码,copy 到自己项目里。然后加一个 try....。为了 IDE 乱标红,就对应的在前面加一些变量初始化下。完美解决。
test0x01
2023-11-30 23:52:53 +08:00
各种 exeption 考虑周全,把 log 也多打一点。既不失水准,方便调试,又增加行数

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/996546

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX