每个变量的字典或所有变量的字典?

时间:2013-09-13 10:09:08

标签: python dictionary operating-system

我有一个程序,每个操作系统(Linux和Windows)需要不同的变量。为每个变量设置一个字典会更好吗:

# 'win'dows and 'lin'ux 
system_root = { "win" : r"C:",
                "lin" : r"/" }

data_folder = { "win" : r"C:\Program Files",
                "lin" : r"/usr/share/applications" }

或每个OS变量的单独字典,如下所示:

vars_win = { "system_root" : r"C:",
             "data_folder" : r"C:\Program Files" }

vars_lin = { "system_root" : r"/",
             "data_folder" : r"/usr/share/applications" }

对不起,如果问题标题对我的意图不是很清楚,我想不出更好的方法来表达它。

2 个答案:

答案 0 :(得分:2)

我更喜欢第二种解决方案,因为你可以这样做:

if platform == windows:
    vars = win_vars
elif platform == posix:
    vars = lin_vars

然后在你的应用程序中,你不必处理de branching。只需使用vars变量。

注意:我没有指定检查平台的方法,因为根据您的需要有多种方式。您可以查看sys.platform,使用platform模块或检查posixnt ...是否在sys.builtin_module_names

答案 1 :(得分:0)

看起来对这些“变量”的大部分或全部访问都将使用常量键,因此更好的解决方案是使用类层次结构:

class CommonVars:
    pass

class WindowsVars(CommonVars):
    system_root = "C:\\"
    data_folder = "C:\\ProgramData"

class LinuxVars(CommonVars):
    system_root = "/"
    data_folder = "/usr/share/applications"

if platform == windows:
    vars = WindowsVars
elif platform == posix:
    vars = LinuxVars

... do something with vars.system_root ...

如果看起来很有用,你可以使用特定于系统的行为方法将它们扩展为成熟的类。

在这个例子中没有使用基类,所以它可能完全是多余的,但我还是会包含它,以防万一你希望包含两个平台之间实际相同的系统属性,但如果你增加了对第三个人的支持。