博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 内置函数
阅读量:4540 次
发布时间:2019-06-08

本文共 13223 字,大约阅读时间需要 44 分钟。

Python内置函数的应用以及介绍


 官方文档:https://docs.python.org/3.6/library/functions.html

 Built-in Functions
 abs()  delattr()
 hash()  memoryview()  set()
 all()        
         
         
         
         
         
         
         
         
         
         
         
         

 

Python内置函数-abs(x)---返回数值的绝对值


abs(x)

  Return the absolute value of a number. The argument may be an integer or a floating point number. If the argument is a complex number, its magnitude is returned.

说明:

  返回值:返回数字的绝对值

  参   数 :数字,浮点,复数


示例:

In [1]: abs(3) Out[1]: 3In [2]: abs(-3)Out[2]: 3In [3]: abs(3.5)Out[3]: 3.5In [4]: abs(-3.5)Out[4]: 3.5In [5]: abs(1+1i)File "
", line 1abs(1+1i)^SyntaxError: invalid syntax正确的写法: In [6]: cobj = complex(1,2) # 创建一个复数的对象 In [7]: cobj Out[7]: (1+2j) In [8]: abs(cobj) # 复数 Out[8]: 2.23606797749979

 

 

 Python内置函数bin(x) 返回一个整数 int 或者长整数 long int 的二进制表示。


 

 

 说明:

bin(int/long int) 返回一个整数 int 或者长整数 long int 的二进制表示。

  1.将整形数字转化为二进制的字符串

>>> b = bin(3) >>> b'0b11'>>> type(b) #获取b的类型

---

 

 

 

 

 Python内置函数-enumerate(iterable.start=0)


 

说明:

  1. 接受一个可迭代对象(序列或者迭代器),返回一个可枚举对象(同时返回索引和值,其中索引可以指定起始值)。 

In [44]: seasons = ['Spring', 'Summer', 'Fall', 'Winter']In [45]: enumerate(seasons)Out[45]: 
In [46]: for i in enumerate(seasons): ....: print(i) ....: (0, 'Spring')(1, 'Summer')(2, 'Fall')(3, 'Winter')In [47]: list(enumerate(seasons))Out[47]: [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]In [48]: list(enumerate(seasons,start=2))Out[48]: [(2, 'Spring'), (3, 'Summer'), (4, 'Fall'), (5, 'Winter')]

  In [53]: for i in enumerate('python'):

  ....: print(i)
  ....:
  (0, 'p')
  (1, 'y')
  (2, 't')
  (3, 'h')
  (4, 'o')
  (5, 'n')

 Equivalent to:

In [54]: def enumerate(sequence, start=0):   ....:         n = start   ....:         for elem in sequence:   ....:                 yield n, elem   ....:                 n += 1

 

-------

 

 

Python内置函数-isinstance(object,classinfo)---返回布尔值


 

说明:

  1. 函数功能用于判断对象是否是类型对象的实例,object参数表示需要检查的对象,calssinfo参数表示类型对象。
  2. 如果object参数是classinfo类型对象(或者classinfo类对象的直接、间接、虚拟子类)的实例,返回True。
In [4]: demo_str = 'This is a demo'In [5]: isinstance(demo_str,str)Out[5]: TrueIn [6]: demo_list = [1,2,3,4]In [7]: isinstance(demo_list,list)Out[7]: TrueIn [8]: isinstance(demo_list,dict)Out[8]: FalseIn [20]: class A:   ....:     pass   ....: In [21]: class B(A):   ....:     pass   ....: In [22]: class C(B):   ....:     pass   ....: In [23]: a=A()In [24]: b=B()In [25]: c=C()In [26]: isinstance(a,A) Out[26]: TrueIn [27]: isinstance(a,B)Out[27]: FalseIn [28]: isinstance(b,A)# 继承关系Out[28]: TrueIn [29]: isinstance(c,A) # 继承关系Out[29]: True 

  3.如果object参数传入的是类型对象,则始终返回False。

