1. 方法

 Python_常见内置函数 Python

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 注:class(类)是具有相同的属性和方法的对象的集合。

2. 例子

 (1)数据/集合类型

  • str(object=''); str(object=b'', encoding='utf-8', errors='strict')
  • int(x, base=10)
  • float(x=0)
  • complex(real=0, imag=0)
 1 >>> str(123)  2 '123'
 3 >>> str(['a', 'b', 'c'])  4 "['a', 'b', 'c']"
 5 >>> str(123).join(['a', 'b', 'c'])  6 'a123b123c'
 7 >>> int('123')  8 123
 9 >>> float('123') 10 123.0
11 >>> (0.75).as_integer_ratio() 12 (3, 4) 13 >>> (1.0).is_integer() 14 True 15 >>> complex(1, 2) 16 (1+2j) 17 >>> complex(1, 2).conjugate() 18 (1-2j)

注:str方法,详情见https://www.cnblogs.com/shz-blog/p/12426630.html

  • range(stop), range(start, stop[, step])
  • tuple(iterable=())
  • list([iterable])
  • dict(); dict(mapping); dict(iterable); dict(**kwargs)
 1 >>> r = range(40, 1, -3)  2 >>> t = tuple(r)  3 >>> l = list(r)  4 >>> t  5 (40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4)  6 >>> l  7 [40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4]  8 >>> r.count(1)  9 0 10 >>> r.index(31) 11 3
12 >>> t.count(10) 13 1
14 >>> t.index(31) 15 3
16 >>> l.sort() 17 >>> l 18 [4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40] 19 >>> dict(a=1, b=2, c=3) 20 {'a': 1, 'b': 2, 'c': 3} 21 >>> dict(zip(list('abc'), [1, 2, 3])) 22 {'a': 1, 'b': 2, 'c': 3} 23 >>> dict([('a', 1), ('b', 2), ('c', 3)]) 24 {'a': 1, 'b': 2, 'c': 3} 25 >>> dict(a=1, b=2, c=3).items() 26 dict_items([('a', 1), ('b', 2), ('c', 3)])

注:list方法,详情见https://www.cnblogs.com/shz-blog/p/12438954.html

    dict方法,详情见https://www.cnblogs.com/shz-blog/p/12456194.html

  • set([iterable])
  • frozenset([iterable])
 1 >>> s1 = set('hello')  2 >>> s1  3 {'o', 'h', 'e', 'l'}  4 >>> s1.add(123)  5 >>> s1  6 {'o', 'l', 'h', 'e', 123}  7 >>> s1.discard('o')  8 >>> s1  9 {'l', 'h', 'e', 123} 10 >>> s2 = set('lemon') 11 >>> s2 12 {'o', 'l', 'e', 'm', 'n'} 13 >>> s1.update(s2) 14 >>> s1 15 {'o', 'l', 'h', 'e', 'm', 'n', 123}
 1 >>> a = frozenset('hello world')  2 >>> a  3 frozenset({'w', 'l', ' ', 'r', 'o', 'h', 'd', 'e'})  4 >>> b = frozenset(range(5))  5 >>> b  6 frozenset({0, 1, 2, 3, 4})  7 >>> c = frozenset(range(2,7))  8 >>> c  9 frozenset({2, 3, 4, 5, 6}) 10 >>> b.union(c) # 并集 11 frozenset({0, 1, 2, 3, 4, 5, 6}) 12 >>> b.intersection(c) # 交集 13 frozenset({2, 3, 4}) 14 >>> b.difference(c) # 差集 15 frozenset({0, 1}) 16 >>> c.difference(b) # 差集 17 frozenset({5, 6}) 18 >>> b.symmetric_difference(c) # 对称差集 19 frozenset({0, 1, 5, 6}) 20 >>> b.isdisjoint(c) # 是否没有交集 21 False 22 >>> d = frozenset(range(2,5)) 23 >>> d 24 frozenset({2, 3, 4}) 25 >>> d.issubset(b) # 是否被包含 26 True 27 >>> b.issuperset(d) # 是否包含 28 True 29 >>> e = d.copy() #复制 30 >>> id(d) == id(e) 31 True
  •  bytearray和bytes
 1 >>> bytes()  2 b''
 3 >>> bytes(3)  4 b'\x00\x00\x00'
 5 >>> bytes('abc', 'utf-8')  6 b'abc'
 7 >>> bytes([1, 2, 3])  8 b'\x01\x02\x03'
 9 >>> b'abcd'.replace(b'bc', b'XY') 10 b'aXYd'
