1. 方法
注:class(类)是具有相同的属性和方法的对象的集合。
2. 例子
(1)数据/集合类型
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.011 >>> (0.75).as_integer_ratio()12 (3, 4)13 >>> (1.0).is_integer()14 True15 >>> complex(1, 2)16 (1+2j)17 >>> complex(1, 2).conjugate()18 (1-2j)
注:str方法,详情见https://www.cnblogs.com/shz-blog/p/12426630.html
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 010 >>> r.index(31)11 312 >>> t.count(10)13 114 >>> t.index(31)15 316 >>> l.sort()17 >>> l18 [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
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 >>> s212 {'o', 'l', 'e', 'm', 'n'}13 >>> s1.update(s2)14 >>> s115 {'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 False22 >>> d = frozenset(range(2,5))23 >>> d24 frozenset({2, 3, 4})25 >>> d.issubset(b) # 是否被包含26 True27 >>> b.issuperset(d) # 是否包含28 True29 >>> e = d.copy() #复制30 >>> id(d) == id(e)31 True
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 >>> BA15 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] = 6521 Traceback (most recent call last):22 File "", line 1, in 23 B[0] = 6524 TypeError: 'bytes' object does not support item assignment25 >>> BA[0] = 6526 >>> BA27 bytearray(b'Abc')
(2)操作
详情见https://www.cnblogs.com/shz-blog/p/12422194.html
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']
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)输入输出
1 >>> age = input('请输入年龄:')2 请输入年龄:183 >>> age4 '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 world3 hello Bunny__________
注:flush的用法,参考https://blog.csdn.net/Zhongjie1986/article/details/91890109
(4)数学函数
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.2311 >>> 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 "", line 1, in 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 -312 >>> 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)编码
1 >>> bin(10) 2 '0b1010' 3 >>> oct(10) 4 '0o12' 5 >>> hex(10) 6 '0xa' 7 >>> chr(65) 8 'A' 9 >>> ord('A')10 6511 >>> 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)判断
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 False11 >>> callable(str)12 True13 >>> callable('hello world')14 False
(7)迭代器
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 = 112 >>> for i in iter(guess, 5):13 print('第%s次猜测,猜测数字为:%s' % (num, i))14 num += 115 16 第1次猜测,猜测数字为:317 第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 "
1 >>> def is_odd(n):2 return n % 2 == 13 4 >>> oldlist = [i for i in range(1,11)]5 >>> oldlist6 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]7 >>> newlist = list(filter(is_odd, oldlist))8 >>> newlist9 [1, 3, 5, 7, 9]
(8)属性操作
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 "", line 1, in 11 Person.country12 AttributeError: type object 'Person' has no attribute 'country'13 >>> getattr(Person, 'age', 0)14 1815 >>> getattr(Person, 'country', 0)16 017 >>> setattr(Person, 'country', 'China')18 >>> getattr(Person, 'country', 0)19 'China'20 >>> delattr(Person, 'sex')21 >>> hasattr(Person, 'sex')22 False
(9)辅助函数
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']
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 the8 reverse is not necessarily true.
1 >>> hash('hello world')2 -83318095434533749913 >>> hash(tuple('abcde'))4 5996617995451668254
哈希的相关知识点:https://www.cnblogs.com/abdm-989/p/11329122.html
1 >>> a = 'hello world'2 >>> b = a3 >>> id(a)4 18733010415205 >>> id(b)6 1873301041520
1 >>> a = memoryview(bytearray('abcde', 'utf-8'))2 >>> a[1]3 984 >>> a[1:3]56 >>> a[1:3].tobytes()7 b'bc'8 >>> a[1:3].tolist()9 [98, 99]
优点:memoryview减少内存拷贝,优化效率(详情可参考https://www.hustyx.com/python/222/)
1 >>> a = 22 >>> type(a)3 <class 'int'>4 >>> isinstance(a, int)5 True6 >>> isinstance(a, str)7 False8 >>> isinstance(a, (str, int, list)) # 是元组中的一个就返回True9 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 True11 >>> type(B()) == A12 False
(10)面向对象
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 = newAge12 #静态方法13 @staticmethod14 def printInfo():15 print('类方法修改类属性,实例方法修改实例属性,静态方法不访问类')16 17 18 >>> a = A()19 >>> a.setAge(18)20 >>> a.age21 1822 >>> A.setAge(18)23 Traceback (most recent call last):24 File "", line 1, in 25 A.setAge(18)26 TypeError: setAge() missing 1 required positional argument: 'newAge'27 >>> A.setNum(100)28 >>> A.num29 10030 >>> A.printInfo()31 类方法修改类属性,实例方法修改实例属性,静态方法不访问类
效果:
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 "", line 1, in 9 c.x10 File "", line 5, in x11 return self._x12 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.deleter10 def x(self):11 del self._x
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
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':}10 >>> class A:11 a = 112 13 >>> vars(A)14 mappingproxy({'__module__': '__main__', 'a': 1, '__dict__':<attribute '__dict__' of 'A' objects>, '__weakref__':<attribute '__weakref__' of 'A' objects>, '__doc__': None})
(11)可执行对象
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 at 0x00000269270686F0, file "", line 1> 8 >>> eval(eval_code) 9 1010 >>> exec_code = compile('print("hello world")', '', 'exec')11 >>> exec_code12 <code object 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 "", line 1, in 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 15 >>> 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/)。
Copyright © 2004-2024 Ynicp.com 版权所有 法律顾问:建纬(昆明)律师事务所 昆明市网翼通科技有限公司 滇ICP备08002592号-4