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”“这是一个选择,但绝对不是更好的选择。返回一个值可以简单得多。