我理解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表达式。我能从中了解什么才能理解它的含义?
答案 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 = 1
和bar = 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元组。