Python内部函数不打印在外部函数中初始化的值

时间:2018-04-03 05:04:15

标签: python python-3.x closures

在下面的代码中,' message'变量在P1中打印了正确的值,但在P2中没有打印任何内容。我按照编写这段代码的教程,看起来和他写的非常相似。我使用的是Python 3.6。有人可以解释原因吗?

public static function userAssignMachine($userid,$machineid,$url) {
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $url,
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => array(
        'userid' => $userid,
        'machineid' => $machineid
    )
));
$resp = curl_exec($curl);
curl_close($curl);
}

Screen grab of the exact code in tutorial

4 个答案:

答案 0 :(得分:4)

是的,如@see所提到的......除了表单缩进之外,您的代码将导致Stack Overflow:

也许您的代码应如下所示:

def outer_function(msg):
    message = msg
    print(message) #P1
    def inner_function():
        print(message) #P2
    return inner_function()
outer_function("hello")

答案 1 :(得分:0)

除了错误的缩进(我假设是一个拼写错误),你的inner_function会永远递归地调用它自己,所以我希望这里有一个堆栈溢出。

答案 2 :(得分:0)

通常闭包只是能够记住外部函数变量的内部函数,即使外部函数超出范围也是如此。

所以我希望你的代码能够 正确地缩进工作就像应该的那样。

def outer_function(msg): 
      message = msg print(message) #P1 
      def inner_function():
            print(message) #P2 
      return inner_function()

这里,即使outer_function超出范围

,内部函数也会记住变量消息

答案 3 :(得分:-1)

试试这个:

class A:
    message = None

    def outer_function(self, msg):
        self.message = msg
        print(self.message) #P1

    def inner_function(self):
        print(self.message) #P2

然后在你的python shell中:

>>> a = A()
>>> a.inner_function()
None
>>> a.outer_function('Hello!')
Hello!
>>> a.inner_function()
Hello!