11 
12 >>> B = b'abc'
13 >>> BA = bytearray(B) 14 >>> BA 15 bytearray(b'abc') 16 >>> [i for i in B] 17 [97, 98, 99] 18 >>> [i for i in BA] 19 [97, 98, 99] 20 >>> B[0] = 65
21 Traceback (most recent call last): 22   File "<pyshell#25>", line 1, in <module>
23     B[0] = 65
24 TypeError: 'bytes' object does not support item assignment 25 >>> BA[0] = 65
26 >>> BA 27 bytearray(b'Abc')

(2)操作

  • format(value, format_spec='')

  详情见https://www.cnblogs.com/shz-blog/p/12422194.html

  • len(obj)
  • sorted(iterable, key=None, reverse=False)
  • reversed(sequence)
  • slice(stop); slice(start, stop[, step])
 1 >>> L = list('abcde')  2 >>> L  3 ['a', 'b', 'c', 'd', 'e']  4 >>> len(L)  5 5
 6 >>> sorted(L, reverse=True)  7 ['e', 'd', 'c', 'b', 'a']  8 >>> list(reversed(L))  9 ['e', 'd', 'c', 'b', 'a'] 10 >>> L[slice(1, 4, 2)] 11 ['b', 'd']
  • enumerate(iterable, start=0)
  • zip(iter1 [,iter2 [...]])
  • map(func, *iterables)
 1 >>> l1 = [1, 2, 3]  2 >>> l2 = [4, 5, 6]  3 >>> l3 = [7, 8, 9, 10]  4 
 5 >>> list(enumerate(l3))  6 [(0, 7), (1, 8), (2, 9), (3, 10)]  7 
 8 >>> list(zip(l1, l2))  9 [(1, 4), (2, 5), (3, 6)] 10 >>> list(zip(l1, l3)) 11 [(1, 7), (2, 8), (3, 9)] 12 >>> list(zip(*zip(l1, l3)))    # *理解为解压
13 [(1, 2, 3), (7, 8, 9)] 14 
15 >>> list(map(lambda x: x * 3, l1)) 16 [3, 6, 9] 17 >>> list(map(lambda x, y: x + y, l1, l2)) 18 [5, 7, 9]

(3)输入输出

  •  input(prompt=None)
  • open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  • print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
1 >>> age = input('请输入年龄:') 2 请输入年龄:18 3 >>> age 4 '18' 5 >>> type(age) 6 <class 'str'>

 注:open的用法,详情见https://www.cnblogs.com/sesshoumaru/p/6047046.html

        文件的打开、读取等各种操作,详情见https://www.cnblogs.com/hackpig/p/8215786.html

1 >>> print('hello world', 'hello Bunny', sep='\n', end='_'*10) 2 hello world 3 hello Bunny__________

注:flush的用法,参考https://blog.csdn.net/Zhongjie1986/article/details/91890109

(4)数学函数

  • abs(x)
  • divmod(x, y)
  • pow(x, y, z=None)
  • round(number, ndigits=None)
  • sum(iterable, start=0)
  • max(arg1, arg2, *args, *[, key=func]); max(iterable, *[, default=obj, key=func])
  • min(arg1, arg2, *args, *[, key=func]); min(iterable, *[, default=obj, key=func])
 1 >>> abs(-10)  2 10
 3 >>> divmod(11, 3)  4 (3, 2)  5 >>> pow(2, 3)  6 8
 7 >>> pow(2, 3, 3)  8 2
 9 >>> round(1.2345, 2) 10 1.23
11 >>> sum(range(5)) 12 10
 1 >>> max(1, 2, 3)  2 3  3 >>> max(1, 2, '3')  4 Traceback (most recent call last):  5 File "<pyshell#1>", line 1, in <module>  6 max(1, 2, '3')  7 TypeError: '>' not supported between instances of 'str' and 'int'  8 >>> max(1, 2, '3', key=int)  9 '3' 10 >>> max(-3, 1, 2, key=abs) 11 -3 12 >>> max('123') 13 '3' 14 >>> max([1, 8], [2, 6], [3, 4]) 15 [3, 4] 16 >>> couple = ({'name': 'Bunny', 'age': 18, 'salary': 888}, {'name': 'Twan', 'age': 20, 'salary': 666}) 17 >>> max(couple, key=lambda x: x['age']) 18 {'name': 'Twan', 'age': 20, 'salary': 666} 19 >>> max((), default=0) 20 0

 (5)编码

  • bin(number), oct(number), hex(number)
  • chr(i), ord(c), ascii(obj), repr(obj)
 1 >>> bin(10)  2 '0b1010'
 3 >>> oct(10)  4 '0o12'
 5 >>> hex(10)  6 '0xa'
 7 >>> chr(65)  8 'A'
 9 >>> ord('A') 10 65
