Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在函数参数中使用元组约定?_Python_Coding Style_Numpy - Fatal编程技术网

Python 为什么在函数参数中使用元组约定?

Python 为什么在函数参数中使用元组约定?,python,coding-style,numpy,Python,Coding Style,Numpy,我想知道为什么许多函数——特别是在numpy中——使用元组作为函数参数 e、 g: 这有什么用呢?既然第一个参数总是表示数组的大小,那么为什么不简单地使用如下内容呢 a = numpy.ones(10, 5) 是否因为可能存在其他参数,例如dtype?即使如此, a = numpy.ones(10, 5, dtype=numpy.int) 在我看来,这比使用复杂的元组约定要干净得多 感谢您的回复,因为您希望能够: a = numpy.ones(other_array.shape) 和其他数

我想知道为什么许多函数——特别是在numpy中——使用元组作为函数参数

e、 g:

这有什么用呢?既然第一个参数总是表示数组的大小,那么为什么不简单地使用如下内容呢

a = numpy.ones(10, 5)
是否因为可能存在其他参数,例如dtype?即使如此,

a = numpy.ones(10, 5, dtype=numpy.int)
在我看来,这比使用复杂的元组约定要干净得多


感谢您的回复,因为您希望能够:

a = numpy.ones(other_array.shape)

其他数组。shape
是一个元组。有几个函数与此不一致,并且按照您所描述的那样工作,例如
numpy.random.rand()

我认为这一方法的好处之一是可以实现各种方法之间的一致性。我对numpy不太熟悉,但在我看来,我想到的第一个用例是,如果numpy可以返回数组的大小,那么该大小作为一个变量可以直接传递给另一个numpy方法,而不必知道该大小项是如何构建的


另一方面,数组的大小可能有两个分量,但它是作为一个值讨论的,而不是作为两个值讨论的

我猜:这是因为在像
np.ones
这样的函数中,
shape
可以作为关键字参数传递,只要它是一个值。试一试

np.ones(dtype=int, shape=(2, 3))
请注意,得到的值与从
np.ones((2,3),dtype=int)
得到的值相同

[这在Python中更通用:

>>> def f(a, b):
...     return a + b
... 
>>> f(b="foo", a="bar")
'barfoo'

]

为了让python区分
foo(1,2)
foo(1,dtype='int')
foo(1,2,dtype='int')
之间的区别,您必须使用直到python 3才正式引入的纯关键字参数。在Python2.x中,可以使用
**kargs
来实现只包含关键字的参数,但这是不自然的,看起来不像python。出于这个原因,我认为
array
不允许
array(1,2)
但是
restrape(1,2)
是可以的,因为
restrape
不接受任何关键字。

元组在这些数字将一起传递的情况下是有意义的——实际上,作为单个值——或者可以合理预期调用方希望以这种方式处理它们。请注意,NumPy并不完全一致:要么接受可变数量的参数,要么接受它们的元组。@larsmans-是的,但不管它值多少,我相当肯定这是一个相对较新的更改(~
1.3
,可能?)。我清楚地记得必须显式地执行
x.reformate((nrows,ncols))
而不是
x.reformate(nrows,ncols)
。如果
np.ones
的参数数量可变,
np.ones(*other.shape)
就可以正常工作,所以这不是全部。@mklauber:对不起,我删除了我的评论,因为我得到了一个明显的印象,我混淆了这个问题,因为我不知道numpy函数是如何工作的。我最初说过,
os.path.join
的工作方式让我感到困扰,因为如果我已经有一个要加入的路径名列表,我必须说
os.path.join(*args)
。在我看来,使用列表或数组作为函数参数比使用可变数量的参数更合适,因为我要求函数处理一个相同类型的项列表。它也与
str.join
.np.ones(*other.shape)不适用于具有多个参数的函数。在中显式传递单个参数允许该函数将相同的参数传递给其他函数。这是最好的答案,一致性不能是它-其他函数确实使用可变数量的参数。
>>> def f(a, b):
...     return a + b
... 
>>> f(b="foo", a="bar")
'barfoo'