为什么if else块中定义的变量可以在块外使用?

Xiu*_*ang 1 python variables scope if-statement tensorflow

import numpy as np
import tensorflow as tf


class simpleTest(tf.test.TestCase):
  def setUp(self):
    self.X = np.random.random_sample(size = (2, 3, 2))

  def test(self):
    a = 4
    x = tf.constant(self.X,  dtype=tf.float32)
    if a % 2 == 0:
      y = 2*x

    else:
      y = 3*x 

    z = 4*y

    with self.test_session():
      print y.eval()
      print z.eval()

if __name__ == "__main__":
  tf.test.main()
Run Code Online (Sandbox Code Playgroud)

这里y是tensorflow变量,并且在if else块中定义,为什么它可以在块外部使用?

gsa*_*ras 6

这比更通用,它与的变量范围有关.记住这一点:

Python 没有块范围!*


考虑这个简单的例子:

x = 2
a = 5
if a == 5:
    y = 2 * x
else:
    y = 3 * x

z = 4 * y
print z     # prints 16
Run Code Online (Sandbox Code Playgroud)

我想说的是,这y不是在if语句的主体范围内定义的局部变量,因此可以在if语句之后使用它.


更多:Variables_and_Scope.

*在Python中阻止范围