参数在传递多个函数后发生变化

2024-09-30 16:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码中有一个奇怪的东西,我从来没有见过,我使用一个函数,它调用几个相互构建的函数,如果我看一个参数,它是一个np.ndarray开头是一个float列表,请看下面的代码示例:

在main.py中,我有:

mean_D(z,lb,ld,B,r, 'x',0)

在函数\u traitement \u multiple \u trace.py中:

def mean_D(z,lb,ld,B,r, mode,offset = 0):
...
 if mode == 'z':
        print(str(type(z)) + '1' )
        from fit_functions import intdx
        try : 
            return quad(intdx, 1e-11, 5e-6 ,
                        args=(abs(lb),abs(ld),abs(B),abs(r),offset))[0]
                        /(4e-21/(6*np.pi*0.001*abs(r)))
        except(ZeroDivisionError):
            return 10

在fit\u functions.py中:

@jit
def intdx(z,lb,ld,B,r,offset=0):
    print(str(type(z)) + '2')
    return Boltzman(z,abs(lb),abs(ld),abs(B))
                    *4e-21/(6*np.pi*eta_x(z,r,offset)*r) 

在我添加到Boltzman函数的同一个文件中:

print(str(type(z)) + '3')

结果是:

<class 'numpy.ndarray'>1
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3
<class 'float'>2
<class 'float'>3

我真的不明白这里发生了什么,我尝试了有和没有麻木,它返回我相同的输出

函数返回了我需要的东西,但是我想在Boltmann函数中添加一个for循环,我得到了这个输出:

<class 'numpy.ndarray'>1
<class 'float'>2
<class 'float'>3
Traceback (most recent call last):

  File "<ipython-input-15-f859197ca9df>", line 1, in <module>
    mean_D(z,lb,ld,B,r, 'x',0)

  File "C:\Users\maxim\ownCloud\Thèse\code_python\Traitement_multiple_trace\functions_traitement_multiple_trace.py", line 121, in mean_D
    return quad(intdx, 1e-11, 5e-6 , args=(abs(lb),abs(ld),abs(B),abs(r),offset))[0]/(4e-21/(6*np.pi*0.001*abs(r)))

  File "C:\Users\maxim\Anaconda3\envs\holopy_env2\lib\site-packages\scipy\integrate\quadpack.py", line 341, in quad
    points)

  File "C:\Users\maxim\Anaconda3\envs\holopy_env2\lib\site-packages\scipy\integrate\quadpack.py", line 448, in _quad
    return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)

TypeError: object of type 'float' has no len()

有人有类似的东西吗


Tags: 函数pyreturntypenpabsfloatmean