在下面的例子中,我将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]
0sgqnhkj1#
正如@机械Pig所说,函数签名中的n:int只是对开发人员的一个提示,它不会转换为int。所以你转换成整型
n:int
def foo(n: int): if type(n) is float: n = int(n) return n * 10
或者,如果n不是int,则可以使用assert引发错误
n
int
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:描述函数返回的类型
-> int:
def foo(n: int) -> int: return n * 10
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]
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]
2条答案
按热度按时间0sgqnhkj1#
正如@机械Pig所说,函数签名中的
n:int
只是对开发人员的一个提示,它不会转换为int。所以你转换成整型
或者,如果
n
不是int
,则可以使用assert引发错误或
当您使用支持它的IDE时,提示会更有用。
这里
-> int:
描述函数返回的类型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]