【问题标题】:Why does the comma symbol in Python return true?为什么Python中的逗号符号返回true?
【发布时间】:2017-06-20 13:50:48
【问题描述】:

我想知道为什么逗号符号“,”返回true:

mutant = toolbox.clone(ind1)
ind2, = tools.mutGaussian(mutant, mu=0.0, sigma=0.2, indpb=0.2)
print (ind2 is mutant)
>>>True

但是当我删除逗号符号时:

ind2 = tools.mutGaussian(mutant, mu=0.0, sigma=0.2, indpb=0.2)
print (ind2 is mutant)
>>>False

它返回假。 如果有人能解释这背后的机制,将非常感激。

【问题讨论】:

  • 您正在将包含一个元素的可迭代对象分配给名称的元组
  • 换句话说,在您的第二个版本中,ind2[0] is mutant 将起作用。
  • 只需输入ind2 以查看变量在每种情况下的确切含义。您会看到它是两个相似但不同的值。
  • 来自mutGaussian() documentation返回:一个人的元组。
  • 感谢提醒,区别在于列表和元组。

标签: python operation


【解决方案1】:

您正在调用的deap.tools.mutGaussian() function 返回一个包含单个值的元组

返回:一个人的元组。

当您省略逗号时,您将结果元组分配给单个变量。

使用逗号,您要求 Python 将右侧的可迭代对象解压缩为左侧的一系列名称;因为左侧和右侧都只有一个元素,所以这项工作。您将返回的元组中的值 in 解压缩为单个变量。

Assignment statements reference documenation

赋值语句计算表达式列表(请记住,这可以是单个表达式或逗号分隔的列表,后者产生一个元组)并将单个结果对象从左到右分配给每个目标列表。

如果您想在不使用可迭代赋值的情况下测试该单个值,则必须手动从元组中获取该值:

ind2 = tools.mutGaussian(mutant, mu=0.0, sigma=0.2, indpb=0.2)
print(ind2[0] is mutant)

注意[0] 索引。

【讨论】:

    【解决方案2】:

    当您使用逗号声明或分配变量时,您正在创建一个tuple

    【讨论】:

      猜你喜欢
      • 2021-07-26
      • 2022-01-14
      • 2014-02-05
      • 2021-07-02
      • 2012-02-08
      • 2020-08-11
      • 1970-01-01
      • 2011-03-08
      • 2015-07-27
      相关资源
      最近更新 更多