In [30]: isinstance(list,list)# list为对象Out[30]: FalseIn [31]: isinstance(dict,dict)Out[31]: False

  4. 如果classinfo类型对象,是多个类型对象组成的元组,如果object对象是元组的任一类型对象中实例,则返回True,否则返回False。

In [32]: num = 2In [33]: isinstance(num,(int,str,dict,list)) # 任一即可 包含就可以Out[33]: TrueIn [34]: isinstance(a,(B,C))Out[34]: FalseIn [35]: isinstance(a,(A,B,C))Out[35]: True

  5.如果classinfo类型对象,不是一个类型对象或者由多个类型对象组成的元组,则会报错(TypeError)。

In [36]: num = 2In [37]: isinstance(num,[int,str,list,dict])---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)
in
()----> 1 isinstance(num,[int,str,list,dict])TypeError: isinstance() arg 2 must be a type or tuple of types

 

 

 

 

 Python内置函数--super()


 

说明:

  super() 函数是用于调用父类(超类)的一个方法。

  super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

  MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。

【1】最早之前,在子类(B)中调用父类(A)的方法采用的方式如下: 

In [7]: class A:   ...:     def __init__(self):   ...:         print('A.__init__')   ...:         In [8]: a = A()A.__init__In [9]: class B(A):   ...:     def __init__(self):   ...:         print('B.__init__')   ...:         A.__init__(self)   ...:         In [10]: b = B()B.__init__A.__init__

 实例分析:

class A:    def __init__(self):        self.A = 'AA'        print('A.__init__的实例化方法')class B(A):    def __init__(self):        self.B = 'BB'        A.__init__(self)        print('B.__init__的实例化方法')Bb = B()print(Bb)print(Bb.A) print(Bb.B)-------------------------A.__init__的实例化方法B.__init__的实例化方法<__main__.B object at 0x000001FDEB7571D0>AABB

  当在初始化传入参数的时候

class A:    def __init__(self,name):        self.name = 'AA'        print('A.__init__的实例化方法')class B(A):    def __init__(self,name,age):        self.age = 18        A.__init__(self,name)        # super(B,self).__init__(name)        print('B.__init__的实例化方法')Bb = B('A','B')print(Bb)print(Bb.name)print(Bb.age)--------------------------------A.__init__的实例化方法B.__init__的实例化方法<__main__.B object at 0x000001FB9C4C1208>AA18

  假设现在要更改新定义一个类(A1),并更改继承关系(B->A改成B->A1),则需要所有类中做如下修改:

#定义新的父类A1>>> class A1(object):    def __init__(self):        print('A1.__init__')#更改继承关系B->A改成B->A1>>> class B(A1):    def __init__(self):        print('B.__init__')        A1.__init__(self)#能正确调用新的父类A1的__init__方法>>> b = B()B.__init__A1.__init__#假设忘了修改A.__init__(self)>>> class B(A1):    def __init__(self):        print('B.__init__')        A.__init__(self)      #则还是调用了A的__init__方法>>> b = B()B.__init__A.__init__

【2】引入super之后,不需要显示指定父类的类名,增强了程序的可维护性,但是这种方式适用于单继承

class A:    def __init__(self,name):        self.name = 'AA'        print('A.__init__的实例化方法')class B(A):    def __init__(self,name,age):        self.age = 18        # A.__init__(self,name)        super().__init__(name) # 不带任何参数的super等效于super(类名,self),此种情况多用于单继承关系的子类中。        # super(B,self).__init__(name)        print('B.__init__的实例化方法')Bb = B('A','B')print(Bb)print(Bb.name)print(Bb.age)----------------------------A.__init__的实例化方法B.__init__的实例化方法<__main__.B object at 0x000001BB73261240>AA18

【3】如果第2个参数是一个对象,则对象必须是第1个参数指定类型的实例,此种关系多用于多层继承关系的子类中。

