首页 > 解决方案 > 为什么 Python 假定未声明类型的变量是数组?

问题描述

我正在按间隔定义一个函数。当 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()

标签: pythonarraysfunctionpycharm

解决方案


但 fck 不是数组!

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

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

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


推荐阅读