python中逗号运算符的意义

2024-05-28 21:04:37 发布

您现在位置: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表达式。我能抬起头来理解它在说什么吗?


Tags: 代码概念np运算符randomoutarraysigma
3条回答

逗号形成一个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

我希望这能回答你的问题。histogram函数返回一个解包的2元组。

这可能是您的解决方案:

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)

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

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

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

如果查看^{}的文档,就会看到它返回以下两个内容:

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

相关问题 更多 >

    热门问题