2013-03-19 44 views
0

我有这样的代码来定义一个函数为什么在定义函数后出现语法错误?

def f(Frequency,Omegahot,Beta,Omegacold,Thot,Tcold): 
    C=300000000 
    k=1.38E-23 
    h=6.062E-34 
    return(Omegahot*numpy.power(Frequency,Beta))*((2*h*numpy.power(Frequency,3)/(C**2)))*(1/(numpy.exp(h*Frequency/(k*Thot))-1)) + (Omegacold*numpy.power(Frequency,Beta)*((2*h*numpy.power(Frequency,3)/(C**2)))*(1/(numpy.exp(h*Frequency/(k*Tcold))-1)) 

xdata=[1,2,3,4,5] 
popt, pcov = curve_fit(f,xdata,fluxs,p0=None,) 
print popt 

但我在该行扩展数据出现语法错误= [1,2,3,4,5]我在做什么错

+5

[PEP-8建议限制一行到长79个字符。](http://www.python.org/dev/peps/pep-0008/#maximum-line-length),应考虑用一些临时变量将你的大量方程分解成多行,以使它更易读,并使这样的错误更容易调试。 – 2013-03-19 17:47:00

回答

5

括号上一行是不均衡的,在年底再增加一个修复

return (Omegahot*numpy.power(Frequency,Beta))*((2*h*numpy.power(Frequency,3)/(C**2)))*(1/(numpy.exp(h*Frequency/(k*Thot))-1)) + (Omegacold*numpy.power(Frequency,Beta)*((2*h*numpy.power(Frequency,3)/(C**2)))*(1/(numpy.exp(h*Frequency/(k*Tcold))-1))) 

但配方是乱七八糟的一点点找出其中他们真正的归属。

你真的想要这个公式分解成一个80字符的行内的一些配件,并使用临时变量:

temp1 = Omegahot * numpy.power(Frequency, Beta) 
temp2 = 2 * h * numpy.power(Frequency, 3)/(C ** 2) 
temp3 = 1/(numpy.exp(h * Frequency/(k * Thot)) - 1) 
temp4 = Omegacold * numpy.power(Frequency, Beta) * 
temp5 = 1/(numpy.exp(h * Frequency/(k * Tcold)) - 1) 
return (temp1 * temp2 * temp3) + (temp4 * temp2 * temp6) 

但具有更好的变量名。我已经设法从公式中删除重复的temp2,只是把它分解成更小的块。

+0

你是否认为它试图做快捷方式并从其他地方复制它从来没有真正的作品 – user2187702 2013-03-19 17:53:15

0

可读性计数。这是重写你的函数的一种方法,它更具可读性。通过预先计算出现多次的表达式,您将需要更少的圆括号,并使计算速度更快。

import numpy as np 
def f(Frequency, Omegahot, Beta, Omegacold, Thot, Tcold, exp=np.exp, power=np.power): 
    C = 300000000 
    k = 1.38E-23 
    h = 6.062E-34 
    fb = power(Frequency, Beta) 
    f3 = power(Frequency, 3) 
    C2 = C ** 2 
    C3 = fb * 2 * h * f3/C2 
    hF = h * Frequency 
    return ((Omegahot * C3/(exp(hF/(k * Thot)) - 1)) 
      + (Omegacold * C3/(exp(hF/(k * Tcold)) - 1)))) 
相关问题