Python_常见内置函数

1. 方法

Python_常见内置函数

 注: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)
>>> str(123)
‘123‘
>>> str([‘a‘, ‘b‘, ‘c‘])
"[‘a‘, ‘b‘, ‘c‘]"
>>> str(123).join([‘a‘, ‘b‘, ‘c‘])
‘a123b123c‘
>>> int(‘123‘)
123
>>> float(‘123‘)
123.0
>>> (0.75).as_integer_ratio()
(3, 4)
>>> (1.0).is_integer()
True
>>> complex(1, 2)
(1+2j)
>>> complex(1, 2).conjugate()
(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)
>>> r = range(40, 1, -3)
>>> t = tuple(r)
>>> l = list(r)
>>> t
(40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4)
>>> l
[40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4]
>>> r.count(1)
0
>>> r.index(31)
3
>>> t.count(10)
1
>>> t.index(31)
3
>>> l.sort()
>>> l
[4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40]
>>> dict(a=1, b=2, c=3)
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3}
>>> dict(zip(list(‘abc‘), [1, 2, 3]))
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3}
>>> dict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)])
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3}
>>> dict(a=1, b=2, c=3).items()
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])
>>> s1 = set(‘hello‘)
>>> s1
{‘o‘, ‘h‘, ‘e‘, ‘l‘}
>>> s1.add(123)
>>> s1
{‘o‘, ‘l‘, ‘h‘, ‘e‘, 123}
>>> s1.discard(‘o‘)
>>> s1
{‘l‘, ‘h‘, ‘e‘, 123}
>>> s2 = set(‘lemon‘)
>>> s2
{‘o‘, ‘l‘, ‘e‘, ‘m‘, ‘n‘}
>>> s1.update(s2)
>>> s1
{‘o‘, ‘l‘, ‘h‘, ‘e‘, ‘m‘, ‘n‘, 123}
>>> a = frozenset(‘hello world‘)
>>> a
frozenset({‘w‘, ‘l‘, ‘ ‘, ‘r‘, ‘o‘, ‘h‘, ‘d‘, ‘e‘})
>>> b = frozenset(range(5))
>>> b
frozenset({0, 1, 2, 3, 4})
>>> c = frozenset(range(2,7))
>>> c
frozenset({2, 3, 4, 5, 6})
>>> b.union(c)    # 并集
frozenset({0, 1, 2, 3, 4, 5, 6})
>>> b.intersection(c)    # 交集
frozenset({2, 3, 4})
>>> b.difference(c)    # 差集
frozenset({0, 1})
>>> c.difference(b)    # 差集
frozenset({5, 6})
>>> b.symmetric_difference(c)    # 对称差集
frozenset({0, 1, 5, 6})
>>> b.isdisjoint(c)    # 是否没有交集
False
>>> d = frozenset(range(2,5))
>>> d
frozenset({2, 3, 4})
>>> d.issubset(b)    # 是否被包含
True
>>> b.issuperset(d)    # 是否包含
True
>>> e = d.copy()    #复制
>>> id(d) == id(e)
True
  •  bytearray和bytes
>>> bytes()
b‘‘
>>> bytes(3)
b‘\x00\x00\x00‘
>>> bytes(‘abc‘, ‘utf-8‘)
b‘abc‘
>>> bytes([1, 2, 3])
b‘\x01\x02\x03‘
>>> b‘abcd‘.replace(b‘bc‘, b‘XY‘)
b‘aXYd‘

>>> B = b‘abc‘
>>> BA = bytearray(B)
>>> BA
bytearray(b‘abc‘)
>>> [i for i in B]
[97, 98, 99]
>>> [i for i in BA]
[97, 98, 99]
>>> B[0] = 65
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    B[0] = 65
TypeError: ‘bytes‘ object does not support item assignment
>>> BA[0] = 65
>>> BA
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])
>>> L = list(‘abcde‘)
>>> L
[‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘]
>>> len(L)
5
>>> sorted(L, reverse=True)
[‘e‘, ‘d‘, ‘c‘, ‘b‘, ‘a‘]
>>> list(reversed(L))
[‘e‘, ‘d‘, ‘c‘, ‘b‘, ‘a‘]
>>> L[slice(1, 4, 2)]
[‘b‘, ‘d‘]
  • enumerate(iterable, start=0)
  • zip(iter1 [,iter2 [...]])
  • map(func, *iterables)
