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

2023 年 11 月 30 日
 shijingshijing

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

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

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

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

18927 次点击
所在节点    程序员
102 条回复
rb6221
2023 年 12 月 1 日
不要用高阶语法,能写 if 都写 if ,不要用简化语法
不要重用,本来可以重用的方法都直接拷贝一份出来
多做判空,多做异常捕获,就算这里几行代码是 100%不为空,你也加个判空。这样也有好处是可以减少 bug ,而且提高了代码量
vivisidea
2023 年 12 月 1 日
说服老板不要用这种方式来搞,对双方都没意思
可以找几个例子,去说明这种方式的不合理, 比如

1. 本来可以调用一个库函数的,对比自己实现一遍
2. 本来可以很简单的一个策略模式设计,对比写一大堆 if-else 实现
hevi
2023 年 12 月 1 日
何必浪费生命呢,去做些有意义的事情不好吗

就为了讨好资本家吗
echoyangjx
2023 年 12 月 1 日
6 哇
knightgao2
2023 年 12 月 1 日
换个不傻的老板
aijam
2023 年 12 月 1 日
提供一个思路: https://gist.github.com/lolzballs/2152bc0f31ee0286b722
既不容易被抓,看起来还专业
godall
2023 年 12 月 1 日
@aijam 哈哈完全正确,利用设计模式造一个 helloworld 实现类,看起来专业高大上,实际上就是狗屎!

话说设计模式是不是就是脱裤子放屁? c/c++时代根本没有这个,自从 java 后就出现这坨屎了。
shijingshijing
2023 年 12 月 1 日
目前看下来:
1 ,多加 try... excep...是可行的,特别是涉及用户输入,文件访问,网络连接相关的功能,可以猛搞,而且显得专业,考虑周到。
2 ,封装成 Class 也会大幅增加代码数量,但是感觉需要改动的地方可能有点多,后续如果老板有大功能,重构的话倒是可以考虑。
3 ,适当自己造轮子这个已经弄过了,有部分输出 xml 就是 writeline 搞的,复杂的还是用标准库的 ElementTree ,程序复杂度有提升,估计后面接手的人看了会皱眉。

大家继续集思广益,我弄好了一起 Append ,也给有类似需求的人参考。coders help coders.
8bryo4p5qn758Dmv
2023 年 12 月 1 日
@hangbale #1 就是,标准库全部自己写一遍不就完了
IsQian
2023 年 12 月 1 日
@aijam 这真的只是 helloworld 嘛。。。
dbus
2023 年 12 月 1 日
没写过 python ,不知道能不能加测试用例
013231
2023 年 12 月 1 日
@godall 我怎么记得 GoF 的 Design Patterns 里用的就是 C++?
leimao
2023 年 12 月 1 日
@darkengine pragma unroll
iosyyy
2023 年 12 月 1 日
@hlwjia #77 抄代码不会提升你任何技术
shyangs
2023 年 12 月 1 日
@godall
@013231

Advanced C++ Programming Styles and Idioms 初版年份 1991
Design Patterns: Elements of Reusable Object-Oriented Software 初版年份 1994

C++ 的設計模式出現的時間比 Java 早,笑嘻了.
error451
2023 年 12 月 1 日
所有运算符,所有常用函数都是可以自己重写的。
比如 * 自己用循环累加的方式重写
len() 自己去计算数组大小
各种排序函数全部自己写
所有可以自动迭代的,都自己写迭代器
所有装饰器都不要用, 自己写
想 with 这种语法糖都不要用,自己写关闭

什么包调用,函数调用根本不存在的, 每次都重新写一遍
cutecore
2023 年 12 月 1 日
单元测试,设计模式
jesusjiang
2023 年 12 月 1 日
建立离职,别害人!
jesusjiang
2023 年 12 月 1 日
建议离职,别害人
bill110100
2023 年 12 月 1 日
别太过分了,照着库,改改变量名,都抄进来就好了,这就能让代码量膨胀好几倍,别把老板当傻子。

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

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

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

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

© 2021 V2EX