Python 带str、float、int和tuple的除法
基本上,我希望能够将int、str、tuple和float一分为二。我很难区分输入的类型,然后返回相同的类型 例如,half7应该返回3而不是3.0!,half9.0应返回4.5,Half17应返回seve,half1,2,3,4,5,6,7应返回1,2,3。我已尝试此代码,但未成功:Python 带str、float、int和tuple的除法,python,python-3.x,Python,Python 3.x,基本上,我希望能够将int、str、tuple和float一分为二。我很难区分输入的类型,然后返回相同的类型 例如,half7应该返回3而不是3.0!,half9.0应返回4.5,Half17应返回seve,half1,2,3,4,5,6,7应返回1,2,3。我已尝试此代码,但未成功: def half(x): """returns half of the input, rounded down str -> str, int -> int, float ->
def half(x):
"""returns half of the input, rounded down
str -> str, int -> int, float -> float, tuple -> tuple"""
return int(x/2)
if x is float:
return float(x/2)
if x is tuple:
return tuple(x/2)
if x is str:
return str(x/2)
Just use,它根据第一个参数的类型选择实现:
from functools import singledispatch
@singledispatch
def half(x):
raise TypeError()
@half.register(int)
def _(x):
return x // 2
@half.register(float)
def _(x):
return x / 2
@half.register(tuple)
def _(x):
return x[:len(x) // 2]
@half.register(str)
def _(x):
return x[:len(x) // 2]
如果愿意,您可以将其缩短为将lambda传递给half.register,而不是使用decorator和function语句:
from functools import singledispatch
@singledispatch
def half(x):
raise TypeError()
half.register(int, lambda x: x // 2)
half.register(float, lambda x: x / 2)
half.register(tuple, lambda x: x[:len(x) // 2])
half.register(str, lambda x: x[:len(x) // 2])
Just use,它根据第一个参数的类型选择实现:
from functools import singledispatch
@singledispatch
def half(x):
raise TypeError()
@half.register(int)
def _(x):
return x // 2
@half.register(float)
def _(x):
return x / 2
@half.register(tuple)
def _(x):
return x[:len(x) // 2]
@half.register(str)
def _(x):
return x[:len(x) // 2]
如果愿意,您可以将其缩短为将lambda传递给half.register,而不是使用decorator和function语句:
from functools import singledispatch
@singledispatch
def half(x):
raise TypeError()
half.register(int, lambda x: x // 2)
half.register(float, lambda x: x / 2)
half.register(tuple, lambda x: x[:len(x) // 2])
half.register(str, lambda x: x[:len(x) // 2])
首先,您需要检查类型。其次,此代码假定您使用的是Python 2
def half(x):
if type(x) == float:
return x / 2
if type(x) == int:
return x // 2
if type(x) in (tuple, str):
return x[:len(x)//2]
首先,您需要检查类型。其次,此代码假定您使用的是Python 2
def half(x):
if type(x) == float:
return x / 2
if type(x) == int:
return x // 2
if type(x) in (tuple, str):
return x[:len(x)//2]
您可以使用dict,type作为键,lambda作为值,使用//for int和/for float,并简单地为str和tuple lenx//2建立索引
您可以使用dict,type作为键,lambda作为值,使用//for int和/for float,并简单地为str和tuple lenx//2建立索引
x是float告诉您x是否与float是完全相同的对象,这是不太可能的。你的意思是如果isinstancex,float,即如果x是float类的实例吗?x是float,它告诉你x是否与float完全相同,这是不太可能的。你的意思是如果isinstancex,float,即如果x是float类的实例吗?isinstancex,float,int在Python3中通常是首选的,4/2==2.0-不是想要的。Jon,如果不是首选的,类型函数的用途是什么?isinstancex,float,int在Python3中通常是首选的,4/2==2.0-不是想要的。Jon,如果不是首选,类型函数的用途是什么?它将是导入数字和str,因为python3中没有基串。它将是导入数字和str,因为python3中没有基串