>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> l3 = [7, 8, 9, 10]

>>> list(enumerate(l3))
[(0, 7), (1, 8), (2, 9), (3, 10)]

>>> list(zip(l1, l2))
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(l1, l3))
[(1, 7), (2, 8), (3, 9)]
>>> list(zip(*zip(l1, l3)))    # *理解为解压
[(1, 2, 3), (7, 8, 9)]

>>> list(map(lambda x: x * 3, l1))
[3, 6, 9]
>>> list(map(lambda x, y: x + y, l1, l2))
[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)
>>> age = input(‘请输入年龄:‘)
请输入年龄:18
>>> age
‘18‘
>>> type(age)
<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])
>>> abs(-10)
10
>>> divmod(11, 3)
(3, 2)
>>> pow(2, 3)
8
>>> pow(2, 3, 3)
2
>>> round(1.2345, 2)
1.23
>>> sum(range(5))
10
>>> max(1, 2, 3)
3
>>> max(1, 2, ‘3‘)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    max(1, 2, ‘3‘)
TypeError: ‘>‘ not supported between instances of ‘str‘ and ‘int‘
>>> max(1, 2, ‘3‘, key=int)
‘3‘
>>> max(-3, 1, 2, key=abs)
-3
>>> max(‘123‘)
‘3‘
>>> max([1, 8], [2, 6], [3, 4])
[3, 4]
>>> couple = ({‘name‘: ‘Bunny‘, ‘age‘: 18, ‘salary‘: 888}, {‘name‘: ‘Twan‘, ‘age‘: 20, ‘salary‘: 666})
>>> max(couple, key=lambda x: x[‘age‘])
{‘name‘: ‘Twan‘, ‘age‘: 20, ‘salary‘: 666}
>>> max((), default=0)
0

 (5)编码

  • bin(number), oct(number), hex(number)
  • chr(i), ord(c), ascii(obj), repr(obj)
>>> bin(10)
‘0b1010‘
>>> oct(10)
‘0o12‘
>>> hex(10)
‘0xa‘
>>> chr(65)
‘A‘
>>> ord(‘A‘)
65
>>> ascii(‘hello world‘)
"‘hello world‘"
>>> repr(‘hello world‘)
"‘hello world‘"
>>> ascii(‘你好,世界‘)
"‘\\u4f60\\u597d\\uff0c\\u4e16\\u754c‘"
>>> repr(‘你好,世界‘)
"‘你好,世界‘"

(6)判断

  • bool(x), all(iterable), any(iterable), callable(object)
>>> all([‘a‘, ‘b‘, ‘c‘])
True
>>> all([‘a‘, ‘b‘, ‘‘, ‘c‘])
False
>>> all([])
True
>>> any([0, ‘‘, False])
False
>>> any([])
False
>>> callable(str)
True
>>> callable(‘hello world‘)
False

(7)迭代器

  • iter(iterable); iter(callable, sentinel)
  • next(iterator[, default])
  • filter(function or None, iterable)
>>> for i in iter(list(‘abc‘)):
      print(i)
    
a
b
c

>>> from random import randint
>>> def guess():
    return randint(0,10)
>>> num = 1
>>> for i in iter(guess, 5):
    print(‘第%s次猜测,猜测数字为:%s‘ % (num, i))
    num += 1
    
第1次猜测,猜测数字为:3
第2次猜测,猜测数字为:1

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

>>> i = iter(list(‘abc‘))
>>> next(i)
‘a‘
>>> next(i)
‘b‘
>>> next(i)
‘c‘
>>> next(i)
Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    next(i)
StopIteration
>>> next(i, 0)
0
>>> def is_odd(n):
    return n % 2 == 1

>>> oldlist = [i for i in range(1,11)]
>>> oldlist
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> newlist = list(filter(is_odd, oldlist))
>>> newlist
[1, 3, 5, 7, 9]

 (8)属性操作

  • getattr(obj, name[, default])
  • setattr(obj, name, value)
  • hasattr(obj, name)
  • delattr(obj, name)
>>> class Person:
      name = ‘Bunny‘
      age = 18
      sex = ‘女‘

