Python:用于远程变量循环的参数
我试图创建一个循环,循环两个列表,一个是模块中的本地列表,另一个是不同模块中的远程列表,我将其用作包中其他模块访问的临时存储。我可以将其归结为一个小函数,该函数循环遍历所有内容,除了下面代码中保存在remote.asset中的远程变量存储Python:用于远程变量循环的参数,python,loops,Python,Loops,我试图创建一个循环,循环两个列表,一个是模块中的本地列表,另一个是不同模块中的远程列表,我将其用作包中其他模块访问的临时存储。我可以将其归结为一个小函数,该函数循环遍历所有内容,除了下面代码中保存在remote.asset中的远程变量存储 import remote value_name = ['asset', 'liability'] value = {'asset':1.1, 'liability':2.2} def sanity_check(): for i in range(
import remote
value_name = ['asset', 'liability']
value = {'asset':1.1, 'liability':2.2}
def sanity_check():
for i in range(len(value_name)):
if value_name[i] == 'asset':
remote.asset = value['{}'.format(value_name[i])]
local_display = '{:,.2f}'.format(value['{}'.format(value_name[i])])
remote_display = '{:,.2f}'.format(remote.asset)
print('local - ' + str(local_display) + ' remote - ' + str(remote_display))
if value_name[i] == 'liability':
remote.liability = value['{}'.format(value_name[i])]
local_display = '{:,.2f}'.format(value['{}'.format(value_name[i])])
remote_display = '{:,.2f}'.format(remote.liability)
print('local - ' + str(local_display) + ' remote - ' + str(remote_display))
sanity_check()
远程存储只保存值,如下所示:
global asset
asset = 0.0
global liability
liability = 0.0
要从远程存储获取值,我必须使用其名称,如下所示:
remote_display = '{:,.2f}'.format(remote.asset)
我更喜欢像使用局部变量一样使用对变量名的引用
local_display = '{:,.2f}'.format(value['{}'.format(value_name[i])])
我试图找出如何将远程变量的名称(下面的哈希部分)设置为变量:
remote_display = '{:,.2f}'.format(remote.#####)
有没有一种方法可以将远程部分称为.asset部分作为变量,这样我就可以循环一段代码,而不是为我的value\u name列表中的每个可能条目分解一段代码
感谢您的关注;我尝试了很多方法,但不知道如何称呼这个
解决:实现Charles Duffy的答案产生以下代码:
import remote
value_name = ['asset', 'liability']
value = {'asset':1.1, 'liability':2.2}
def sanity_check():
for i in range(len(value_name)):
setattr(remote, value_name[i], value['{}'.format(value_name[i])])
local_display = '{:,.2f}'.format(value['{}'.format(value_name[i])])
remote_display = '{:,.2f}'.format(getattr(remote, value_name[i]))
print('local - ' + str(local_display) + ' remote - ' + str(remote_display))
sanity_check()
根据他提供的额外提示,将会有更多的变化,但这就是我现在的处境。谢谢Charles。您需要的是getattr和setattr
即:
values = {'asset': 1.1, 'liability': 2.2}
def sanity_check():
for key in values.keys():
# Q:Why are you bothering to print remote if you force it to match the local value?
setattr(remote, key, values[key]) ## instead of remote.<key> = values[key]
print('local - {:,.2f} remote - {:,.2f}'.format(values[key],
getattr(remote, key))
发件人:
getattrobject,名称[,默认值]
返回对象的命名属性的值。名称必须是字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,getattrx,“foobar”相当于x.foobar。如果命名属性不存在,则返回默认值(如果提供),否则将引发AttributeError
顺便说一句,为什么要处理数值索引而不是value_name中的值:并且只引用value而不是value_name[i]?兰格兰。。。bit只是降低了代码的可读性,而且速度稍微慢了一点,没有任何好处。类似地,如果value_名称只包含值中的键列表,好的,在原始代码中不是复数的,但它应该是复数的-这样你就可以有一个单数值引用其中的一项,为什么不直接询问值的键是什么,而且根本没有单独的列表?setattr和getattr正是我想要的。非常感谢查尔斯。我现在可以将此循环作为单个代码块运行。还感谢您的所有其他评论和建议-我正在以迭代的方式查看和处理它们,以构建我的Python知识-非常有用。