Python 从另一个函数访问函数中声明的变量
如何从另一个在main内部调用的函数子函数访问函数main的局部变量x 下面的MEW抛出一个错误NameError:在运行脚本时未定义全局名称“x” 如果我在main中添加全局x,l,就不会再有错误了,但我不想让这些变量成为全局变量 MWE:Python 从另一个函数访问函数中声明的变量,python,Python,如何从另一个在main内部调用的函数子函数访问函数main的局部变量x 下面的MEW抛出一个错误NameError:在运行脚本时未定义全局名称“x” 如果我在main中添加全局x,l,就不会再有错误了,但我不想让这些变量成为全局变量 MWE: Edit1我正在编辑一个现有的代码,我不想改变函数的算术性将参数作为参数传递,以实现您想要的功能 def sub(x, l): print "x from main: {}".format(x) print "l from main: {}
Edit1我正在编辑一个现有的代码,我不想改变函数的算术性将参数作为参数传递,以实现您想要的功能
def sub(x, l):
print "x from main: {}".format(x)
print "l from main: {}".format(l)
def main(z):
x = 5
l = [1,2,3,4,5]
print "z from top: {}".format(z)
sub(x, l)
if __name__ == "__main__":
z = 'SOME'
main(z)
这张照片是:
z from top: SOME
x from main: 5
l from main: [1, 2, 3, 4, 5]
如果您不想使用这种方法,我想您可以遵循answer的方法,尽管在这种情况下似乎很复杂
import inspect
z = 'SOME'
def sub():
frame = inspect.currentframe()
locales = None
try: locales = frame.f_back.f_locals
finally: del frame
if locales:
for k, v in locales.items():
print("{} from main: {}".format(k, v))
def main():
x = 5
l = [1,2,3,4,5]
print("z from top: {}".format(z))
sub()
main(z)
如果你能把它变成一个上下文管理器,也许这会更干净
也可以使用*args和*kwargs
从这里可以将值指定给局部变量
在功能范围内
或者使用dict.get,这样您可以设置默认值:
l = kwargs.get('l', None)
将参数作为参数传递可以得到所需的操作
def sub(x, l):
print "x from main: {}".format(x)
print "l from main: {}".format(l)
def main(z):
x = 5
l = [1,2,3,4,5]
print "z from top: {}".format(z)
sub(x, l)
if __name__ == "__main__":
z = 'SOME'
main(z)
这张照片是:
z from top: SOME
x from main: 5
l from main: [1, 2, 3, 4, 5]
如果您不想使用这种方法,我想您可以遵循answer的方法,尽管在这种情况下似乎很复杂
import inspect
z = 'SOME'
def sub():
frame = inspect.currentframe()
locales = None
try: locales = frame.f_back.f_locals
finally: del frame
if locales:
for k, v in locales.items():
print("{} from main: {}".format(k, v))
def main():
x = 5
l = [1,2,3,4,5]
print("z from top: {}".format(z))
sub()
main(z)
如果你能把它变成一个上下文管理器,也许这会更干净
也可以使用*args和*kwargs
从这里可以将值指定给局部变量
在功能范围内
或者使用dict.get,这样您可以设置默认值:
l = kwargs.get('l', None)
做你想做的事情的最好方法,也需要最少的改变。只要改变你声明变量的方式;通过在变量名之前添加函数名,您可以从代码中的任何位置访问变量
def sub():
print "x from main: {}".format(main.x)
print "l from main: {}".format(main.l)
def main():
main.x = 5
main.l = [1,2,3,4,5]
print "z from top: {}".format(z)
sub()
if __name__ == "__main__":
z = 'SOME'
main()
这将打印:
z from top: SOME
x from main: 5
l from main: [1, 2, 3, 4, 5]
做你想做的事情的最好方法,也需要最少的改变。只要改变你声明变量的方式;通过在变量名之前添加函数名,您可以从代码中的任何位置访问变量
def sub():
print "x from main: {}".format(main.x)
print "l from main: {}".format(main.l)
def main():
main.x = 5
main.l = [1,2,3,4,5]
print "z from top: {}".format(z)
sub()
if __name__ == "__main__":
z = 'SOME'
main()
这将打印:
z from top: SOME
x from main: 5
l from main: [1, 2, 3, 4, 5]
将它们作为参数传递给函数。将它们作为参数传递给函数。我正在编辑现有代码,不希望更改函数的算术数。编辑我的应答添加了另一个选项我正在编辑现有代码,不希望更改函数的算术数。编辑我的应答添加了另一个选项