工作之余会总结一些细小的知识点,但又不至于发一篇博客,以后将细小的知识点积累供自己备忘;
主要分为两个模块: python基础知识、Linux知识、python编程题
一 、Python
1.正则中group()、group(0)、group(1)、group(s)的区别?.
结论:group取索引是从1开始的,索引group()和group(0)是一样的,group(1)可以取到第一个括号的元素,groups()返回的是所有匹配对象的元组
2.你真的懂GIL吗?
概念:Cpython解释器在同一时刻只允许一个线程执行
问题:本地有两个python文件:a.py中开启5个线程,b.py中开启3个线程,问:同一时刻有几个进程,几个线程??
首先明确下进程是系统进行资源分配和调度的一个独立单位;线程是进程的一个实体,是CPU调度和分派的基本单位
两个python文件相互独立,肯定同一时刻肯定有两个进程,两个进程共开启8个线程,但是每个进程中同一时刻只允许一个线程执行,
所有a.py中开启了5个线程,但只用一个在执行,,所以两个文件同一时刻有两个进程,两个线程,其余的线程处于挂起状态并不会打断,
那么python中的多线程真的一点用没有吗,分情况看了,,如果多个线程全都是计算密集型的话python确实有点鸡肋,但如果多个线程有IO操作的话,其中一个 线程处于IO操作时另一个线程就可以运行,所以在IO多线程操作中python线程还时有作用的
3.字典的排序(比较简单,但是容易遗忘)
4. 字典的update()没有返回值
两个字典合并时可以使用update()方法,但是注意update没有返回值,代码如下:
5. 巧用字符串split()的第二个参数
字符串的split()操作经常使用,但是它有三个参数,第二个参数step可理解为切割几个,看代码:
6. 巧用re.split()方法一个拆分多个分隔符
字符拆分时最先想到的自然是split()方法,,但是字符串的split方法每次只能按一个分隔符拆分,遇到要按多个分隔符拆分的场景可以使用re.split
re.split()一次可以指定多个分隔符,并且可以指定正则,如下案例可一次指定四种分隔符,其中s为空格
7. python重写父类的__init__方法
8. python2与python3的编码和字符
版本 编码格式 文本字符串 字节序列
python2 ascii unicode str
python3 utf-8 str bytes
9. 函数的元信息,类似函数的参数和返回值注释,是python3.6之后引入的新特性
其中函数参数冒号后面为参数的类型,指定x和y的参数类型均为int,->为函数返回值的类型,注意不是箭头,是短横线和大于号的拼接;
虽然自己平时写代码基本不用,但是看大佬的代码中基本都是这样写的;
10. python函数中单下划线和双下划线的区别
单个下划线:又称口头私有变量,一般来讲,变量名_xx被看作是“私有 的”,在模块或类外不可以使用。其实这并不能完全做到真正的私有,只是约定俗成的而已,不能用from module import * 导入,其他方面和公有一样访问;
双下划线:这是私有变量, 只有内部可以访问,外部不可以访问。但是也不是一定不可以访问,只是解释器把该变量解释成 _类名__xx 。但最好不要这样做,养成良好编程习惯
11. 使用collection模块快速实现队列和栈
python实现队列和栈可使用列表创建,其中队列的话添加使用insert(0, "")添加元素用pop删除元素实现先进先出,栈的话使用append添加使用pop删除实现先进后出,但是insert效率太低,下面介绍collection中的deque结构;
deque其实是 double-ended queue 的缩写,翻译过来就是双向队列,允许两端操作元素,主要操作如下
append: 从队列右侧添加元素
appendleft:从队列左侧添加元素
pop: 从队列右侧移除值
popleft: 从队列左侧移除值
下面代码可以实现即是队列也是栈的结构体
二、Linux操作
1. set指令最常用的两个参数意义
set -e 若指令传回值不等于0,则立即退出shell;
set -x 执行指令后,会先显示该指令及所下的参数
2. chown修改权限
chown -R user:group file
修改file目录下的所有文件为user用户和group组
3. grep遍历目录下查找某个信息
grep -r pattern path 遍历path目录下的文件,查找path下的文件是否包含pattern信息
grep -n '^$' file 查找file文件中空行的行号
4. shell中多行注释
多行注释有多种方式,其中COMMENT较为简单,使用如下:
<<"COMMENT"
需要注释的信息。。。。
COMMETN
5. vmstat 查看给定时间间隔服务器状态,主要用于性能监控分析,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数
vmstat 1 3 一秒输出一次,总共输出三次;
vmstat 1 一秒输出一次,中间不间断;
命令显示如下,主要包括cpu使用率,内存及io情况
三、python编程题
1. 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足以下要求:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
例如,"{[{()}]()}"就是一个闭合的有效字符串。
实现思路
这里我们运用 栈
里面 先进后出
的思想来处理问题。
- 遍历字符串中的每一个括号
- 定义一个空列表,如果遇到左括号,就存储到列表中
- 如果遇到右括号,判断列表是否为空,不为空就弹出列表中最后一个左括号,并判断右括号和弹出的左括号是否匹配,不匹配则返回 False
- 如果遇到右括号,且列表为空,那么也就表示列表中没有匹配的括号,则直接返回 False
- 遍历结束,最后再判断列表是否为空,不为空则表示左/右括号有多余的,返回 False ; 为空则表示是闭合的有效字符串,返回 True
代码实现如下:
2. 只包含整数的列表,只遍历一次取出第二大的数值,不能使用sort()函数
未完待续~~~~