Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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_Function_Variables_Global - Fatal编程技术网

Python-将全局变量的成员传递给函数,仍然进行更改

Python-将全局变量的成员传递给函数,仍然进行更改,python,function,variables,global,Python,Function,Variables,Global,我有以下代码: USERS = None class User(object): name = "" jobs = [] def __init__(self, name, jobs): self.name = name self.jobs = jobs def main(): global USERS jobs = ["Mow", "Rake", "Mulch"] USERS = [User("Fred"

我有以下代码:

USERS = None

class User(object):
    name = ""
    jobs = []

    def __init__(self, name, jobs):
        self.name = name
        self.jobs = jobs


def main():
    global USERS

    jobs = ["Mow", "Rake", "Mulch"]

    USERS = [User("Fred", jobs), User("Mark", jobs), User("Greg", jobs)]

    other_function(USERS[0].jobs[0])

    return

def other_function(job):

    job = "Nothing"

    save(USERS)

    return


def save(users):
    f = open("save_file", "w")

    for user in users:
        f.write(user.name+"\n")
        for job in user.jobs:
            f.write(job+"\n")

    return

if __name__=='__main__':
    main()
    raw_input()
输出文件“save_file”如下所示:

Fred
Mow
Rake
Mulch
Mark
Mow
Rake
Mulch
Greg
Mow
Rake
Mulch

这不是我想要的-我想要在全局变量
USERS
中反映对
job
的更改,以便函数
save
将正确的数据输出到文件(文件中的第2行将是'Nothing'而不是'Mow')。我曾尝试在
其他函数
中声明
全局用户
,但没有成功。非常感谢您的帮助。

您必须意识到
其他功能中的
作业
用户
无关,只是它的值等于
用户[0]。作业[0]
。因此无论您对它做什么,
用户
都不会改变。它与
全局
无关。因此,请将代码更改为:

def main():
    global USERS

    jobs = ["Mow", "Rake", "Mulch"]
    USERS = [User("Fred", jobs), User("Mark", jobs), User("Greg", jobs)]
    USERS[0].jobs[0] = other_function(USERS[0].jobs[0])

    save(USERS)

def other_function(job):
    job = 'Nothing' #do something on the value
    return job

我不相信您在将其传递给
save()
函数之前,实际上正在修改other_函数中的
用户。

我认为这是有意义的。但是-上面的代码不允许'other_function'接受动态的'job'输入,这正是我想要的。那当然可以。我发布的代码实际上只是一个更大想法的简化-在真正的代码中,我会传递类似“用户[0]。作业[0]。日志[0]。搜索属性[0]。嵌套要复杂得多。我真正需要的是确保“作业”始终是指向全局“用户”列表中相应成员的指针。我找不到任何关于这是否可行的信息。我认为您想要的在Python中是不可访问的。我搜索了很多。我能找到的最好方法是我更新的代码。@对于那些想知道解决方案/原因的人,请注意-对象用户[0]。作业[0]是一个字符串。字符串将通过实例“other_function(用户[0]。作业[0])中的值进行传递。避免这种情况的一种方法是使用一个封装用户[0]。作业[0]的类,例如带有成员变量“name=”Rake的“class job”“这是一个选择,但绝对不是更好的选择。返回一个值可以简单得多。