type() 输入,根据数据类型 () 打印



>编写一个函数data_type,该函数接受一个参数并打印出该参数的数据类型。因此,如果我们给出一个字符串作为输入,它会说我们的输入是一个字符串,如果我们给出一个整数或浮点数,则相同。我不知道我做错了什么,如果有人能给我一些解释,我将不胜感激!希望我对这个问题很清楚。

def data_type(x,y):
    for i in x,y:
        if i == type(str):
            print "str"
        elif i == type(int):
            print "int"
        else:
            if i == type(float):
                print "float"
data_type(1,"string")

函数的更简单实现:

def print_types(*args):
    for arg in args:
        print(type(arg).__name__)

关于此的一些说明:

*args语法允许函数接受许多位置参数,它们将被"打包"到args中(这将作为元组提供给函数(。 type(x)将返回具有__name__属性的x的类型。

请注意,对于"旧式"类(在python2中,那些不继承自object的类(,这有点不正确,您需要为此进行调整:

>>> class C: pass
... 
>>> type(C())
<type 'instance'>
>>> type(C()).__name__
# Not what we want
'instance'

如果还想处理旧样式对象:

def print_types(*args):
    for arg in args:
        try:
            print(arg.__class__.__name__)
        except AttributeError:
            print(type(arg).__name__)

快速演示

>>> class C: pass
... 
>>> class D(object): pass
... 
>>> print_types(C, C(), D, D(), 'foo', 2)
classobj
C
type
D
str
int

在python3中,没有"旧式类"的概念,你会得到以下内容:

>>> print_types(C, C(), D, D(), 'foo', 2)
type
C
type
D
str
int

你的想法太口语化了。 i == type(str)读起来模糊地像"我是字符串类型",但实际上并不是这个意思。

您可以通过将其输入口译员来了解type(str)是什么。它会告诉你strtype类型,这是有道理的,因为str是一种类型。

例如,"hello" == type(str)"hello" == type是一回事。这是没有意义的——字符串"hello"显然与type的概念不是一回事,所以它的计算结果是False

您真正想问的是"hello"的type是否与类型str相同。您可以按如下方式检查: type(i) == str .对其余代码进行类似的调整将使其正常工作。

最新更新