11 >>> ascii('hello world') 12 "'hello world'"
13 >>> repr('hello world') 14 "'hello world'"
15 >>> ascii('你好,世界') 16 "'\\u4f60\\u597d\\uff0c\\u4e16\\u754c'"
17 >>> repr('你好,世界') 18 "'你好,世界'"

(6)判断

  • bool(x), all(iterable), any(iterable), callable(object)
 1 >>> all(['a', 'b', 'c'])  2 True  3 >>> all(['a', 'b', '', 'c'])  4 False  5 >>> all([])  6 True  7 >>> any([0, '', False])  8 False  9 >>> any([]) 10 False 11 >>> callable(str) 12 True 13 >>> callable('hello world') 14 False

(7)迭代器

  • iter(iterable); iter(callable, sentinel)
  • next(iterator[, default])
  • filter(function or None, iterable)
 1 >>> for i in iter(list('abc')):  2   print(i)  3  4 a  5 b  6 c  7  8 >>> from random import randint  9 >>> def guess(): 10 return randint(0,10) 11 >>> num = 1 12 >>> for i in iter(guess, 5): 13 print('第%s次猜测,猜测数字为:%s' % (num, i)) 14 num += 1 15 16 第1次猜测,猜测数字为:3 17 第2次猜测,猜测数字为:1

注:猜数字的例子来自http://www.imooc.com/article/287997

 1 >>> i = iter(list('abc'))  2 >>> next(i)  3 'a'  4 >>> next(i)  5 'b'  6 >>> next(i)  7 'c'  8 >>> next(i)  9 Traceback (most recent call last): 10 File "<pyshell#27>", line 1, in <module> 11  next(i) 12 StopIteration 13 >>> next(i, 0) 14 0
1 >>> def is_odd(n): 2 return n % 2 == 1 3 4 >>> oldlist = [i for i in range(1,11)] 5 >>> oldlist 6 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 7 >>> newlist = list(filter(is_odd, oldlist)) 8 >>> newlist 9 [1, 3, 5, 7, 9]

 (8)属性操作

  • getattr(obj, name[, default])
  • setattr(obj, name, value)
  • hasattr(obj, name)
  • delattr(obj, name)
 1 >>> class Person:  2       name = 'Bunny'
 3       age = 18
 4       sex = ''
 5 
 6 >>> Person.name  7 'Bunny'
 8 >>> Person.country  9 Traceback (most recent call last): 10   File "<pyshell#6>", line 1, in <module>
11  Person.country 12 AttributeError: type object 'Person' has no attribute 'country'
13 >>> getattr(Person, 'age', 0) 14 18
15 >>> getattr(Person, 'country', 0) 16 0 17 >>> setattr(Person, 'country', 'China') 18 >>> getattr(Person, 'country', 0) 19 'China'
20 >>> delattr(Person, 'sex') 21 >>> hasattr(Person, 'sex') 22 False

(9)辅助函数

  • dir([object])
1 >>> dir() 2 ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__'] 3 >>> dir(dict) 4 ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
  • help([object])
1 >>> help(hash) 2 Help on built-in function hash in module builtins: 3 4 hash(obj, /) 5 Return the hash value for the given object. 6 7  Two objects that compare equal must also have the same hash value, but the 8 reverse is not necessarily true.
  •  hash(obj)
1 >>> hash('hello world') 2 -8331809543453374991 3 >>> hash(tuple('abcde')) 4 5996617995451668254

  哈希的相关知识点:https://www.cnblogs.com/abdm-989/p/11329122.html

  • id([object])
1 >>> a = 'hello world'
2 >>> b = a 3 >>> id(a) 4 1873301041520
5 >>> id(b) 6 1873301041520
  • memoryview(object)
1 >>> a = memoryview(bytearray('abcde', 'utf-8')) 2 >>> a[1] 3 98 4 >>> a[1:3] 5 <memory at 0x0000017F63B83408> 6 >>> a[1:3].tobytes() 7 b'bc' 8 >>> a[1:3].tolist() 9 [98, 99]

