Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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:用于远程变量循环的参数_Python_Loops - Fatal编程技术网

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

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(

我试图创建一个循环,循环两个列表,一个是模块中的本地列表,另一个是不同模块中的远程列表,我将其用作包中其他模块访问的临时存储。我可以将其归结为一个小函数,该函数循环遍历所有内容,除了下面代码中保存在remote.asset中的远程变量存储

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知识-非常有用。