Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 TypeError:p_vinet()接受2个位置参数,但给出了4个_Python_Arguments_Typeerror_Jupyter - Fatal编程技术网

Python TypeError:p_vinet()接受2个位置参数,但给出了4个

Python TypeError:p_vinet()接受2个位置参数,但给出了4个,python,arguments,typeerror,jupyter,Python,Arguments,Typeerror,Jupyter,我正在尝试将参数传递给函数,我认为我做得很正确,但仍然会出现错误: TypeError:p_vinet()接受2个位置参数,但给出了4个 下面是我的代码片段,然后我将给出给出错误的部分 volumeMgO是以前计算的数组,由以下内容组成: array([ 7.64798549, 7.67153344, 7.67153344, 7.8068763 , 7.97288941, 8.14781986, 8.33321177, 8.53118834, 8.74433596, 8.9754

我正在尝试将参数传递给函数,我认为我做得很正确,但仍然会出现错误: TypeError:p_vinet()接受2个位置参数,但给出了4个

下面是我的代码片段,然后我将给出给出错误的部分

volumeMgO是以前计算的数组,由以下内容组成:

array([ 7.64798549,  7.67153344,  7.67153344,  7.8068763 ,  7.97288941,
8.14781986,  8.33321177,  8.53118834,  8.74433596,  8.97545339,
9.22826581,  9.50740563,  9.81962839])
参数是:

params_MgO    = [11.244, 160., 4.0]
vinet功能是:

def p_vinet(v, params):
  """
  This function will calculate pressure from Vinet equation.

  Parameters
  ==========
  v = volume
  params = [V0, K0, K0']

  Returns
  =======
  Pressure calculated from Vinet equation
  """
  f_v = np.power( v/params[0], 1./3.)
  eta = 1.5 * (params[2] - 1.)

  P = 3 * params[1] * ((1 - f_v) / np.power(f_v, 2) ) * np.exp(eta * (1 - 
  f_v))

  return P
最后,斜率函数只是求导数的一种简单方法:

def slope(func, x, h, args=()):
  """
  find a slope for function f at point x

  Parameters
  =========
  f = function
  x = independent variable for f
  h = distance along x to the neighboring points

  Returns
  =======
  slope
  """

  rise = func(x+h, *args) - func(x-h, *args)
  run = 2.*h

  s = rise/run

  return s
现在问题来了。当我打字时:

BulkModulus_MgO = np.zeros(volumeMgO.size)
for i in range(volumeMgO.size):
   BulkModulus_MgO[i] = slope(p_vinet, volumeMgO[i], volumeMgO[i]*0.0001, 
   args=(params_MgO)) 
我得到这个错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-116-60467d989bbc> in <module>()
  1 BulkModulus_MgO = np.zeros(volumeMgO.size)
  2 for i in range(volumeMgO.size):
----> 3     BulkModulus_MgO[i] = slope(p_vinet, volumeMgO[i], 
volumeMgO[i]*0.0001, args=(params_MgO))

<ipython-input-100-618f25e85d34> in slope(func, x, h, args)
 15     """
 16 
---> 17     rise = func(x+h, *args) - func(x-h, *args)
 18     run = 2.*h
 19 

TypeError: p_vinet() takes 2 positional arguments but 4 were given
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
1体积模量=np.0(体积尺寸)
2适用于范围内的i(体积尺寸):
---->3体积模量MgO[i]=斜率(p_vinet,volumeMgO[i],
volumeMgO[i]*0.0001,args=(参数)
在坡度中(func、x、h、args)
15     """
16
--->17上升=函数(x+h,*args)-func(x-h,*args)
18运行=2.*h
19
TypeError:p_vinet()接受2个位置参数,但给出了4个
我不明白。p_vinet需要参数v和参数,我通过斜率函数中的x+h和x-h提供v,参数是一个包含3个条目的列表,p_vinet无法解包。这是2个参数。为什么说我提供4个


抱歉,如果我对代码的表示方式有点混淆。我在jupyter笔记本中编写代码,所有函数都是独立的。volumeMgO与以前的代码分开计算,没有任何问题。

让我们看看这行代码:

BulkModulus_MgO[i] = slope(p_vinet, volumeMgO[i], volumeMgO[i]*0.0001, 
   args=(params_MgO))

args应该是这样的:
args=(params_MgO,)
(其中有一个元素的元组)而不是
args=(params_MgO)
(不是元组,只是3个元素的数组),因为在第二种情况下,在
slope()
函数中解包
*args
会给您3个额外的参数(
params_MgO
的每个元素)。这就是为什么在
slope()
函数中有4个参数。在第一种情况下,解包将整个数组作为单个参数提供给您(如
p_vinet()
函数中的参数)。

让我们看看这行代码:

BulkModulus_MgO[i] = slope(p_vinet, volumeMgO[i], volumeMgO[i]*0.0001, 
   args=(params_MgO))
args应该是这样的:
args=(params_MgO,)
(其中有一个元素的元组)而不是
args=(params_MgO)
(不是元组,只是3个元素的数组),因为在第二种情况下,在
slope()
函数中解包
*args
会给您3个额外的参数(
params_MgO
的每个元素)。这就是为什么在
slope()
函数中有4个参数。在第一种情况下,解包将整个数组作为单个参数提供给您(如
p_vinet()
函数中的参数)