#定义父类A>>> class A(object):    def __init__(self):        print('A.__init__')#定义子类B,继承A,__init__中调用父类的__init__方法>>> class B(A):    def __init__(self):        print('B.__init__')        super().__init__()#定义子类C,继承B,__init__中调用父类的__init__方法        >>> class C(B):    def __init__(self):        print('C.__init__')        super().__init__()#实例化C时,执行C的__init__方法,调用直接父类B的__init__方法,又进一步调用间接父类A的__init__方法>>> c = C()C.__init__B.__init__A.__init__#重新定义子类C,继承关系不变,调用父类方法__init__时改用super(B,self)>>> class C(B):    def __init__(self):        print('C.__init__')        super(B,self).__init__()#实例化C时,执行C的__init__方法,super(B,self)代理找到B的父类A,将self转换成B的实例,直接调用了A的__init__方法,跳过了调用B的__init__方法>>> c = C()C.__init__A.__init__

  当在初始化函数中有参数的时候

class A:    def __init__(self,name):        self.name = 'Kevin'        print('A.__init__的实例化方法')class B(A):    def __init__(self,name,age):        self.age = 18        # A.__init__(self,name)        # super().__init__(name)        super(B,self).__init__(name)        print('B.__init__的实例化方法') #实例化C时,执行C的__init__方法,调用直接父类B的__init__方法,又进一步调用间接父类A的__init__方法class C(B):    def __init__(self,name,age,sex):        self.sex = '男'        print('C.__init__')        super().__init__(name,age)------------------------------------ Cc = C('A','B','C')print(Cc.name)print(Cc.age)print(Cc.sex)# 输出C.__init__A.__init__的实例化方法B.__init__的实例化方法Kevin18男

总结:根据上述的方式主要是注意在我们使用super()传入参数的时候。应该分析在整个类继承的整个过程。

class C(B):    def __init__(self,name,sex):        self.sex = '男'        print('C.__init__')        super(B,self).__init__(name) # 实际上是继承了A的初始化方法----------------------------------------------------C.__init__A.__init__的实例化方法Kevin男

【4】如果第2个参数时一个类型,则类型必须是第1个参数指定类型的子类,此种关系多用于多层继承关系的子类中,适用于类方法。

#定义父类A,并定义有一个类方法sayHello>>> class A(object):    @classmethod    def sayHello(cls):        print('A.sayHello')# 定义子类B,继承A,重写类方法sayHello,在其中调用父类的sayHello方法>>> class B(A):    @classmethod    def sayHello(cls):        print('B.sayHello')        super().sayHello()# 定义子类C,继承B,重写类方法sayHello,在其中调用父类的sayHello方法>>> class C(B):    @classmethod    def sayHello(cls):        print('C.sayHello')        super().sayHello()#调用C的类方法sayHello,其调用C的直接父类B的类方法sayHello,调用时B的sayHello方法又调用B的直接父类A的类方法sayHello>>> C.sayHello()C.sayHelloB.sayHelloA.sayHello#重新定义类C,继承关系不变,使用super(C,C)的方式调用父类方法>>> class C(B):    @classmethod    def sayHello(cls):        print('C.sayHello')        super(C,C).sayHello()#调用C的类方法sayHello,super(C,C)代理对象,找到C的直接父类B,然后调用C的直接父类B的类方法sayHello,调用时B的sayHello方法又调用B的直接父类A的类方法sayHello>>> C.sayHello()C.sayHelloB.sayHelloA.sayHello#重新定义类C,继承关系不变,使用super(B,C)的方式调用父类方法>>> class C(B):    @classmethod    def sayHello(cls):        print('C.sayHello')        super(B,C).sayHello()#调用C的类方法sayHello,super(B,C)代理对象,找到B的直接父类A,然后调用B的直接父类A的类方法sayHello,中间不会调用B的sayHello方法>>> C.sayHello()C.sayHelloA.sayHello#定义一个新类D,和A、B、C无继承关系>>> class D(object):    @classmethod    def sayHello(cls):        print('D.sayHello')#重新定义类C,继承关系不变,使用super(D,C)的方式调用父类方法>>> class C(B):    @classmethod    def sayHello(cls):        print('C.sayHello')        super(D,C).sayHello()#调用C的类方法sayHello,super(D,C)代理对象,找到B的直接父类object,然后将C转换成D类,转换失败调用出错>>> C.sayHello()C.sayHelloTraceback (most recent call last):  File "
", line 1, in
C.sayHello() File "
", line 5, in sayHello super(D,C).sayHello()TypeError: super(type, obj): obj must be an instance or subtype of type

 

 

 

 

 

