为什么Python假定未声明类型的变量是数组?

时间:2019-07-10 11:10:01

标签: python arrays function pycharm

我正在按间隔定义函数。当python将参数fck与2个间隔(fck<50)之间的定界值进行比较时,它将返回错误。我了解它无法将数组与整数进行比较,但是fck不是数组!我打算将其作为浮点数。 python如何确定参数的类型以及如何定义它?

在其他类似的函数中,我定义了一切都很好。我包括有问题的功能和一个有效的示例。我看不到它们之间的任何区别。问题是什么?我不仅要使其工作,而且还想了解python在做什么。

我尝试通过执行def par_rec(eps,fck:float):来声明参数的类型,但它不会改变结果。

在第二行返回错误的定义:

def par_rec(eps,fck):
    if fck<50:
        eps0=0.002
    else:
        eps0=0.002+0.000085*(fck-50)**0.5
    if fck<50:
        epsu=0.0035
    else:
        epsu=0.0026+0.0144*((100-fck)/100)**4
    if fck<50:
        n=2
    else:
        n=1.4+9.6*((100-fck)/100)**4
    if eps<0:
        sig=0
    elif eps<eps0:
        sig=fck/1.5*(1-(1-eps/eps0)**n)
    else:
        sig=fck/1.5
    return sig

没有任何问题的类似定义:

def fctm(fck):
    if fck<50:
        fctm = 0.3 * fck ** (2 / 3)
    else:
        fctm=0.58*fck**0.5
    return fctm

出现错误时,我正在定义函数,没有调用它:

line 81, in par_rec
    if fck<50:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

2 个答案:

答案 0 :(得分:0)

虽然您可能认为您的变量不是数组,但事实并非如此。 为了进行调试,您需要打印可疑变量的类型。

print(type(fck))

答案 1 :(得分:0)

  

但是fck不是数组!

fck可能是一个数组,因为您没有提供任何证明它不是数组,也没有向我们展示如何调用函数。还请向我们显示print(type(fck))

  

它的类型在任何地方都没有定义

在python中是不可能的。每个对象(变量也是对象)都有一个类型。如果您未分配任何值,则变量将是未定义的。如果您分配一个值,则python将自动分配一个匹配类型。如果要初始化有效但为“空”的变量,请分配None