如何在函数定义中强制参数自动转换?

2024-04-25 20:57:09 发布

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

考虑这个函数(及其使用)的例子,它接收一个参数,该参数只具有int的意义:

def fun(index):
    index = int(index)
    # do something with index

def main():
    print fun(1e6)

我发现我一直在几个处理整数的函数上重复这个模式,因为它确保我真正接收到一些整数(注意1e6是一个浮点实例)。

这有点麻烦,如果忘记了它可能会产生问题(这里的代码,对浮点/integer/string/的反应不同)。。。价值观)。所以这可以在函数签名中编码吗?

例如,这个伪代码中的一些内容:

def fun(int index):
    # do something with index

Tags: 函数代码参数indexmaindefwith整数
2条回答

首先,你不应该真的这样做(即使有些日子我也有点想…)。Python不是静态类型的,所以您不应该真正引入笨拙的静态类型。

布特,回答你的问题。Decorators

def ensure_int(fn):
    def wrapper(num):
        return fn(int(num))
    return wrapper

def test(num):
    return num + 2

@ensure_int
def test2(num):
    return num + 2

工作方式如下:

> test("2") 
ERROR!!!

>test2("2")
4

在Python 3中,可以使用function annotations,然后编写一个decorator,将参数转换(或尝试转换)为指定的类型。

在Python2中,你不能按照你想要的方式来做。Python2的语法不支持在函数定义中放入除参数本身以外的任何内容,并且您不能更改Python的语法以使您也可以将类型放入其中。

相关问题 更多 >

    热门问题