在python中,整个文件可以只是一个变量吗?
我看到一个javascript项目在它们自己的文件中定义了非常大的变量,这些文件的名称与变量的名称相同,例如,名为marker的大型数组位于一个名为marker.js的文件中。该变量可以方便地直接用于任何导入,就像在同一个文件中一样直接访问它 现在我有一个python项目中的大变量,我想知道我是否可以做类似的事情,即将非常大的列表重构为自己的文件,或者这不可能/不是一个好主意 多谢各位 更新 我的“非常大的变量”基本上是我能提供的最详细的地理信息:在python中,整个文件可以只是一个变量吗?,python,file,variables,Python,File,Variables,我看到一个javascript项目在它们自己的文件中定义了非常大的变量,这些文件的名称与变量的名称相同,例如,名为marker的大型数组位于一个名为marker.js的文件中。该变量可以方便地直接用于任何导入,就像在同一个文件中一样直接访问它 现在我有一个python项目中的大变量,我想知道我是否可以做类似的事情,即将非常大的列表重构为自己的文件,或者这不可能/不是一个好主意 多谢各位 更新 我的“非常大的变量”基本上是我能提供的最详细的地理信息: location_map_br = {
location_map_br = {
1: {
'name': 'São Paulo'.decode('utf-8'),
'lat': -23.55,
'long': -46.64,
'radius': 294200,
},
2: {
'name': 'Rio De Janeiro',
'lat': -22.90,
'long': -43.21,
'radius': 294200,
},
代码还可以,它只需要结构化,以便大变量避开应用程序逻辑 我不能完全确定你的问题,但这不是你的目的吗
示例:我有一些zipcode逻辑和一个包含实际zipcode的大型python数据结构:
zipproj/zipcodelogic.py
zipproj/zipcodes.py
其中zipcodes.py
看起来像
zipcodes = [
('10304', 'Richmond County, NY'),
...
# and over 42,000 more zipcodes
# http://en.wikipedia.org/wiki/ZIP_code#Statistics
...
]
在zipcodelogic.py
中,您可以简单地导入zipcodes
(列表的句柄是zipcodes.zipcodes
)
在其他情况下,人们可能也会研究对象序列化,例如,via或。我不完全确定您的问题,但这不是目的吗
示例:我有一些zipcode逻辑和一个包含实际zipcode的大型python数据结构:
zipproj/zipcodelogic.py
zipproj/zipcodes.py
其中zipcodes.py
看起来像
zipcodes = [
('10304', 'Richmond County, NY'),
...
# and over 42,000 more zipcodes
# http://en.wikipedia.org/wiki/ZIP_code#Statistics
...
]
在zipcodelogic.py
中,您可以简单地导入zipcodes
(列表的句柄是zipcodes.zipcodes
)
在其他情况下,还可以研究对象序列化,例如,通过或。这是一个非常好的主意,尤其是如果这些值是定义的常量或查找表 以下是我工作的一些代码中的查找表摘录(开源,所以我不会泄露任何秘密): 这个大的转换表保存在一个单独的文件中,只需根据需要导入即可,而不必把代码弄得乱七八糟
from library import DCOM_ERROR_CONSTANTS
这是一个非常好的主意,尤其是如果这些值是定义的常量或查找表 以下是我工作的一些代码中的查找表摘录(开源,所以我不会泄露任何秘密): 这个大的转换表保存在一个单独的文件中,只需根据需要导入即可,而不必把代码弄得乱七八糟
from library import DCOM_ERROR_CONSTANTS
我不是100%确定我完全理解你的要求 此外,我不知道这是否只是一个语言问题,但是您将您的值称为变量而不是常量,因此我想知道模块是否真的是您想要的[严格地说,在python中没有真正的常量。对于这个答案,我将其视为“常量”其值不变且在源代码中而不是在运行时分配的变量] 但是:在python中,获取变量持久性(=运行时分配的值)的标准方法是通过和模块。另一方面,模块是导入常量的标准方式,但为了防止名称空间污染,必须小心使用它们 例如,加载常量的标准方法如下所示:
from pygame.locals import *
这是可行的,但如果在您的模块中有其他导入(例如,如果在pygame.locals
中,您从numpy import sum编写了)导入局部变量
时,文件中的sum
定义为numpy.sum
,而不是标准的sum
内置函数。。。这被称为“名称空间污染”
为了避免这种情况,但仍然能够在源代码中导入局部变量
,您可以定义模块变量\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>,该变量将在使用星形(*
嗯 我不能100%确定我完全理解您的要求
此外,我不知道这是否只是一个语言问题,但是您将您的值称为变量而不是常量,因此我想知道模块是否真的是您想要的[严格地说,在python中没有真正的常量。对于这个答案,我将其视为“常量”其值不变且在源代码中而不是在运行时分配的变量]
但是:在python中,获取变量持久性(=运行时分配的值)的标准方法是通过和模块。另一方面,模块是导入常量的标准方式,但为了防止名称空间污染,必须小心使用它们
例如,加载常量的标准方法如下所示:
from pygame.locals import *
这是可行的,但如果在您的模块中有其他导入(例如,如果在pygame.locals
中,您从numpy import sum编写了)导入局部变量
时,文件中的sum
定义为numpy.sum
,而不是标准的sum
内置函数。。。这被称为“名称空间污染”
为了避免这种情况,但仍然能够在源代码中导入局部变量
,您可以定义模块变量\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>,该变量将在使用星形(*
嗯 当然这是个好主意,正如Miku和Paul已经解释过的那样,这是可能的。还有另一种选择,将数据存储在csv文件或xml中,但我认为只有当其他程序(不是用python编写的)必须直接访问该数据时,才值得这样做。当然这是一个好主意,作为Mi