Python3常用内置函数大全

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

Python3内置函数的妙用

*attr属性内置函数:setattr()、getattr()、delattr()、hasattr()
  • 先初始化申明一个空类
import unittest

class TestClsA(unittest.TestCase):
    """
    定义一个类,随便选一个类继承;
    作用:1.给类属性相关函数使用;
      2.其他内置函数对比类型。
    """
    pass

#初始化对象
test=TestClsA()
复制代码
  • setattr(object,attr_name,attr_value)三个参数:对象/实例,属性名,属性值
setattr(test, "name", "如歌")
print("设置类属性的内置函数setattr:{}".format(test.name))
# 应用场景:用户保存临时变量,例如:读取excel数据遍历设置成类属性,或是需要替换的临时变量

res=[
{'case_id': 1, 'method': 'post', 'url': '/member/login', 'data': '123', 'actual': '不通过','excepted': '通过'},
{'case_id': 2,  'method': 'post', 'url': '/member/login', 'data': '123','actual': '通过', 'excepted': '通过'}, 
{'case_id': 3, 'method': 'post', 'url': '/member/login', 'data': '123', 'actual': '不通过','excepted': '通过'},
{'case_id': 4,  'method': 'post', 'url': '/member/login', 'data': '123','actual': '通过', 'excepted': '通过'}, 
{'case_id': 5, 'method': 'post', 'url': '/member/login', 'data': '123', 'actual': '不通过','excepted': '通过'},
{'case_id': 6,  'method': 'post', 'url': '/member/login', 'data': '123','actual': '通过', 'excepted': '通过'}, 
]

case_li=[]
for i in res:
    case=TestClsA()
#     print(i)
    for k,v in i.items():
#         print(k,v)
        setattr(case, k, v)
    case_li.append(case)
#     print(case.__dict__)
    
print("对象测试用例:{}".format(case_li[1].case_id))
复制代码
  • getattr(object,attr_name)获取对象的属性的值
# 针对上一个设置类属性方法的应用,return类属性的值
try:
    get_attr=getattr(test, "name1")
except AttributeError as e:
    print("getattr类属性不存在")
#     raise e
else:
    print("获取类属性的内置函数getattr:{}".format(get_attr))
复制代码
  • hasattr(object,attr_name)判断对象是否存在该属性
# 用于条件判断,如果不存在的类属性则返回bool,可以用一个变量接收
if hasattr(test, "name"):
    print("类属性存在的内置函数hasattr:{}".format(test.name))
else:
    flag=False
    print("类属性不存在")
复制代码
  • delattr(object,attr_name)删除对象的属性
# 销毁类属性
delattr(test, "name")
print("删除类属性的内置函数delattr:{}".format(hasattr(test, "name")))
复制代码
enumerate()
  • 返回的是一个迭代器,可以被list、tuple接收
# 初始化一个list数据类型
lis1=[1,2,4,3,5]
#第一个参数是 一个序列、迭代器或其他支持迭代对象。第二参数指定起始位置,默认为0
res=list(enumerate(lis1))
print("enumerate返回的是枚举对象(计数值,元素值):{}".format(res))
# 应用场景:获取可迭代对象的下标与元素值组成元组元素的list

for k,v in enumerate(lis1):
    print("enumerate高级用法,拆包list种的元组元素【{},{}】".format(k,v))
复制代码
exec(object)
  • object 必须是字符串或者代码对象(表达式)
# 函数支持动态执行 Python 代码
exec("print('动态执行python代码:{}'.format(1+3))")
复制代码
filter()
  • 返回的是一个迭代器,可以被list、tuple接收
# filter(function, iterable) 相当于一个生成器表达式,
# 当 function 不是 None 的时候为 (item for item in iterable if function(item));
# function 是 None 的时候为 (item for item in iterable if item) 。
# lambda 匿名函数的使用
res1=filter(lambda x:x>3,lis1)
print("filter条件过滤,返回后结果:{}".format(list(res1)))
复制代码
format()
  • 格式化输出函数不解释
str_test="格式化输出"
print("输出str_test内容:{}".format(str_test))
复制代码
vars()
  • 返回模块、类、实例或任何其它具有 dict 属性的对象的 dict 属性。
class TestA:
    pass

a=TestA()

print(vars(a))

结果输出如下:

{'_testMethodName': 'runTest', '_outcome': None, '_testMethodDoc': 'No test', '_cleanups': [], '_subtest': None, '_type_equality_funcs': {<class 'dict'>: 'assertDictEqual', <class 'list'>: 'assertListEqual', <class 'tuple'>: 'assertTupleEqual', <class 'set'>: 'assertSetEqual', <class 'frozenset'>: 'assertSetEqual', <class 'str'>: 'assertMultiLineEqual'}}
复制代码
id()
  • 返回对象的“标识值”,整数,理解成对象地址
a=1
b=1
c=a
if id(a)==id(c) and id(c)==id(b):
    print("比较对象指向的内存地址")
if a==b:
    print("比较变量a与b的值")
复制代码
input()&print()
  • 输入&输出函数不解释
