Python中使用_来命名变量的原因

在阅读TensorFlow中Slim库里Inception网络的代码时,发现有用单下划线命名的变量,来接收函数返回值,而且之后也没有用到。当时就猜测是不是意为不用的变量。代码如下:

def testEvaluation(self):
    batch_size = 2
    height, width = 224, 224
    num_classes = 1000

    eval_inputs = tf.random_uniform((batch_size, height, width, 3))
    logits, _ = inception.inception_v2(eval_inputs, num_classes,
                                       is_training=False)
    predictions = tf.argmax(logits, 1)

    with self.test_session() as sess:
      sess.run(tf.global_variables_initializer())
      output = sess.run(predictions)
      self.assertEquals(output.shape, (batch_size,))

第七行中,该函数有两个返回值,第一个是网络的权重参数,第二个是查询字典,可以获得网络中所有张量名称,如MaxPool_2a_3x3, Conv2d_2b_1x1, Conv2d_2c_3x3等。

此处由于是测试Evaluation,因此不需要获取网络内部张量的输出,故endpoint弃而不用,以”_”命名。

上网查询后,在StackOverflow找到了关于命名为”_”的变量的详细解释:

  1. 在交互式命令行中,使用命名为”_”的变量来保存上一次运行或上一条语句的结果

  2. 考虑到程序的国际化翻译,对某位置的文本获取时需要调用如gettext()等函数,来把英文转化为其他语言。为了不影响阅读,同时避免通篇的gettext()调用,可以在开头将gettext()函数赋值给_,随后便可用_来代替,提升阅读体验。例:

    raise forms.ValidationError(_("Please enter a correct username"))
  3. 最后一种便是上文提到的,用_变量存储不需要的返回值。如果使用字母命名,读者可能会认为这是个有意义的变量,而去上下文继续查找该变量是否有使用。

需要注意的是,上述的后两种用法会有冲突,因此需要避免在需要国际化的程序中使用_代表忽略的变量。你也可以选择在需要国际化的程序中,也可改为使用两条下划线_来代表忽略的变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值