Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用map和setattr函数动态设置对象属性_Python_Python 2.7_Dictionary - Fatal编程技术网

Python 使用map和setattr函数动态设置对象属性

Python 使用map和setattr函数动态设置对象属性,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,尝试在Python2.7.8中实现以下功能 class X: pass a = X() b = X() t={1: {1: a, 2: b}} map(lambda x: setattr(x, 'test', 'wow'), t[1].values()) 这就给出了:[None,None],而我希望它将每个属性的“test”设置为“wow” 如果我在map()之外调用setattr(a,'test','wow'),那么一切都会正常运行请查看我答案的底部,以找到更好的方法。下面是对您

尝试在Python2.7.8中实现以下功能

class X:
    pass

a = X()
b = X()
t={1: {1: a, 2: b}}

map(lambda x: setattr(x, 'test', 'wow'), t[1].values())
这就给出了:[None,None],而我希望它将每个属性的“test”设置为“wow”
如果我在map()之外调用setattr(a,'test','wow'),那么一切都会正常运行

请查看我答案的底部,以找到更好的方法。下面是对您的示例中发生的情况的解释(但是,还有更好的方法)

它的行为符合预期。只是
setattr
返回
None
(所有没有显式返回值的函数实际上都返回
None
)。因此,当您
map
it时,它会同时返回
None
,并且
map
会返回
setattr
返回的内容列表:
[None,None]
<代码>映射的副作用是它确实会更改属性,这是您试图做的,但这不是
映射
返回的结果。要更清楚地演示该行为,请执行以下操作:

response = setattr(a, 'test', 'wow2')
print response  
> None
print a.test  
> wow2
为什么不:

for x in t[1].values():
    setattr(x, 'test', 'wow')

相反。根本不清楚为什么需要
map
。您的困惑是因为
map
返回一个列表,但您试图做的不是获取列表,而是对列表中的每个对象执行一些操作。

请查看我答案的底部,以获得更好的方法。下面是对您的示例中发生的情况的解释(但是,还有更好的方法)

它的行为符合预期。只是
setattr
返回
None
(所有没有显式返回值的函数实际上都返回
None
)。因此,当您
map
it时,它会同时返回
None
,并且
map
会返回
setattr
返回的内容列表:
[None,None]
<代码>映射的副作用是它确实会更改属性,这是您试图做的,但这不是
映射
返回的结果。要更清楚地演示该行为,请执行以下操作:

response = setattr(a, 'test', 'wow2')
print response  
> None
print a.test  
> wow2
为什么不:

for x in t[1].values():
    setattr(x, 'test', 'wow')

相反。根本不清楚为什么需要
map
。您的困惑源于
map
返回一个列表,但您试图做的不是获取列表,而是对列表中的每个对象执行一些操作。

它确实将
test
属性设置为“哇”。到底是什么不起作用?使用
map
有什么意义?为什么不使用普通for循环呢?它会将
test
属性设置为“哇”。到底是什么不起作用?使用
map
有什么意义?为什么不使用普通for循环呢?这在python 3中没有,需要用list()包装映射。在python 3中没有,需要用list()包装映射