↑ 点击上方蓝字 关注「NLP有品」
“经济基础决定上层建筑”,编程也是一样,基础牢固了,技术层次就更高。本文总结了此前工作学习中记录的一些python基础要点知识分享给大家,本篇是“python编程基础要点”系列文章之二,之一请阅读【python编程基础要点(一)】。疏漏之处,请大家指出,后期我会不定期更新该系列文章,敬请期待。
1. 字符串前缀 u
一般用在中文字符串前面,后面字符串以 Unicode 格式进行编码,防止因为源码储存格式问题,导致再次使用时出现乱码。
s = u"我是中文字符串。"
2. 字符串前缀 r
作用是去除反斜杠的转义机制,将含有转义字符的字符串转为普通生字符串。
# 例如:s中的\n是普通字符不再代表换行符s = r"我不是换行符:\n\n\n\n"
3. 字符串前缀 f
f开头表示在字符串内支持大括号内的 python 表达式。
s = 'AbCdEfG'print(f"{s.lower()}")out: 'abcdefg'
4. 字符串前缀 b
b 前缀表示后面字符串是 bytes 类型。作用是,如在网络编程中,服务器和浏览器只认 bytes 类型数据。Python3 中,bytes 和 str 的互相转换方式是:
str.encode('utf-8') # str转bytesbytes.decode('utf-8') # bytes转str
6. 字符串反转
通过始末索引和步长进行切片实现,可以推广到所有可以切片的对象。
s = 'abcdefg'print(s[::-1])out: 'gfedcba'
7. 字符串转标题
s = 'abcDefG'print(s.title())out: Abcdefg
8. 列表推导式
列表生成式的结构是在一个中括号里包含一个表达式,然后是一个 for 语句,然后是 0 个或多个 for 或者 if 语句。
lst = [i*i for i in range(10)]print(lst)out: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
9. 列表推导式+if
lst = [i*i for i in range(10) if i%2==0]print(lst)out: [0, 4, 16, 36, 64]
10. 列表推导式+if else
lst = [i*i if i%2==0 else i for i in range(10)]print(lst)out: [0, 1, 4, 3, 16, 5, 36, 7, 64, 9]
11. 字典推导式
字典生成式的结构是在一个中括号里包含一个表达式,然后是一个 for 语句,然后是 0 个或多个for 或者 if 语句。
dct={k:v for k, v in zip(range(10), range(10,0,-1))}print(dct){0: 10, 1: 9, 2: 8, 3: 7, 4: 6, 5: 5, 6: 4, 7: 3, 8: 2, 9: 1}
12. 列表元素排列组合
from itertools import product a, b = [1,2,3], [11,22]print(list(product(*[a, b])))out: [(1, 11), (1, 22), (2, 11), (2, 22), (3, 11), (3, 22)]
13. 列表打平
from itertools import chainlst = [[1,2],[3,4],[5,6]]list(chain(*lst))out: [1, 2, 3, 4, 5, 6]
14. 删除列表重复元素
有两种方法,通过 remove 循环三处,另外一种是通过转 set 然后再转为 list,但这种会默认排序,会打乱原来的元素顺序。
from collections import Counterlst = [1,5,3,6,2,3,4,1,1,3,3]count = dict(Counter(lst))for c in count.items(): for i in range(c[1] - 1): lst.remove(c[0])print(lst)out: [5, 6, 2, 4, 1, 3]
15. 进制之间转换
十进制转其他进制
使用bin(n), oct(n), hex(n)方法:
n = 10print("10转二进制:{}\n10转八进制:{}\n10转十六进制:{}\n".format(bin(n), oct(n), hex(n)))out: 10转二进制:0b1010 10转八进制:0o12 10转十六进制:0xa
其他进制转十进制
使用 eva(n)方法:
n = 10print("二进制转十进制:{}\n八进制转十进制:{}\n十六进制转十进制:{}\n".format(eval(bin(n)), eval(oct(n)), eval(hex(n))))out: 二进制转十进制:10 八进制转十进制:10 十六进制转十进制:10
16. 动态获取当前文件绝对路径
当程序运行过程中获取某个文件的绝对路径:
file_path = '/'.join(__file__.split('/'))print(file_path)out: /xxx/xxx/test/dir1/file1.py
17 魔法参数之可变参数*args
当传入参数个数不确定的时候使用, 可不必写成*args。在变量前面加上*(星号)才是必须的。
def fn1(des, *args): print(des+': ', end=' ') for arg in args: print(arg, end=' ')des = '新生代知名女星'lst = ['蔡徐坤', '鹿晗', '肖战']fn1(des, *lst)out: 新生代知名女星: 蔡徐坤 鹿晗 肖战
18 魔法参数之关键字参数**kwargs
当传入关键字参数个数不确定的时候使用,可不必写成 **kwargs。在变量前面加上**(星号)才是必须的。
def fn2(des, **kwargs): print(des + ': ') for kw in kwargs.items(): print(kw[0]+': '+kw[1])des = '新生代知名女星'dct = {'蔡徐坤': '男', '鹿晗': '男', '肖战': '男'}fn2(des, **dct)out: 新生代知名女星: 蔡徐坤: 男 鹿晗: 男 肖战: 男
19. 各类参数使用顺序
标准参数,默认参数与*args、**kwargs在定义函数时使用的顺序:
fn(arg, *args, **kwargs, default=None)
20. 快速生成项目requirements.txt文件
使用 pipreqs工具包,pip 安装:
pip install pipreqs
然后项目根目录运行:
pipreqs ./
完成后就会在根目录生成 requirements.txt 文件,注意:生成之后最好检查一遍是否与 pip list 结果中一致,若不一致就修改一下。然后通过 requirements.txt 自动安装所有依赖包:
pip install -r requirements.txt
21. 将python文件打包成.exe可执行文件
(1) 安装Pyinstaller
pip install Pyinstaller
(2) 命令行进入到该.py文件目录,执行如下命令:
pyinstaller -F test.py
执行上面命令,将看到详细的生成过程。当生成完成后,将会在此 test 目录下看到多了一个 dist 目录,并在该目录下看到有一个 test.exe 文件,这就是使用 PyInstaller 工具生成的 exe 程序。
22. Pcharm文件误删恢复
下次更新内容可能包括:中文 NLP 各类任务简介 • 下、基于序列标注的关系抽取实战、十大排序算法(中)其中之一,敬请期待♥♥♥。
推荐阅读
python编程基础要点(一)
十大排序算法(上)
国内NLP竞赛平台一览
国内AI开放平台一览
语言模型及Word2vec与Bert简析
传统文本匹配算法详解(附代码)
关注「NLP有品」NLP之路,你并不孤独