Python:使用远程变量循环的参数

时间:2018-06-14 14:33:06

标签: python loops

我正在尝试创建一个循环遍历两个列表的循环(模块中的一个本地,另一个模块中的另一个远程,我将其用作临时存储以供程序包中的其他模块访问)。我可以将其归结为一个小函数,它循环遍历 remote remote.asset 中所有之外的所有内容。

$onChanges

远程商店只保存值,如下所示:

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])])

有没有办法将远程部分(" .asset"部分)作为一个变量调用,这样我就可以遍历一段代码,而不是为我的每个可能的条目打破一个块。 value_name列表?

感谢您的期待;我尝试了很多方法,但无法弄清楚如何调用这个方法。

解决:实施Charles Duffy的答案产生了以下代码:

remote_display = '{:,.2f}'.format(remote.#####)

根据他提供的其他提示,会有更多更改,但这就是我现在所处的位置。谢谢查尔斯。

1 个答案:

答案 0 :(得分:1)

您想要的是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))

来自the documentation

  

getattr(object, name[, default])

     

返回 object 的命名属性的值。 name 必须是字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,getattr(x, 'foobar')相当于x.foobar。如果named属性不存在,则返回 default (如果提供),否则将引发AttributeError