Python动态对象生成困惑

0 投票
3 回答
782 浏览
提问于 2025-04-16 14:13

我正在写一个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)

撰写回答