python类型检查
Ⅰ python 中怎么查看数据类型
有时候我们需要知道变量类型,但不知道如何查看
内置函数isinstance(object, (type1,type2...))
isinstance('content', str)
返回True or False
使用内置函数type(object)
在介绍数据类型的文章中提到过,要怎么样查看对像的数据类型。type()就是一个最实用又简单的查看数据类型的方法。type()是一个内建的函数,调用它就能够得到一个反回值,从而知道想要查询的对像类型信息。
type使用方法
>>>type(1)
<type 'int'> #返回整形>>>type('content')
<type 'str'> #返回字符串
type返回值属于type类型
>>>type(type(1))
<type 'type'> #返回type类型
Ⅱ python判断数据类型有几种方法,有啥优缺点
123456789
class A: passclass B(A): passa=A()b=B() print('a is an A:%s;b is an A:%s'%(isinstance(a,A),isinstance(b,A)))print('type of a is %s;type of b is %s'%(type(a),type(b)))
通常我们判断是什么类型,那么只是想直到这个对象是否含有我们所需要的方法或者属性,这样在调用的时候就不会出错,否则就要进行异常捕捉。而isinstance这个方法非常满足这个需求。以上是示例代码。
可以看出isinstance(a,A),isinstance(b,A)两个返回的都是True,如果我们把a,b都当做A的实例使用完全没问题,但是我们并不关心b是A的实例还是B的实例,因为他肯定包含A类定义中的所有属性和方法,正常调用不会出现异常。
type的话出来的则是一串字符串,精确到子类,所以可以用来做精确判断,例如判断是不是这个类,而不是这个类的子类,isinstance只能判断是不是这个类或者这个类的子类。
判断两个对象是否来自同一个类,可以用type(a)==type(b)来判断。
Ⅲ python如何查看数据类型
python怎么查看数据类型?
第一步我们首先需要知道在python中查看变量数据类型是使用type()函数,type函数的用法如下图所示:
第二步我们打开py文件,输入
import numpy as npa1=123list=[1,2,3,4,5,6]array=np.array(list)print(type(a1))
打印出a1变量的数据类型,如下图所示:
第三步运行py文件之后,可以看到a1变量是int类型,如下图所示:
第四步输入
print(type(list))print(type(array))
打印出list变量和array变量的类型,如下图所示:
第五步运行py文件,可以看到分别是列表和数组类型,如下图所示:
以上就是python怎么查看数据类型的详细内容,更多请关注 脚本之家其它相关文章
Ⅳ python如何判断输入参数是int类型的
python判断输入参数是int类型的方法:
用if语句判断“type(eval(输入参数))”是否是int类型,python的eval函数可以去掉输入参数的引号
示例代码如下:
执行结果如下:
更多Python知识,请关注:Python自学网!!
Ⅳ Python中为什么推荐使用isinstance来进行类型判断
type比较的结果a和b的类型是一样的,结果明显是不准确的。这种古典类的实例,type返回的结果都是一样的,而这样的结果不是我们想要的。对于内建的基本类型来说,使用tpye来检查是没有问题的,可是当应用到其他场合的时候,type就显得不可靠了。这个时候我们就需要使用isinstance来进行类型检查。
Ⅵ python 怎么查看数据类型
调试的时候可以看到,自己赋值的时候也可以
Ⅶ python 怎么判断list里元素类型
可以通过tpye()方法来判断list里的元素类型。代码举例如下:
testList = [1, 2, 'a', [1, 2]]
for listElement in testList:
print '%s 的类型是:%s' % (listElement, type(listElement))
其中,for in语句用来遍历testList这个list里的元素,然后分别打印出元素对应的类型,运行程序,输出结果为:
1 的类型是:<type 'int'>
2 的类型是:<type 'int'>
a 的类型是:<type 'str'>
[1, 2] 的类型是:<type 'list'>
(7)python类型检查扩展阅读
python语言中type()函数介绍:
1、type()函数的作用
在python中type()是即简单又实用的一种对象数据类型查询方法。它是一个内建的函数,调用它就能够得到一个反回值,从而知道想要查询的对像类型信息。
2、type()函数使用方法:type(对象)
type()是接收一个对象当做参考,之后反回对象的相应类型。例如:
type(1)
<type 'int'> #整型
type("iplaypython")
<type 'str'> #字符串
Ⅷ python如何判断类型
python中是可以判断对象的类型的,判断python中的对象类型,可以使用isinstance()函数。
isinstance是Python中的一个内建函数。是用来判断一个对象的变量类型。函数语法格式为
isinstance(object, class-or-type-or-tuple)
如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例, 返回True。如果object不是一个给定类型的的对象, 则返回结果总是False。
例如
>>> isinstance(1, int)
True
>>> isinstance(1.0, float)
True
Ⅸ python3怎样检查网站构建的技术类型
示例函数
为了开发类型检查器,我们需要一个简单的函数对其进行实验。欧几里得算法就是一个完美的例子:
def gcd(a, b):
'''Return the greatest common divisor of a and b.'''
a = abs(a)
b = abs(b)
if a < b:
a, b = b, a
while b != 0:
a, b = b, a % b
return a
在上面的示例中,参数 a 和 b 以及返回值应该是 int 类型的。预期的类型将会以函数注解的形式来表达,函数注解是 Python 3 的一个新特性。接下来,类型检查机制将会以一个装饰器的形式实现,注解版本的第一行代码是:
def gcd(a: int, b: int) -> int:
使用“gcd.__annotations__”可以获得一个包含注解的字典:
>>> gcd.__annotations__
{'return': <class 'int'>, 'b': <class 'int'>, 'a': <class 'int'>}
>>> gcd.__annotations__['a']
<class 'int'>
需要注意的是,返回值的注解存储在键“return”下。这是有可能的,因为“return”是一个关键字,所以不能用作一个有效的参数名。
检查返回值类型
返回值注解存储在字典“__annotations__”中的“return”键下。我们将使用这个值来检查返回值(假设注解存在)。我们将参数传递给原始函数,如果存在注解,我们将通过注解中的值来验证其类型:
def typecheck(f):
def wrapper(*args, **kwargs):
result = f(*args, **kwargs)
return_type = f.__annotations__.get('return', None)
if return_type and not isinstance(result, return_type):
raise RuntimeError("{} should return {}".format(f.__name__, return_type.__name__))
return result
return wrapper
我们可以用“a”替换函数gcd的返回值来测试上面的代码:
Traceback (most recent call last):
File "typechecker.py", line 9, in <mole>
gcd(1, 2)
File "typechecker.py", line 5, in wrapper
raise RuntimeError("{} should return {}".format(f.__name__, return_type.__name__))
RuntimeError: gcd should return int
由上面的结果可知,确实检查了返回值的类型。
检查参数类型
函数的参数存在于关联代码对象的“co_varnames”属性中,在我们的例子中是“gcd.__code__.co_varnames”。元组包含了所有局部变量的名称,并且该元组以参数开始,参数数量存储在“co_nlocals”中。我们需要遍历包括索引在内的所有变量,并从参数“args”中获取参数值,最后对其进行类型检查。
得到了下面的代码:
def typecheck(f):
def wrapper(*args, **kwargs):
for i, arg in enumerate(args[:f.__code__.co_nlocals]):
name = f.__code__.co_varnames[i]
expected_type = f.__annotations__.get(name, None)
if expected_type and not isinstance(arg, expected_type):
raise RuntimeError("{} should be of type {}; {} specified".format(name, expected_type.__name__, type(arg).__name__))
result = f(*args, **kwargs)
return_type = f.__annotations__.get('return', None)
if return_type and not isinstance(result, return_type):
raise RuntimeError("{} should return {}".format(f.__name__, return_type.__name__))
return result
return wrapper
在上面的循环中,i是数组args中参数的以0起始的索引,arg是包含其值的字符串。可以利用“f.__code__.co_varnames[i]”读取到参数的名称。类型检查代码与返回值类型检查完全一样(包括错误消息的异常)。
为了对关键字参数进行类型检查,我们需要遍历参数kwargs。此时的类型检查几乎与第一个循环中相同:
for name, arg in kwargs.items():
expected_type = f.__annotations__.get(name, None)
if expected_type and not isinstance(arg, expected_type):
raise RuntimeError("{} should be of type {}; {} specified".format(name, expected_type.__name__, type(arg).__name__))
得到的装饰器代码如下:
def typecheck(f):
def wrapper(*args, **kwargs):
for i, arg in enumerate(args[:f.__code__.co_nlocals]):
name = f.__code__.co_varnames[i]
expected_type = f.__annotations__.get(name, None)
if expected_type and not isinstance(arg, expected_type):
raise RuntimeError("{} should be of type {}; {} specified".format(name, expected_type.__name__, type(arg).__name__))
for name, arg in kwargs.items():
expected_type = f.__annotations__.get(name, None)
if expected_type and not isinstance(arg, expected_type):
raise RuntimeError("{} should be of type {}; {} specified".format(name, expected_type.__name__, type(arg).__name__))
result = f(*args, **kwargs)
return_type = f.__annotations__.get('return', None)
if return_type and not isinstance(result, return_type):
raise RuntimeError("{} should return {}".format(f.__name__, return_type.__name__))
return result
return wrapper
将类型检查代码写成一个函数将会使代码更加清晰。为了简化代码,我们修改错误信息,而当返回值是无效的类型时,将会使用到这些错误信息。我们也可以利用 functools 模块中的 wraps 方法,将包装函数的一些属性复制到 wrapper 中(这使得 wrapper 看起来更像原来的函数):
def typecheck(f):
def do_typecheck(name, arg):
expected_type = f.__annotations__.get(name, None)
if expected_type and not isinstance(arg, expected_type):
raise RuntimeError("{} should be of type {} instead of {}".format(name, expected_type.__name__, type(arg).__name__))
@functools.wraps(f)
def wrapper(*args, **kwargs):
for i, arg in enumerate(args[:f.__code__.co_nlocals]):
do_typecheck(f.__code__.co_varnames[i], arg)
for name, arg in kwargs.items():
do_typecheck(name, arg)
result = f(*args, **kwargs)
do_typecheck('return', result)
return result
return wrapper
结论
注解是 Python 3 中的一个新元素,本文例子中的使用方法很普通,你也可以想象很多特定领域的应用。虽然上面的实现代码并不能满足实际产品要求,但它的目的本来就是用作概念验证。可以对其进行以下改善:
处理额外的参数( args 中意想不到的项目)
默认值类型检查
支持多个类型
支持模板类型(例如,int 型列表)