python 知识复习杂烩2020-12-12

python 知识复习杂烩2020-12-121、正则表达式importrea=”fdhd78378hhh陈伟dfhj23号”res=re.findall(“\d+[a-z]+”,a)#匹配数字(一个或多个)连着字母的部分print(res)res1=re.fin

python

1、正则表达式

import re
a = “fdh d783 78hhh 陈伟 dfhj 23 号”
res = re.findall(“\d+[a-z]+”, a) #匹配数字(一个或多个)连着字母的部分
print(res)
res1 = re.findall(“[a-z]\d+”, a) #匹配多个数字和字母连着部分
print(res1)
res2 = re.findall(“\d+[a-z]+|[a-z]\d+”, a) #匹配上述两种
print(res2)
res2 = re.findall(“hhh (.*?) dfhj (.*?) “, a) #()部分为要匹配的内容,前后符合括号外要求
print(res2)

结果:

[’78hhh’]
[‘d783’]
[‘d783′, ’78hhh’]
[(‘陈伟’, ’23’)]

(.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配

(.*?)是非贪婪匹配,会把满足正则的尽可能少匹配

2、格式化时间:

import time
#格式化本地时间,strftime有个str,意思就是把时间转为指定格式的字符串
t = time.strftime(“%Y-%m-%d %H:%M:%S”, time.localtime())
print(t)
#时间戳
s = time.time()
print(s)
#用时间戳构建本地时间对象
st = time.localtime(s)
print(st)
print(time.strftime(“%Y-%m-%d %H:%M:%S”, st))
#时间戳格式化

结果:

2020-12-12 22:14:44
1607782484.8194642
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=12, tm_hour=22, tm_min=14, tm_sec=44, tm_wday=5, tm_yday=347, tm_isdst=0)
2020-12-12 22:14:44

3、列出常见的状态码和意义

200 OK  请求正常处理完毕

400 Bad Request  请求报文语法错误或参数错误

404 Not Found  无法找到请求资源(服务器无理由拒绝)

500 Internal Server Error  服务器故障或Web应用故障

4、python内存管理机制:引用计数,垃圾回收,内存池机制

引用计数

Python采用了类似Windows内核对象一样的方式来对内存进行管理。每一个对象,都维护这一个对指向该对对象的引用的计数。当一个对象的引用为0时,该对象会被当做垃圾回收。系统会自动回收,也可以手动回收。

垃圾回收:

1、当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉。它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。

2、垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0)。标记-清除机制:用来解决引用计数机制产生的循环引用,进而导致内存泄漏的问题 。 循环引用只有在容器对象才会产生,比如字典,元组,列表等。

顾名思义,该机制在进行垃圾回收时分成了两步,分别是:

  • 标记阶段,遍历所有的对象,如果是可达的(reachable),也就是还有对象引用它,那么就标记该对象为可达
  • 清除阶段,再次遍历对象,如果发现某个对象没有标记为可达(即为Unreachable),则就将其回收

内存池机制:

当创建大量消耗小内存的对象时,频繁调用new/malloc会导致大量的内存碎片,致使效率降低。内存池的作用就是预先在内存中申请一定数量的,大小相等的内存块留作备用,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够之后再申请新的内存。这样做最显著的优势就是能够减少内存碎片,提升效率。

分代回收:

对象存在时间越长,越可能不是垃圾,应该越少去收集。Python将所有的对象分为年轻代(第0代)、中年代(第1代)、老年代(第2代)三代。所有的新建对象默认是 第0代对象。当在第0代的gc扫描中存活下来的对象将被移至第1代,在第1代的gc扫描中存活下来的对象将被移至第2代。当某一代中被分配的对象与被释放的对象之差达到某一阈值时(分代回收机制的参数阈值设置),就会触发当前一代的gc扫描。当某一代被扫描时,比它年轻的一代也会被扫描,因此,第2代的gc扫描发生时,第0,1代的gc扫描也会发生,即为全代扫描。

可参考这篇文章:https://www.cnblogs.com/python-miao/p/13813123.html

5、异常处理机制:

1、如果有finally,则该部分一定会被执行

2、Python的错误其实也是class,所有的错误类型都继承自BaseException,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。

try:
    foo()
except ValueError as e:
    print('ValueError')
except UnicodeError as e:
    print('UnicodeError')

第二个except永远也捕获不到UnicodeError,因为UnicodeErrorValueError的子类,如果有,也被第一个except给捕获了。

3、不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了;如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出。

4、可根据需要手动编写抛出错误代码。

# err_raise.py
class FooError(ValueError):
    pass

def foo(s):
    n = int(s)
    if n==0:
        raise FooError('invalid value: %s' % s)
    return 10 / n

foo('0')

6、多线程

python3中thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用”thread” 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。

7、函数参数类型:

(1)带*号的参数说明

*name:*name必须出现在**name之前,他接收一个元组,包含所有出现在**name之前的参数

**name:接收一个字典。

调用方法:

def fin(a, *b, **c):
    print(a)
    print(b)
    print(c)

fin(1,  "a", "b", c="curry") #1被a接收,"a", "b"被b接收,形成一个元组。c="curry"被c接收,形成一个字典。

输出:

1
(‘a’, ‘b’)
{‘c’: ‘curry’}

(2)参数列表分拆

当你要传递的参数已经是一个列表,但要调用的函数却接受分开一个个的参数值。这时候你要把已有的列表拆开来。

1、拆分列表

args = [3, 20, 3]
L = list(range(*args))
print(L)

输出:[3, 6, 9, 12, 15, 18],说明:会把args解析成单个元素传入range

2、拆分字典

def parrot(vol, stat = "sss", action = "poom"):
    print("--this 1", action, end=" ")
    print("if you put 2", vol, "vol throught is 3", end = ' ')
    print("e's 4", stat, "!")