Python内置函数--zip()


 

说明:

  zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

语法:

zip(iterable1,iterable2, ...)

参数:

  • iterable -- 一个或多个可迭代对象(字符串、列表、元祖、字典)

返回值:

  Python2中直接返回一个由元组组成的列表,Python3中返回的是一个对象,如果想要得到列表,可以用 list() 函数进行转换。

实例:

  函数功能是聚合传入的每个迭代器中相同位置的元素,返回一个新的元组类型迭代器。

In [5]: l = [1,2,3]In [6]: ll = [4,5,6]In [7]: zip_l = zip(l,ll)In [8]: from collections import IterableIn [9]: isinstance(zip_l,Iterable)Out[9]: TrueIn [10]: for j,k in zip_l:   ....:     print(j,k)   ....:     1 42 53 6In [11]: list(zip_l)Out[11]: []  # 返回的是迭代器。

如果传入的迭代器长度不一致,最短长度的迭代器迭代结束后停止聚合。

In [22]: l_s = [1,2,3] # 长度为3In [23]: l_l = [4,5,6,7] # 长度为4In [24]: list(zip(l_s,l_l))Out[24]: [(1, 4), (2, 5), (3, 6)] # 输出的值是以长度比较短的值进行的。

如果只传入一个迭代器,则返回的单个元素元组的迭代器。

In [25]: list(zip([1,2,3]))Out[25]: [(1,), (2,), (3,)]

如果不传入参数,则返回空的迭代器。

In [26]: list(zip())Out[26]: []

zip(*[iter(s)]*n)等效于调用zip(iter(s),iter(s),...,iter(s))。

In [28]: l = [1,2,3]In [29]: ll = l*3In [30]: llOut[30]: [1, 2, 3, 1, 2, 3, 1, 2, 3]In [31]: lll = [l]*3In [32]: lllOut[32]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]In [33]: list(zip(*[l]*3))Out[33]: [(1, 1, 1), (2, 2, 2), (3, 3, 3)]In [34]: list(zip(l,l,l))Out[34]: [(1, 1, 1), (2, 2, 2), (3, 3, 3)]

与 zip 相反,*zip 可理解为解压,返回二维矩阵式

In [35]: l = [1,2,3]In [36]: ll = [4,5,6]In [37]: zip(l,ll)Out[37]: 
In [38]: list(zip(l,ll))Out[38]: [(1, 4), (2, 5), (3, 6)]In [39]: zip(*zip(l,ll))Out[39]:
In [40]: list(zip(*zip(l,ll)))Out[40]: [(1, 2, 3), (4, 5, 6)]In [41]: a,b = list(zip(*zip(l,ll)))In [42]: aOut[42]: (1, 2, 3)In [43]: bOut[43]: (4, 5, 6)In [44]: list(a)Out[44]: [1, 2, 3]In [45]: list(b)Out[45]: [4, 5, 6]

 zip的高级应用

转换二维数组

In [20]: ll = [[1,2,3],[4,5,6],[7,8,9]]In [21]: [ [row[col] for row in ll] for col in range(len(ll[0]))]Out[21]: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

使用zip(*)进行转换

In [22]: ll = [[1,2,3],[4,5,6],[7,8,9]]In [23]: zip(*ll)Out[23]: 
In [24]: list(zip(*ll))Out[24]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]In [25]: map(list,zip(*ll))Out[25]:
In [26]: list(map(list,zip(*ll)))Out[26]: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

  使用zip合并相邻的列表项

