6月30日更新
鉴于题主说老师已经收回对行数的要求,就请大家看过则罢,不要再点赞了(还有收藏的是什么鬼?)。本文说的不过是一些投机取巧的伎俩,不值取,不可取。
~~~以下是原文~~~:
一个熟练工程序员,每天有效代码大概50行(很多人不信,用项目最终代码量除以人天就知道了),月薪大概12000元。外包出去得上万吧。
我们这边刚开一个报价20万的项目,预计有效代码也就5000行。
如果题主真的没有什么好办法了,建议题主从以下几个方面着手增加代码量
1 增加项目复杂度。增加项目模块,比如UI用PyQt写一遍,再用HTML5写一遍,比如后端用后端渲染方式写一遍,又以RESTful写一遍,老师问为什么写这么多遍,你说你项目是跨平台的,搞个桌面版,搞个网页版,还搞好多接口给未来移动端用。后台每个业务都单独做一个服务,互相调用。
2 不追求pythonic。能写两行的不要写成一行,不用列表推导,不用匿名函数,少用继承,少用生成器,少用装饰器;分支循环多嵌套。
3 大量硬编码。把模板、配置、字符串、变量、SQL硬编码在代码里。
4 分行写。如
容器类型分行写:
some_list: list = [
e1,
e2,
...
]
some_dict: dict = {
k1: v1,
k2: v2,
...
}
链式调用分行写。如(下面代码中也包含了SQL分行写和硬编码)
sc = SparkSession \
.builder \
.appName("some_app_name")\
.enableHiveSupport()\
.getOrCreate()
... ...
spark \
.sql("""select name
,age
from student
where grade > 3
and sex = 0
""") \
.write \
.saveAsTable(sometable, mode='overwrite')
函数参数分行写
a = some_func(
arg1,
arg2,
arg3,
...
)
5 手动展开。如
# 常规写法
sql_pattern = 'select city, population from country where city = {}'
cities = [city1, city2, city3, city4, ...., city100]
for city in cities:
sql = sql_pattern.format(city)
do_something_with_sql(sql)
# 填充代码量的写法
SQLs: list = [
"""select city
,population
from country
where city = city1
""",
"""select city
,population
from country
where city = city2
""",
...
"""select city
,population
from country
where city = city100
""",
]
for sql in SQLs:
do_something_with_sql(sql)
6 注释变有效代码。如
按下面这种方式,代码检测软件可能认为是注释而不是有效代码,
"""
this module contains some utils functions.
Usage:
bala bala ...
"""
按下面这种方式,代码检测软件会认为是有有效代码,而功能没有发生改变,
__doc__ = """
this module contains some utils functions.
Usage:
bala bala ...
"""
这适用于模块注释、类注释、函数注释。
按下面这种方式,代码检测软件可能认为是注释而不是有效代码,
if not IPPool.has_any_ip():
# 如果没有IP了
do_something()
把注释改成日志,就成了有效代码,
if not IPPool.has_any_ip():
log.info('没有IP了')
do_something()
7 多写日志,日志内容多分行。
8 多写函数快捷方式。比如你一个函数只要传入不同参数就能完成多个任务,那你多写几个函数来调用这个多功能函数,把参数写死,变成多个单功能函数。老师问为什么重复实现,你说这是shortcut,很多库都这么比如
def request(r, method):
pass
# 可以写成
def get(r):
return request(r, method="get")
def post(r):
return request(r, method="post")
9 重复实现轮子。抄一些开源代码在你的项目里。
10 多写测试。一个项目里,测试代码能占到总代码量的三分之二之多。你多编用户故事,多编工作流,多写测试用例,何愁代码量上不来。
11 不知道前端代码算不算项目代码量,如果算的话那可就简单了,嘿嘿,鬼知道HTML里能塞啥子东西进去。你尽可能塞些JS代码进去,里面尽是些永远也不会发生的事件。
以上都是些不得已的方法,真正建议的,还是希望题主把这个任务当做一次挑战,认真地完成,而不要像上面那样投机取巧。投机取巧会成为一种习惯的。认真做作业,即便最终没得到老师认可又如何,尽吾志者而不能至也,其孰能讥之乎?