再梳理一遍 Python 系列知识点,夯实基础,无他,唯手熟尔

Python 系列总结都是我自己平时的学习笔记,如果有不正确的地方,希望各位佬儿哥指正纠偏🤗

变量名命名规则 - 遵循 PEP8 原则

变量注解

在 Python3.5 之后,可以使用类型注解功能来注明变量类型,在变量后添加类型,并用冒号隔开;

def repeat_message(message: str, count: int) -> str:
    return message * count

算术运算符

不同类型变量之间的计算

获取输入的信息-input

input 输入的数据类型都是字符串类型

格式化输出

vb1 = 'Tom'
print("hello %s" % vb1)

vb2 = 5
print('有符号十进制整数:%d' % vb2)
print('输出显示位数的整数:%06d' % vb2)

vb3 = 3.1415926
print('保留两位小数:%.2f' % vb3)
print('保留三位小数:%.3f' % vb3)

vb4 = 80
print('正确率为:%d%%' % vb4)

--------------------------------------------------------------------
hello Tom
有符号十进制整数5
输出显示位数的整数000005
保留两位小数3.14
保留三位小数3.142
正确率为80%

逻辑运算

循环-while

初始条件设置 -- 通常是重复执行的 计数器
while 条件 1:
条件满足时,做的事情 1
条件满足时,做的事情 2
条件满足时,做的事情 3
……
while 条件 2:
条件满足时,做的事情 1
条件满足时,做的事情 2
条件满足时,做的事情 3
……
处理条件 2
处理条件 1

print 函数增强

在默认情况下,print 函数输出内容之后,会自动在内容末尾增加换行;
如果不希望末尾增加换行,可以在 peint 函数输出内容的后面增加,end=""
其中""中间可以指定 print 函数输出内容之后,继续希望现实的内容;
语法格式如下:
print("*",end="")

转义字符

列表

元祖

元组和列表之间的转换

字典

Python3.6 之后的字典是有序的,如果解释器版本没有那么新,也可以使用 collections 模块里的 OrderedDict 方法保证字典的有序性。
OrderedDict 与新版字典在比较上面的区别:在对比两个内容相同但顺序不同的字典时,新版字典会返回 True,OrderedDict 则会返回 False。

    from collections import OrderedDict
    d = OrderedDict()
    d['one'] = 1
    d['two'] = 2
    print(d)
————————————————————
    OrderedDict([('one', 1), ('two', 2)])

字符串

字符串 - 切片

指定的区间属于 左闭右开 型 [开始索引, 结束索引) => 开始索引 >= 范围 < 结束索引
从 起始 位开始,到 结束位的前一位 结束(不包含结束位本身)
从头开始,开始索引 数字可以省略,冒号不能省略
到末尾结束,结束索引 数字可以省略,冒号不能省略
步长默认为 1,如果连续切片,数字和冒号都可以省略
索引的顺序和倒序:
在 Python 中不仅支持 顺序索引,同时还支持 倒序索引
所谓倒序索引就是 从右向左 计算索引
最右边的索引值是 -1,依次递减

字符串格式化

# 将username靠右对其,左侧补空格一共到20位
username = 'Lili'
print(f'{username:>20}')
-------------------------------------
                Lili
username = 'Lily'
sore = 10
print('{0}:{0}的成绩是{1}'.format(username, sore))

集合

s1 = set([1,2,3])
s2 = set([2,3,4])
s1.update(s2)
s1.update('hello')
print(s1)
------------------------
{1, 2, 3, 4, 'o', 'h', 'e', 'l'}
s1 = set([1,2,3])
s1.add([1])
-----------------------
TypeError: unhashable type: 'list'

集合的运算

集合支持集合运算,比如交集、并集、差集。所有的操作都可以用两种方式:方法和运算符;

