python中函数调用期间的类型转换

mdfafbf1  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(128)

在下面的例子中,我将float值传递给一个接受和int参数的函数(使用类型提示)。看起来读入函数arg的值仍然是一个float值(期望int(11.2)* 10 = 110而不是112)
为什么会这样呢?

def f(n:int):
    return n*10
l = [11.2, 2.2, 3.3, 4.4]
mfunc = map(f,l)
print(list(mfunc))

结果:[112.0、22.0、33.0、44.0]

    • 进程已退出-返回代码:0**按Enter退出终端
0sgqnhkj

0sgqnhkj1#

正如@机械Pig所说,函数签名中的n:int只是对开发人员的一个提示,它不会转换为int。
所以你转换成整型

def foo(n: int):
  if type(n) is float:
      n = int(n)
  return n * 10

或者,如果n不是int,则可以使用assert引发错误

def foo(n: int):
    assert type(n) == int, "must be int"
    return n * 10

def foo(n: int):
    if type(n) is not int:
        raise Exception(f"Must by int instead of {type(n).__name__}")
    return n * 10

当您使用支持它的IDE时,提示会更有用。
这里-> int:描述函数返回的类型

def foo(n: int) -> int:
    return n * 10
ggazkfy8

ggazkfy82#

这是因为map函数将函数f应用于列表l的每个元素,然后返回一个包含结果的map对象,map对象是一个迭代器,当你迭代它时,它会一个接一个地返回结果。
在这种情况下,map对象将包含调用f(11.2)、f(2.2)、f(3.3)和f(4.4)的结果,它们分别为112、22、33和44。
之所以会看到float值转换为int值,是因为f函数被定义为接受int参数,因此当您将float值传递给它时,它会在传递给函数之前自动转换为int。
如果要防止float值转换为int值,可以修改f函数以接受float参数而不是int参数。例如:
def f(n:float): return n*10 l = [11.2, 2.2, 3.3, 4.4] mfunc = map(f,l) print(list(mfunc))这是输出:[112.0, 22.0, 33.0, 44.0]

相关问题