>编写一个函数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)
是什么。它会告诉你str
是type
类型,这是有道理的,因为str
是一种类型。
例如,"hello" == type(str)
与"hello" == type
是一回事。这是没有意义的——字符串"hello"显然与type
的概念不是一回事,所以它的计算结果是False
。
您真正想问的是"hello"的type
是否与类型str
相同。您可以按如下方式检查: type(i) == str
.对其余代码进行类似的调整将使其正常工作。