In [42]: a = [1, 2, 3, 4, 5, 6]In [43]: zip(*([iter(a)] * 2))Out[43]: 
In [44]: list(zip(*([iter(a)] * 2)))Out[44]: [(1, 2), (3, 4), (5, 6)]

  合并列表式的一个推导式

In [71]: group_adjacent = lambda a, k: zip(*([iter(a)] * k))In [72]: group_adjacent(a, 3)Out[72]: 
In [73]: list(group_adjacent(a, 3))Out[73]: [(1, 2, 3), (4, 5, 6)]In [74]: list(group_adjacent(a, 2))Out[74]: [(1, 2), (3, 4), (5, 6)]In [75]: list(group_adjacent(a, 1))Out[75]: [(1,), (2,), (3,), (4,), (5,), (6,)]

  --------

In [76]: zip(a[::2], a[1::2])Out[76]: 
In [77]: list(zip(a[::2], a[1::2]))Out[77]: [(1, 2), (3, 4), (5, 6)]In [78]: zip(a[::3], a[1::3], a[2::3])Out[78]:
In [79]: list(zip(a[::3], a[1::3], a[2::3]))Out[79]: [(1, 2, 3), (4, 5, 6)]

-------

In [80]: group_adjacent = lambda a, k: zip(*(a[i::k] for i in range(k)))In [81]: list(group_adjacent(a, 3))Out[81]: [(1, 2, 3), (4, 5, 6)]In [82]: list(group_adjacent(a, 2))Out[82]: [(1, 2), (3, 4), (5, 6)]In [83]: list(group_adjacent(a, 1))Out[83]: [(1,), (2,), (3,), (4,), (5,), (6,)]

使用zip和iterators生成滑动窗口 (n -grams) 

In [85]: def n_grams(a, n):   ....:      z = (islice(a, i, None) for i in range(n))   ....:      return zip(*z)   ....: In [86]: a = [1, 2, 3, 4, 5, 6]In [87]: list(n_grams(a, 3))Out[87]: [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]In [88]: list(n_grams(a, 2))Out[88]: [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]In [89]: list(n_grams(a, 1))Out[89]: [(1,), (2,), (3,), (4,), (5,), (6,)]In [90]: list(n_grams(a, 4))Out[90]: [(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]

使用zip反转字典

In [91]: m = {
'a': 1, 'b': 2, 'c': 3, 'd': 4}In [92]: m.items()Out[92]: dict_items([('d', 4), ('c', 3), ('b', 2), ('a', 1)])In [93]: zip(m.values(), m.keys())Out[93]:
In [94]: list(zip(m.values(), m.keys())In [94]: list(zip(m.values(), m.keys()))Out[94]: [(4, 'd'), (3, 'c'), (2, 'b'), (1, 'a')]In [95]: mi = dict(zip(m.values(), m.keys()))In [96]: miOut[96]: {1: 'a', 2: 'b', 3: 'c', 4: 'd'}

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Echo-O/p/9289811.html

你可能感兴趣的文章
C#高级编程 (第六版) 学习 第一章:.Net体系结构
查看>>
Ubuntu下搭建jsp开发环境
查看>>
理解django框架中的MTV与MVC模式
查看>>
Trie树(字典树)
查看>>
传输介质
查看>>
MyBatis学习(十二)--懒加载
查看>>
实时爬取上海快3的结果
查看>>
POJ 3050
查看>>
SSL/TLS加密传输与数字证书解读
查看>>
在xcode中用 swift 进行网络服务请求
查看>>
swift 如何在IOS应用图标上添加消息数
查看>>
读取上传文件内容
查看>>
requestAnimationFrame优势何在?
查看>>
HDU—4463 Outlets 最小生成树
查看>>
ExtJs总结(从其他地方找的记下来)
查看>>
Java中HashMap和TreeMap的区别深入理解
查看>>
bat 获取命令执行后的多个返回值,并取最后一个
查看>>
TensorFlow MNIST 问题解决
查看>>
C#微信开发之旅(一):前言
查看>>
C语言常用数学函数及其用法
查看>>