Python动态对象生成困惑
我正在写一个Python脚本,这个脚本会读取一个文件夹,然后对文件夹里特定类型的每个文件,创建一个字典或者自定义对象。
我觉得自己有点傻,但当我到达实际创建字典的部分时,我对如何实例化和跟踪这些动态对象感到困惑。
#Pseudocode
for each conf file in given directory:
x = customObject('filename') # variable name fail
track_list.append(customObject('filename')) # this seems weird
我是不是应该创建这些对象并把它们添加到一个列表里?人们通常是怎么做的呢?我感觉自己在写的代码好像是在写更多的代码?
3 个回答
0
在编程中,有时候我们需要处理一些数据,比如从一个地方获取信息,然后把它放到另一个地方。这就像是把水从一个杯子倒到另一个杯子一样。
有些时候,我们会遇到一些问题,比如数据格式不对,或者数据不完整。这就像是你想把水倒进一个有洞的杯子,水会漏出来,根本倒不进去。
为了避免这些问题,我们需要检查数据的状态,确保它是正确的。就像在倒水之前,先看看杯子有没有破损,确保水能顺利倒进去。
在编程中,我们可以用一些工具和方法来帮助我们检查和处理这些数据。这样可以让我们的程序运行得更顺利,不会出现意外的错误。
my_objects = {name:customObject(name) for name in dir if isMyType(name)}
1
@nmichaels 的回答是最简洁、最符合 Python 风格的方法。还有一种更短的写法:
track_list = map(customObject, directory)
编辑:哦,我明白了,你想要一个字典,尽管你的伪代码是一个列表。你可以这样做:
result = dict((filename, customObject(filename)) for filename in directory)
解释:dict
函数接受一个可以被遍历的对象,这个对象在遍历时会产生元组,然后将这些元组转换成字典,比如:
>>> dict([('hey', 3), ('food', 4), ('haxhax', 6)])
{'food': 4, 'haxhax': 6, 'hey': 3}
2
track_list = [custom_object(filename) for filename in directory]
这里的“directory”指的是你关心的文件名列表,这是一种很常见的写法。如果你想要一个字典,里面存放文件名作为关键词,你可以这样做:
custom_dict = dict((filename, custom_object(filename)) for filename in directory)