优点:memoryview减少内存拷贝,优化效率(详情可参考https://www.hustyx.com/python/222/

  • type(object), type(name, bases, dict)
  • issubclass(cls, class_or_tuple)
  • isinstance(obj, class_or_tuple)
1 >>> a = 2
2 >>> type(a) 3 <class 'int'> 4 >>> isinstance(a, int) 5 True 6 >>> isinstance(a, str) 7 False 8 >>> isinstance(a, (str, int, list)) # 是元组中的一个就返回True 9 True
 1 >>> class A:  2    pass
 3 
 4 >>> class B(A):  5    pass
 6 
 7 >>> issubclass(B, A)  8 True  9 >>> isinstance(B(), A) 10 True 11 >>> type(B()) == A 12 False

(10)面向对象

  • @classmethod, @staticmethod
 1 >>> class A:  2     num = 0    #类属性
 3     #类方法
 4  @classmethod  5     def setNum(cls,newNum):  6         cls.num = newNum  7     #实例方法
 8     def __init__(self):  9         self.age = 1    #实例属性
10     def setAge(self, newAge): 11         self.age = newAge 12     #静态方法
13  @staticmethod 14     def printInfo(): 15         print('类方法修改类属性,实例方法修改实例属性,静态方法不访问类') 16 
17         
18 >>> a = A() 19 >>> a.setAge(18) 20 >>> a.age 21 18
22 >>> A.setAge(18) 23 Traceback (most recent call last): 24   File "<pyshell#21>", line 1, in <module>
25     A.setAge(18) 26 TypeError: setAge() missing 1 required positional argument: 'newAge'
27 >>> A.setNum(100) 28 >>> A.num 29 100
30 >>> A.printInfo() 31 类方法修改类属性,实例方法修改实例属性,静态方法不访问类
  • property(fget=None, fset=None, fdel=None, doc=None); @property

效果:

 1 >>> c = C()  2 >>> c.x = 10  3 >>> c.x  4 10  5 >>> del c.x  6 >>> c.x  7 Traceback (most recent call last):  8 File "<pyshell#18>", line 1, in <module>  9  c.x 10 File "<pyshell#13>", line 5, in x 11 return self._x 12 AttributeError: 'C' object has no attribute '_x'

方式1:

 1 >>> class C(object):  2   def getx(self): return self._x  3   def setx(self, value): self._x = value  4   def delx(self): del self._x  5   x = property(getx, setx, delx, "I'm the 'x' property.") 

方式2:

 1 >>> class C(object):  2    @property  3   def x(self):  4   "I am the 'x' property."  5   return self._x  6    @x.setter  7   def x(self, value):  8   self._x = value  9    @x.deleter 10   def x(self): 11   del self._x 
  •  super
 1 >>> class A:  2 def add(self, x):  3 print(x+1)  4  5 >>> class B(A):  6 def add(self, x):  7  super().add(x)  8  9 >>> B().add(2) 10 3
  •  globals, locals, vars([object])
 1 >>> word = 'hello world'
 2 >>> def test(x):  3     y = 1
 4     print(locals())  5 
 6 >>> test(2)  7 {'x': 2, 'y': 1}  8 >>> globals()  9 {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'word': 'hello world', 'test': <function test at 0x0000023BE4CEEF28>} 10 >>> class A: 11     a = 1
12 
13 >>> vars(A) 14 mappingproxy({'__module__': '__main__', 'a': 1, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None})

(11)可执行对象

  • eval(source, globals=None, locals=None)
  • exec(source, globals=None, locals=None)
  • compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
 1 >>> eval('2 * 3 + 4')  2 10
 3 >>> exec('print("hello world")')  4 hello world  5 >>> eval_code = compile('2 * 3 + 4', '', 'eval')  6 >>> eval_code  7 <code object <module> at 0x00000269270686F0, file "", line 1>
 8 >>> eval(eval_code)  9 10
10 >>> exec_code = compile('print("hello world")', '', 'exec') 11 >>> exec_code 12 <code object <module> at 0x0000026927074150, file "", line 1>
13 >>> exec(exec_code) 14 hello world

 需要注意的是,exec函数和eval函数都是将用户提供的字符串作为代码执行,将无法控制代码的行为,会带来严重的安全隐患,使用的时候要慎重。

1 >>> exec('abs="xyz"') 2 >>> abs(-1) 3 Traceback (most recent call last): 4   File "<pyshell#13>", line 1, in <module>
5     abs(-1) 6 TypeError: 'str' object is not callable

报错的原因是使用exec函数将'xyz'赋值给了abs,abs不再是求绝对值的函数了。为了避免污染命名空间,在调用exec函数时,可以给它传递第二个参数——命名空间。

1 >>> scope = {} 2 >>> exec('abs="xyz"', scope) 3 >>> abs(-1) 4 1
5 >>> scope['abs'] 6 'xyz'

注:参考了https://www.cnblogs.com/lucky-heng/p/10161190.html

 

题外话:关于内置函数,发现了一个非常详细的介绍(https://www.cnblogs.com/sesshoumaru/p/6140987.html),这个博主还对每个函数分别用一篇随笔来介绍。写到一半,看到这么详尽的博客,瞬间就有点不想写了,不过我写博客主要还是为了方便自己日后查阅,不够详细的地方可以移步上面这个博主。本文总体参考了官方说明文档、内置函数介绍英文版(https://docs.python.org/3/library/functions.html#classmethod)及其翻译版(http://www.beixiongxiong.com/course/bxx_bzk_02/2084/)。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