【问题标题】:Why variable defined in a if else blocks can be used outside blocks?为什么在 if else 块中定义的变量可以在块外使用?
【发布时间】:2016-07-03 12:07:21
【问题描述】:
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()

这里y是tensorflow变量,定义在if else块内,为什么可以在块外使用?

【问题讨论】:

  • python 中的“块”function 块。所有其他语句产生新的作用域。例如:for i in range(5):pass print(i) 有效,所以for 循环的i 泄漏到循环外。

标签: python variables if-statement scope tensorflow


【解决方案1】:

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

Python没有块作用域!*


考虑这个简单的例子:

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

z = 4 * y
print z     # prints 16

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


更多信息:Variables_and_Scope.

*Block scope in Python

【讨论】:

  • 没有不赞成它的具体原因。如果我看到一个问题,我会否决它。无论如何,我有点怀念python没有块范围的明确提及
  • 好主意@ThiefMaster,我更新了我的答案,非常感谢!
  • @user2886263 有什么理由不接受答案?
猜你喜欢
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2016-11-28
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
相关资源
最近更新 更多