fruits_1 = {'apple','orange','pineapple'}
fruits_2 = {'tomato','orange','grapes','mango'}
print(fruits_1 & fruits_2)
-----------------------------
{'orange'}
fruits_1 = {'apple','orange','pineapple'}
fruits_2 = {'tomato','orange','grapes','mango'}
print(fruits_1 | fruits_2)
----------------------------------------------------------
{'tomato', 'pineapple', 'orange', 'apple', 'grapes', 'mango'}
fruits_1 = {'apple','orange','pineapple'}
fruits_2 = {'tomato','orange','grapes','mango'}
print(fruits_1 - fruits_2)
------------------------------------
{'apple', 'pineapple'}
fruits_1 = {'apple','orange','pineapple'}
fruits_2 = {'tomato','orange','grapes','mango'}
print(fruits_1.symmetric_difference(fruits_2))
{'apple', 'mango', 'tomato', 'pineapple', 'grapes'}
fruits_1 = {'apple','orange','pineapple'}
fruits_2 = {'apple','orange','pineapple','water'}
print(fruits_1.issubset(fruits_2))
print(fruits_2.issubset(fruits_1))
--------------------------------------------------
True
False

Python 循环结构

匿名函数-lambda

类定义

类方法

类的三大特征

类的反射

异常处理

Python 异常处理依赖的关键字:
try
except
else
finally

IO 读写 - 文本文件

    myFiles = ['accounts.txt','details.csv','invite.docx']
    for filename in myFiles:
        print(os.path.join('c:\\User\\asweigart',filename))
-----------------------------------------------------------------------------------------
c:\User\asweigart\accounts.txt
c:\User\asweigart\details.csv
c:\User\asweigart\invite.docx

其余相关知识点附张图吧:

多线程和多进程编程

GIL 全局解释器锁

什么是 GIL 全局解释器锁:
GIL(Global Interpreter Lock)是 Python 的一个重要特性,它是一种机制,用于保护多线程环境下共享内存数据的完整性。它锁定了整个解释器,只允许一个线程同时执行 Python 字节码,从而避免多线程下出现数据竞争问题。这意味着即使使用多核 CPU,Python 程序也不能充分利用多核优势。GIL 在性能上可能带来一定的影响,因此不适合处理需要大量的 CPU 运算的任务。

什么条件下会释放 GIL:
当前活跃线程遇到 IO 等待,比如要访问网络或建立数据库链接等情况;
活跃线程执行了 100 个字节码的程序后,GIL 也会释放该线程的锁,然后与其他线程参与竞争;

python 的多线程适合场景:
python 的多线程只适合于 IO 密集型应用,对于计算密集型的应用最好使用多进程或协程的方式解决;

可迭代对象

迭代器

迭代器和可迭代对象的区别

生成器

装饰器

正则表达式

正则表达式匹配步骤:
1.import re
2.用 re.compile() 函数创建一个 Regex 对象(记得使用原始字符串)
3.向 Regex 对象的 search() 方法传入想查找的字符串。它返回一个 Match 对象(一般用 mo 接收)
4.调用 Match 对象的 group() 方法,返回实际匹配的字符串
demo:

import re
>>> phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
>>> mo = phoneNumRegex.search('my number is 415-555-4242.')
>>> mo.group(1)
'415'
>>> mo.group(2)
'555-4242'
>>> mo.group()
'415-555-4242'
>>> mo.group(0)
'415-555-4242'

额外:
我在学习中,发现正则表达式在任何语言中都占有很大部分的占比,但正则表达式相关的知识点又过于零碎,对于榆木脑袋的我真是学一遍忘一遍。在实际工作中,我自己真正用到正则的地方并不多,再看同事,目前就发现前端同学有可能会用到正则去做一些事情,并且用到的时候都是度娘,一是自己真记不住,二是度娘 copy 过来的多数情况是比自己写要严谨的多的。基于此,我把正则视为投入产出比太低的事情,仅需要记住个大概印象,真到用时能分清度娘上哪个轮子能用哪个轮子用不了就可以了。

测试基础-Python 篇 基础②


↙↙↙阅读原文可查看相关链接,并与作者交流