Pythonic检查比较值是否为值或函数的方法,然后比较

Pythonic检查比较值是否为值或函数的方法,然后比较,python,Python,我需要将一个值与另一个值进行比较,f,它要么只是一个值,要么是基于另一个变量p的值返回值的可调用值。我正在寻找一种比我在下面写的更具蟒蛇风格的方法来实现这一点,如果存在的话: p = 5 # Some value that is available in the code def check_val(x): if callable(x): return x(p) else: return x #Either/or f = 1 f = lamb

我需要将一个值与另一个值进行比较,
f
,它要么只是一个值,要么是基于另一个变量
p
的值返回值的可调用值。我正在寻找一种比我在下面写的更具蟒蛇风格的方法来实现这一点,如果存在的话:

p = 5  # Some value that is available in the code

def check_val(x):
    if callable(x):
        return x(p)
    else:
        return x

#Either/or
f = 1
f = lambda a: 1.5*a

if 2 < check_val(f):
    print("no good")
p=5#代码中可用的一些值
def检查值(x):
如果可调用(x):
返回x(p)
其他:
返回x
#或
f=1
f=λa:1.5*a
如果2<检查值(f):
打印(“不好”)

由于控制流取决于对象类型,您应该能够在
类型
模块中找到相关的类型类

导入类型#请参见https://docs.python.org/3/library/types.html
p=5#代码中可用的某个值
def检查值(x,p):
如果isinstance(x,(types.FunctionType,types.LambdaType):
返回x(p)
其他:
返回x
#或
f=1
f=λa:1.5*a
如果2<检查值(f,p):
打印(“不好”)

这不是我想的,但是你可以试着把它贴出来,看看其他人是否有灵感。写两个不同的函数,
check\u value
check\u predicate\u反对\u p
。我建议你试着调用
x(p)
并捕获如果
x
不可调用而引发的
TypeError
,但无法区分不可调用的
x
和调用
x的情况(p)
本身会引发未捕获的
类型错误
。Python是动态类型的,但您至少应该尝试将具有类似接口的值分配给给定变量。函数(和其他可调用项)与不可调用的值几乎没有共同之处。您不会说如何设置
f
,但是传递
lambda:x
会让
check\u val
无条件地将其参数视为函数,同时仍然返回
x
的结果。除了
FunctionType
LambdaType>之外,还有其他可调用项。你是对的。示例使用了lambda。如果我的答案正确但不完整,你可以编辑它或建议编辑。但它是错的吗?