python中逗号运算符的含义

时间:2017-08-08 17:37:17

标签: python python-3.x

我理解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表达式。我能从中了解什么才能理解它的含义?

3 个答案:

答案 0 :(得分:6)

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数组的原因。

答案 1 :(得分:0)

这可能是您的解决方案:

def func():
    return 'a', 3, (1,2,3)  # returns a tuple of 3 elements (str, int, tuple)

x1, x2, x3 = func()  # unpacks the tuple of 3 elements into 3 vars
# x1: 'a'
# x2: 3
# x3: (1,2,3)

答案 2 :(得分:0)

逗号形成tuple,在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

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