Zha*_*all 7 python variables return function
我正在尝试创建一个设置局部变量的脚本,从函数中引用它,并且可以将操作值返回到主范围(或者它的任何调用;我是Python的新手)
我已经简化了我的代码,以显示我想要完成的最基本的操作,即从模块将局部导入到功能块中,我想.
我已经通过使用来实现这一点globals
,但这不是最好的解决方案...
chambersinreactor = 0;
cardsdiscarded = 0;
def find_chamber_discard():
"""Find chambers and discard in row (reads each player slot)"""
chambersinreactor = 0; # Resets the variable, not what I want
cardsdiscarded = 0; # Resets the variable, not what I want
chambersinreactor += 1
cardsdiscarded += 1
return # Don't know what to put here
find_chamber_discard()
print chambersinreactor # prints as 0, should be 1
print cardsdiscarded # prints as 0, should be 1
Run Code Online (Sandbox Code Playgroud)
Ben*_*Ben 20
函数不应该知道它们被调用的范围; 函数的要点是创建一个可重用的代码块,可以从不同的地方多次调用.
通过将信息传递给输入变量,可以将信息传递给函数.该函数通过返回信息将信息传回给调用者.
管理作用域的变量是该作用域中的代码,而不是它调用的任何函数.如果需要将变量设置为由函数确定的值,那么您可以使用函数返回这些值,并使用它们来设置变量.如果函数计算的值取决于调用范围中的变量值,则需要将它们作为参数传递给函数.您正在调用的函数不应该知道您正在使用哪些变量,并且不应该弄乱它们.
把所有这些放在一起,你想要做的是这样的:
def find_chamber_discard(chambersinreactor, cardsdiscarded):
chambersinreactor += 1
cardsdiscarded += 1
return (chambersinreactor, cardsdiscarded)
chambersinreactor = 0;
cardsdiscarded = 0;
chambersinreactor, cardsdiscarded = find_chamber_discard(chambersinreactor, cardsdiscarded)
print chambersinreactor
print cardsdiscarded
Run Code Online (Sandbox Code Playgroud)
有办法通过全局变量或操纵可变数据结构来解决这个问题,但最终它们会使您的程序不那么灵活,并且更容易包含难以发现的错误.这些技术有一个地方,但是您与函数进行信息传递的第一种方法实际上应该是传递参数并接收返回值.