gpt4 book ai didi

python - 从另一个函数访问一个函数中声明的变量

转载 作者:太空宇宙 更新时间:2023-11-04 09:33:36 25 4
gpt4 key购买 nike

如何访问变量 x对于一个函数来说是局部的 main()来自另一个函数 sub()里面叫main()

下面的 MEW 抛出错误 NameError: global name 'x' is not defined当脚本运行时。

如果我添加 global x, lmain()不再有错误,但我不想让这些变量成为全局变量。

MWE:

def sub():
print "x from main: {}".format(x)
print "l from main: {}".format(l)


def main():
x = 5
l = [1,2,3,4,5]
print "z from top: {}".format(z)
sub()


if __name__ == "__main__":
z = 'SOME'
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]

如果你不想使用这种方法,我想你可以关注 this 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

def function(*args, **kwargs):
if args:
for a in args:
print "value: {} was passed in args".format(a)
if kwargs:
for k, v in kwargs.items():
print "key {} was passed with value: {} in kwargs".format(k, v)


def caller():
x = 5
l = [1,2,3,4,5]
function(x, l = l)

caller()
#value: 5 was passed in args
#key l was passed with value: [1, 2, 3, 4, 5] in kwargs

从这里你可以给locals赋值

函数

locals['x'] = args[0]
locals['l'] = kwargs[l]

OR 使用 dict.get 这样您就可以设置默认值:

l = kwargs.get('l', None)

关于python - 从另一个函数访问一个函数中声明的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54681429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com