d = {"vol": "four milion", "stat":"bleedin", "action":"poom"}
parrot(**d)

输出:–this 1 poom if you put 2 four milion vol throught is 3 e’s 4 bleedin !  , 说明:会把字典d解析成健值对传给函数参数

8、数据结构

列表:

(1)list中,像 insert , remove 或者 sort 这些修改列表的方法没有打印返回值–它们返回 None (pop有返回值,返回出栈的元素)。在 python 中对所有可变的数据类型这是统一的设计原则。
(2) 列表推导式:vec = [-2, -3, -4]    [x * 2 for x in vec]

(3)嵌套列表推导式:构建二维数组 [[row[i] for row in matrix] for i in range(4)]   #matrix本身是一个二维数组

元组:

(1)元组输入一定有括号,输入不一定有。比如 t = 1, 2, 3  这样定义也产生一个元组,多个元素的元组3后面逗号不一定要有,但单个元素的元组后面必须有逗号,不然就是一个常量。 t = (6,)

(2)元组有很多用途。例如 (x, y) 坐标对,数据库中的员工记录等等。元组就像字符串, 不可变的。

集合:

(1)集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算。
(2)大括号或 set() 函数可以用来创建集合。注意:想要创建空集合,你必须使用 set() 而不是 {} ,后者是字典。

字典:

(1)字典以 关键字 为索引,关键字可以是任意不可变类型,通常用字符串或数值。如果元组中只包含字符串和数字,它可以做为关键字,如果它直接或间接的包含了可变对象,就不能当做关键字。不能用列表做关键字,因为列表可以用索引、切割或者 append() 和 extend() 等方法改变。理解字典的最佳方式是把它看做无序的键: 值对 (key:value 对)集合,键必须是互不相同的(在同一个字典之内)。一对大括号创建一个空的字典: {} 。初始化列表时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。

(2)dict() 构造函数可以直接从 key-value 对中创建字典。dict(sape=4139, guido=4127, jack=4098)或者dict([(‘sape’, 4139), (‘guido’, 4127), (‘jack’, 4098)]) 或者{key:value}

(3)字典访问、遍历,获取健值等

9、条件深入:

while 和 if 语句中使用的条件不仅可以使用比较,而且可以包含任意的操作。比较操作符 in 和 not in 审核值是否在一个区间之内。操作符 is 和 is not 比较两个对象是否相同。

10、模块:

(1)注意可以直接导入模块中的方法

(2)模块搜索路径:模块的搜索路径,导入一个叫 spam 的模块时,解释器先在当前目录中搜索名为 spam.py 的文件。如果没有找到的话,接着会到 sys.path 变量中给出的目录列表中查找。

11、主要内置函数

(1)dir():按模块名搜索模块定义,它返回一个字符串类型的存储列表。无参数调用时,dir() 函数返回当前定义的命名。该列表列出了所有类型的名称:变量,模块,函数,等等,包括自己定义的。
>>> dir()
[‘__annotations__’, ‘__builtins__’, ‘__doc__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__spec__’, ‘a’, ‘b’, ‘basket’, ‘k’, ‘key’, ‘knights’, ‘pi’, ‘sys’, ‘t’, ‘v’, ‘vec’]

dir() 不会列出内置函数和变量名,它们在标准模块 builtins 中定义:

>>> import builtins
>>> dir(builtins)

12、输入输出:

(1)Python 有办法将任意值转为字符串:将它传入repr() 或 str() 函数。函数 str() 用于将值转化为适于人阅读的形式,而 repr() 转化为供解释器读取的形式(如果没有等价的语法,则会发生 SyntaxError 异常)某对象没有适于人阅读的解释形式的话,str() 会返回与 repr() 等同的值。
(2)str.rjust() :它把字符串输出到一列,并通过向左侧填充空格来使其右对齐。类似的方法还有 str.ljust() 和 str.center()。

str.zfill() 它用于向数值的字符串表达左侧填充 0。

(3)str.format()
13、文件读写

用关键字 with 处理文件对象是个好习惯。它的先进之处在于文件用完后会自动关闭,就算发生异常也没关系。
14、json:

(1)标准模块 json 可以接受 Python 数据结构,并将它们转换为字符串表示形式;此过程称为 序列化。从字符串表示形式重新构建数据结构称为 反序列化。

(2)

15、类:

(1)作用域:就是一个 Python 程序可以直接访问命名空间的正文区域。global 语句用以指明某个特定的变量为全局作用域,并重新绑定它。nonlocal 语句用以指明某个特定的变量为封闭作用域,并重新绑定它。

(2)可以这么写,把方法赋值给变量,变量就有了对这个函数的引用,要运行该函数就要加上括号()

class Test:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def cal(self):
        return self.a + self.b

test = Test(5, 5)
c = test.cal
print(c())

(3)继承:

Python 有两个用于继承的函数:
a、函数 isinstance() 用于检查实例类型: isinstance(obj, int) 只有在 obj.__class__ 是 int 或其它从 int 继承的类型
b、函数 issubclass() 用于检查类继承: issubclass(bool, int) 为 True ,因为 bool 是 int 的子类。
然而, issubclass(float, int) 为 False ,因为 float 不是 int 的子类。

16、python标准库概览:(挑一些常见但没掌握的模块)

os模块提供对目录、命令行的操作

pprint 模块给老手提供了一种解释器可读的方式深入控制内置和用户自定义对象的打印。当输出超过一行的时候,“美化打印(pretty printer)”添加断行和标识符,使得数据结构显示的更清晰:

17、多线程:

 

 

今天的文章python 知识复习杂烩2020-12-12分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65319.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注