多次调用同一函数时,Python设计模式更好

时间:2019-01-18 15:15:00

标签: python design-patterns

我有以下Python代码将键和值属性存储到键值数据库中。

 try:
        persistence.set(student_first_name + ".firstname", student_first_name)
        persistence.set(student_last_name + ".last", student_last_name)
        persistence.set(student_id + ".id", student_id)
        persistence.set(student_sex + ".sex", student_sex)
        persistence.set(student_year + ".year", student_year)

    except ValueError:
        exception

是否有更好的设计模式,可以一次又一次地使用不同的参数调用相同的persistence.set()?我也有在应用程序的不同部分中的for循环调用相同的代码。

1 个答案:

答案 0 :(得分:2)

如果将每个数据存储在其自己的变量中,则别无选择,只能手动保存每个数据。但是,如果将它们全部存储在一个集合类型(例如dict)中,则可以使用循环对值进行迭代。例如:

student = {
    "firstname": "John",
    "last": "Smith",
    "id": "4815162342",
    "sex": "male",
    "year": "2000"
}

for key, value in student.items():
    persistence.set(value + "." + key, value)

顺便说一句,我通过将对象的值与指示其用途的字符串连接来创建Redis密钥对我来说有点不寻常。对我来说似乎是自欺欺人。除非您知道约翰·史密斯的年份存储在键“ 2000.year”下,否则您将无法检索该年份,但是如果您已经知道,则从数据库中获取该年份是没有意义的。

我不知道什么是惯用的解决方案,但是在密钥前面加上每个学生唯一的值可能是有意义的。该ID可能已足够:

for key, value in student.items():
    persistence.set(student["id"]+ "." + key, value)