>>> Person.name
‘Bunny‘
>>> Person.country
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    Person.country
AttributeError: type object ‘Person‘ has no attribute ‘country‘
>>> getattr(Person, ‘age‘, 0)
18
>>> getattr(Person, ‘country‘, 0)
0
>>> setattr(Person, ‘country‘, ‘China‘)
>>> getattr(Person, ‘country‘, 0)
‘China‘
>>> delattr(Person, ‘sex‘)
>>> hasattr(Person, ‘sex‘)
False

(9)辅助函数

  • dir([object])
>>> dir()
[‘__annotations__‘, ‘__builtins__‘, ‘__doc__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘]
>>> dir(dict)
[‘__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])
>>> help(hash)
Help on built-in function hash in module builtins:

hash(obj, /)
    Return the hash value for the given object.
    
    Two objects that compare equal must also have the same hash value, but the
    reverse is not necessarily true.
  •  hash(obj)
>>> hash(‘hello world‘)
-8331809543453374991
>>> hash(tuple(‘abcde‘))
5996617995451668254

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

  • id([object])
>>> a = ‘hello world‘
>>> b = a
>>> id(a)
1873301041520
>>> id(b)
1873301041520
  • memoryview(object)
>>> a = memoryview(bytearray(‘abcde‘, ‘utf-8‘))
>>> a[1]
98
>>> a[1:3]
<memory at 0x0000017F63B83408>
>>> a[1:3].tobytes()
b‘bc‘
>>> a[1:3].tolist()
[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)
>>> a = 2
>>> type(a)
<class ‘int‘>
>>> isinstance(a, int)
True
>>> isinstance(a, str)
False
>>> isinstance(a, (str, int, list))    # 是元组中的一个就返回True
True
>>> class A:
 2    pass

>>> class B(A):
 5    pass

>>> issubclass(B, A)
True
>>> isinstance(B(), A)
True
>>> type(B()) == A
False

(10)面向对象

  • @classmethod, @staticmethod
>>> class A:
    num = 0    #类属性
    #类方法
    @classmethod
    def setNum(cls,newNum):
        cls.num = newNum
    #实例方法
    def __init__(self):
        self.age = 1    #实例属性
    def setAge(self, newAge):
        self.age = newAge
    #静态方法
    @staticmethod
    def printInfo():
        print(‘类方法修改类属性,实例方法修改实例属性,静态方法不访问类‘)

        
>>> a = A()
>>> a.setAge(18)
>>> a.age
18
>>> A.setAge(18)
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    A.setAge(18)
TypeError: setAge() missing 1 required positional argument: ‘newAge‘
>>> A.setNum(100)
>>> A.num
100
>>> A.printInfo()
类方法修改类属性,实例方法修改实例属性,静态方法不访问类
  • property(fget=None, fset=None, fdel=None, doc=None); @property

效果:

>>> c = C()
>>> c.x = 10
>>> c.x
10
>>> del c.x
>>> c.x
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    c.x
  File "<pyshell#13>", line 5, in x
    return self._x
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:

>>> class C(object):
      @property
      def x(self):
          "I am the ‘x‘ property."
          return self._x
      @x.setter
      def x(self, value):
          self._x = value
      @x.deleter
      def x(self):
          del self._x
  •  super
>>> class A:
    def add(self, x):
        print(x+1)
        
>>> class B(A):
    def add(self, x):
        super().add(x)
        
>>> B().add(2)
3
  •  globals, locals, vars([object])
>>> word = ‘hello world‘
>>> def test(x):
    y = 1
    print(locals())

>>> test(2)
{‘x‘: 2, ‘y‘: 1}
>>> globals()
{‘__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>}
>>> class A:
    a = 1

>>> vars(A)
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)
>>> eval(‘2 * 3 + 4‘)
10
>>> exec(‘print("hello world")‘)
hello world
>>> eval_code = compile(‘2 * 3 + 4‘, ‘‘, ‘eval‘)
>>> eval_code
<code object <module> at 0x00000269270686F0, file "", line 1>
>>> eval(eval_code)
10
>>> exec_code = compile(‘print("hello world")‘, ‘‘, ‘exec‘)
>>> exec_code
<code object <module> at 0x0000026927074150, file "", line 1>
>>> exec(exec_code)
hello world

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

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

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

>>> scope = {}
>>> exec(‘abs="xyz"‘, scope)
>>> abs(-1)
1
>>> scope[‘abs‘]
‘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/)。

相关推荐