python中逗号运算符的含义

新手上路,请多包涵

我了解有关 python 中逗号运算符的简单概念。例如,

 x0, sigma = 0, 0.1

表示 x0=0,且 sigma=0.1。但是我获得了一个代码,其中一行看起来像下面这样。

 y, xe = np.histogram(np.random.normal(x0, sigma, 1000))

其中 y 和 xe 的输出如下。

 y
Out[10]: array([  3,  17,  58, 136, 216, 258, 189,  87,  31,   5], dtype=int64)

xe
Out[11]:
array([-0.33771565, -0.27400243, -0.21028922, -0.146576  , -0.08286279,
       -0.01914957,  0.04456364,  0.10827686,  0.17199007,  0.23570329,
        0.2994165 ])

我不确定如何阅读 y, xe 表达式。我可以查找什么来理解它在说什么?

原文由 user7852656 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

x0, sigma = 0, 0.1 是语法糖。幕后发生了一些事情:

  • 0, 0.1 隐式创建两个元素的元组。

  • x0, sigma = 将该元组解压到这两个变量中。

如果您查看 numpy.histogram 的文档,您会看到它返回以下两个内容:

 hist : array
The values of the histogram. See density and weights for a description of the possible semantics.

bin_edges : array of dtype float
Return the bin edges (length(hist)+1).

您的 y, xe = ... 分别解压两个返回数组的元组。这就是为什么你的 y 被分配给一个 numpy int64 数组,而你的 xe 被分配给一个 numpy float 数组。

原文由 JoshuaRLi 发布,翻译遵循 CC BY-SA 3.0 许可协议

一个逗号形成一个 元组,在 Python 中它看起来就像一个不可变的列表。

Python 进行 _解构赋值_,这在其他一些语言中也有,例如现代 JavaScript。简而言之,单个赋值可以将多个左侧变量映射到相同数量的右侧值:

 foo, bar = 1, 2

这相当于 foo = 1bar = 2 完成。这可用于交换值:

 a, b = b, a

您可以在右侧使用元组或列表,如果长度匹配,它将以相同的方式解压缩(解构):

 a, b = [1, 2]
# same effect as above:
xs = [1, 2]
a, b = xs
# again, same effect using a tuple:
ys = 1, 2
a, b = ys

您可以从函数返回元组或列表,并立即解构结果:

 def foo():
  return (1, 2, 3)  # Parens just add readability

a, b, c = foo()  # a = 1; b = 2; c = 3

我希望这回答了你的问题。直方图函数返回一个解压缩的二元组。

原文由 9000 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题