gpt4 book ai didi

python - 以 Python 方式编码

转载 作者:太空狗 更新时间:2023-10-29 22:20:28 24 4
gpt4 key购买 nike

我刚刚在 Uni 学习了 python 的最后半个学期。我真的很喜欢它,并希望获得一些关于如何编写更多“pythonic”代码的技巧。

这是我最近完成的作业中的 __init__ 类。在我写它的时候,我正试图找出如何使用 lambda 或以更简洁、更有效的方式重写它,但没时间了。

def __init__(self, dir):

def _read_files(_, dir, files):

for file in files:

if file == "classes.txt":
class_list = readtable(dir+"/"+file)
for item in class_list:
Enrol.class_info_dict[item[0]] = item[1:]
if item[1] in Enrol.classes_dict:
Enrol.classes_dict[item[1]].append(item[0])
else:
Enrol.classes_dict[item[1]] = [item[0]]

elif file == "subjects.txt":
subject_list = readtable(dir+"/"+file)
for item in subject_list:
Enrol.subjects_dict[item[0]] = item[1]

elif file == "venues.txt":
venue_list = readtable(dir+"/"+file)
for item in venue_list:
Enrol.venues_dict[item[0]] = item[1:]

elif file.endswith('.roll'):
roll_list = readlines(dir+"/"+file)
file = os.path.splitext(file)[0]
Enrol.class_roll_dict[file] = roll_list
for item in roll_list:
if item in Enrol.enrolled_dict:
Enrol.enrolled_dict[item].append(file)
else:
Enrol.enrolled_dict[item] = [file]


try:
os.path.walk(dir, _read_files, None)
except:
print "There was a problem reading the directory"

如您所见,它有点笨重。如果有人有时间或有兴趣,我将非常感谢有关 Python 最佳实践的一些提示。

谢谢。

最佳答案

一些可以清理代码的东西:

使用字典的setdefault。如果 key 丢失,则将其设置为您提供的默认值,然后返回。否则,它只是忽略第二个参数并返回字典中的内容。这避免了笨重的 if 语句。

Enrol.venues_dict.setdefault(key, []).append(file)

>>> x = {}
>>> x.setdefault(99, []).append(5)
>>> x.setdefault(99, []).append(6)
>>> x
{99: [5, 6]}
>>> x.setdefault(100, []).append(1)
>>> x
{99: [5, 6], 100: [1]}

另一种可能性是使用 os.path.join 来制作文件路径。这比仅进行字符串连接更安全。

os.path.join(dir, file)

除此之外,在我看来,在风格方面看起来不错。

关于python - 以 Python 方式编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2941271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com