dud*_*udd 0 python django python-3.x
我已经编写了python代码,并且其中有太多的for循环,因此,我的代码可读性太低,而pylint star太低。
我正在寻找一种方法来用更少的代码来解决相同的问题。
在这里,您可以浏览我的摘录:
numberlist = [1,3,5]
stringlist = ['a', 'b', 'c']
id = '458'
numbered_string = []
for n, s in numberlist, stringlist:
num_str = "{}{}".format(
n,
s,
id,
)
numbered_string.append(num_str)
codes = []
for n,s, sn in numberlist, stringlist, numbered_string:
code = make_code(
n,
s,
sn
)
codes.append(code)
print(codes)
Run Code Online (Sandbox Code Playgroud)
忽略函数make_code(),或假设make_code()为
def make_code(n,s, sn):
return str(n) + str(s) + str(sn)
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我缩短代码段吗?请忽略此功能。我想更好地改进此代码并提高可读性,太多实例不是解决方案。
看一下列表理解。因此,代替:
codes = []
for n, s, sn in zip(numberlist, stringlist, numbered_string):
code = make_code(
n,
s,
sn
)
codes.append(code)
Run Code Online (Sandbox Code Playgroud)
你可以写:
codes = [make_code(n, x, sn) for n, x, sn in zip(numberlist, stringlist, numbered_string)]
Run Code Online (Sandbox Code Playgroud)
请注意,我zip(numberlist, stringlist, numbered_string)在for声明中使用了而不是裸露的numberlist, stringlist, numbered_string。至少对我来说,在python 3.6上,后者不起作用。
列表推导(以及集合,字典,生成器等的相对关系)非常有用,并且具有很多功能,例如在if子句后使用子句进行过滤for以及支持嵌套循环。
如果您的目标是提高代码的可读性,则可能还需要确保间距是一致的(例如n, s, sn而不是n,s, sn),并且变量的命名是一致的-通常,在python中,变量和函数应该用snake_case(例如number_list代替numberlist)。