# accept_str=input("默认接收的是str类型")
# print("支持格式化输出")
复制代码
isinstance()
  • 可以比较数据类型,及类类型type
class TestClsA(unittest.TestCase):
    """
    定义一个类,随便选一个类继承;
    作用:1.给类属性相关函数使用;
      2.其他内置函数对比类型。
    """
    pass

class TestClsB(TestClsA):
    """同上,如果该初始化对象,则对象类型与上一个类类型一致"""
    pass

#初始化对象
test=TestClsA()
test1=TestClsB()

lis2=[2,3,4,5,6,7]

res4=isinstance(lis2, (list,tuple)) #第二参数可以是类型组成的元组
res5=isinstance(test,unittest.TestCase)# 对象类型是上级的类
res6=isinstance(test1,(unittest.TestCase,TestClsA))# 对象类型是上上级的类型
print("比较数据类型:{},及对象类型:{}".format(res5,res6))
复制代码
  • 判断是否是迭代器
# from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
from collections.abc import Iterable,Iterator
# 可以判断对象是否为可迭代对象
a=isinstance([], Iterable)
print("true为可迭代对象{}".format(a))
b=isinstance(iter([]), Iterator)
print("true可迭代对象为迭代器{}".format(b))
复制代码
type()求数据类型
lis1=[1,2,3,4,5,6]
cls_str=type(lis1)
print("查询数据类型:{}".format(cls_str))
复制代码
iter()迭代器
  • 获取可迭代对象的迭代器,iter()函数实际上就是调用了可迭代对象的__iter__方法。
lis3=[1,3,4,4,6,7]
res6=iter(lis3) # 返回的是一个迭代器
print("用list接收:{}".format(list(res6))) #用list接收
lis4=[1,3,4,4,6,7]
res6=iter(lis4)
print("用tuple接收:{}".format(tuple(res6)))#用tuple接收
复制代码
  • 使用next()函数来获取iter()迭代器的下一条数据
lis5=[1,3,4,4,6,7]
res6=iter(lis5)
while 1:
    try:
        v=next(res6)
    except StopIteration as e:
        print("遇到StopIteration迭代取值完成")
        break
    else:
        print("next获取迭代器的数据:{}".format(v))
复制代码
len()求数据类型长度
lis6=[1,3,4,4,6,7]
length=len(lis6)
print("获取数据类型{}的长度:{}".format(lis6,length))
复制代码
算术函数max、min、sum
  • max()求最大值
lis5=(2,3,4,4,6,7)
res_max=max(lis5)
print("获取是int类型的可迭代对象:{},的最大值:{}".format(lis5,res_max))
复制代码
  • min()求最小值
lis5=(2,3,4,4,6,7)
res_min=min(lis5)
print("获取是int类型的可迭代对象:{},的最小值:{}".format(lis5,res_min))
复制代码
  • sum()求和
lis13=[1,3,7,9,0,5]
total=sum(lis13)
print("快速求和:{}".format(total))
复制代码
map()
  • 返回的是一个迭代器,可以用list/tuple来接收,
lis7=[1,3,4,4,6,7]
res7=map(lambda x:x+1,lis7)
print("{}数据类型,map函数返回一个迭代器:{}".format(lis7,res7))
# 遍历map返回的迭代器的新的元素值
for i in res7:
    print("遍历出迭代器{}的值:{}".format(res7,i))
复制代码
zip()
  • 返回是迭代器,可以用list/tuple来接收,同样next()取值
lis8=[2,3,7,9,0,1]
lis9=[1,3,4,4,6]
res9=zip(lis8,lis9) # 打包为元组的列表,
# 元素个数与最短的列表一致,即会抛开元素个数多的那几个
print("内置打包函数zip:{},list接收:{}".format(res9,list(res9))) 
复制代码
range()
  • 注意一下:这只能是迭代对象,而不是迭代器
res0=range(9) #可迭代对象
print("内置函数range():{}".format(list(res)))
复制代码
  • 支持步长取值
range(n,m,k)
#n为起点,默认为0,m为终点,k为步长即公差
复制代码
reversed()反转
lis10=[1,3,7,9,0,5]
revers_li=reversed(lis10)
print("反转:{}".format(list(revers_li)))
复制代码
sorted()列表排序
lis11=[1,3,7,9,0,5]
bubble=sorted(lis11,reverse=True)#reverse=True降序,默认倒序
print("排序:{}".format(bubble))
复制代码
round()保留小数点
z_n=round(3.11233,3)#int是取整,round取float保留几位小数
print("小数点取整:{}".format(z_n))
复制代码
set()集合数据类型
  • 快速去重
lis12=[1,3,7,9,1,3]
lis_set=set(lis12)
print("list快速去重,set集合只存在不可变数据类型:{}".format(lis_set))
复制代码
  • 识别可变数据类型
lis14=[(1,),[1,2,3],1,{1,2,3},{"1":'1'},"12",True,1.123]
set(lis14)

执行结果:
1、TypeError: unhashable type: 'list',--去掉list类型
2、TypeError: unhashable type: 'set',--去掉set类型
3、TypeError: unhashable type: 'dict',--去掉dict类型
复制代码