Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.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_Python 2.7_Python 3.x - Fatal编程技术网

Python 是否可以在另一个函数中访问局部变量?

Python 是否可以在另一个函数中访问局部变量?,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,目标:需要在另一个函数中使用局部变量。这在Python中是可能的吗 我想在其他函数中使用局部变量。因为在我的例子中,我需要使用一个计数器来查看发生的连接数和释放的连接数/为此,我维护一个计数器。为了实现这一点,我编写了计数示例代码,并在另一个函数中返回局部变量 如何在test()函数中打印t和my_reply 代码:counter_glob.py my_test = 0 t = 0 def test(): print("I: ",t) print("IIIIIIII: ",my

目标:需要在另一个函数中使用局部变量。这在Python中是可能的吗

我想在其他函数中使用局部变量。因为在我的例子中,我需要使用一个计数器来查看发生的连接数和释放的连接数/为此,我维护一个计数器。为了实现这一点,我编写了计数示例代码,并在另一个函数中返回局部变量

如何在
test()
函数中打印
t
my_reply

代码:counter_glob.py

my_test = 0
t = 0

def test():
    print("I: ",t)
    print("IIIIIIII: ",my_reply)

def my():
    global t
    reply = foo()
    t = reply
    print("reply:",reply)
    print("ttttt:",t)

def foo():
    global my_test
    my_test1 = 0
    my_test += 1
    print my_test1
    my_test1 = my_test
    my_test += 1
    print("my_test:",my_test1)
    return my_test1

my()
结果:

$python计数器\u glob.py
0
(“我的测试:”,1)
("答复",1)
(‘ttttt:’,1)

正如我所知,您无法访问函数外部的局部变量。但在我看来,即使你能做到,这也是一种不好的做法

为什么不使用函数或类呢

connections = 0

def set_connection_number(value):
    global connections; connections = value;

def get_connection_number():
    global connections;
    return connections;

# test
set_connection_number(10)
print("Current connections {}".format(get_connection_number()))

访问函数的本地范围有不同的方法。如果需要,可以通过调用
locals()
返回整个局部范围。这将为您提供函数的整个局部范围,保存局部范围是不典型的。对于函数,您可以将所需的变量保存在函数本身中,
func.var=value


您现在可以正常访问
t
reply
。每次调用函数
my
reply
时,将更新
foo
返回的任何内容,并将其分配给
my.reply

除了
关闭
之外,您将无法访问功能范围之外的本地变量。
如果必须在不同的方法之间共享变量,最好像@pavnik所提到的那样使它们成为全局变量。

不,你不能,这就是“局部”的意思。除此之外,在代码中的任何地方都没有定义名为
my_reply
的任何类型的变量。在示例代码中,我有一个my函数,在我的函数中,我将reply赋值给全局变量。当我在函数中打印全局变量时,即t。按预期打印值。但我不知道为什么在测试功能中它不打印?因为t在my函数中用reply更新。在函数
my()
中,将一个值分配给名为
reply
的局部变量,然后将该值分配给名为
t
的全局变量。在
test()
函数中,您引用了
t
、全局变量和另一个名为
my_reply
的变量,该变量未在任何地方定义
my_reply
不是其他函数中局部变量
reply
的另一个名称。你不能那样做。您可以在
my()
中创建函数属性,并使用另一个问题中所示的技术在
test()
中访问它。这将允许您定义
my.reply
def test():
    print("I: ", my.t)
    print("IIIIIIII: ", my.reply)

def my():
    my.reply = foo() 
    my.t = m.reply
    print("reply:", my.reply)
    print("ttttt:", my.t)