小知识点
issubclass() 用于判断两个类对象之间的关系(是否有继承关系)
# issubclass()
class A(object):
pass
class B(A):
pass
class C(object):
pass
print(issubclass(B, A)) # True
print(issubclass(B, C)) # False
print(issubclass(B, (A, C))) # True
isinstance() 用于判断实例对象与类对象的关系(是否有创造关系),
# isinstance()
class A(object):
pass
class B(A):
pass
class C(object):
pass
a = A()
b = B()
c = C()
print(isinstance(a, A)) # True
print(isinstance(b, A)) # True 包括继承关系产生的实例对象
print(isinstance(c, A)) # False
print(isinstance(c, (A, C))) # True
# isinstance() 可以用于判断变量的类型
a = 123
b = '123'
c = [1, 2, 3]
d = {1:1, 2:2, 3:3}
print(isinstance(a, int)) # True
print(isinstance(b, str)) # True
print(isinstance(c, list)) # True
print(isinstance(d, dict)) # True
type() 用于获取对象的类型。类对象的类型是type
class A(object):
pass
print(type(A)) # <class 'type'>
可以使用运算符==判断某个对象的类型。对于基本数据类型,可以直接使用其类名;如果不是基本数据类型,需要使用标准库types中的定义的变量。
# 判断非基本数据类型
import types
def say_hi():
pass
if type(say_hi) == types.FunctionType: # 判断函数
print('This is a function')
if type(print) == types.BuiltinFunctionType: # 判断内置函数
print('This is a built-in-function')
查看某个对象的引用sys.getrefcount()
# 对象引用计数
import sys
# 引用计数加一的4中情况
a = [1, 2, 3] # 第一个引用
b = [a, 4] # 第二个引用
c = a # 第三个引用
print(sys.getrefcount(a)) # 第四个引用(作为实参)
# 当函数执行完后,a的引用计数自动减一
pprint模块中的pprint可以使字典打印更加美观。
import pprint
class Animal(object):
pass
pprint.pprint(Animal.__dict__)
'''
结果:
mappingproxy({'__dict__': <attribute '__dict__' of 'Animal' objects>,
'__doc__': None,
'__module__': '__main__',
'__weakref__': <attribute '__weakref__' of 'Animal' objects>})
'''
列表使用insert插入元素到某个索引,可以使用del 来直接删除某个索引元素
a = [1, 2, 3]
a.insert(1, 9) # 在索引1中插入元素9,后面元素往后挪一位
print(a) # [1, 9, 2, 3]
del a[2] # 删除索引2的元素,后面元素往前挪一位
print(a) # [1, 9, 3]