Python3备忘录,简而言之就是写一些容易被忘掉的东东
基本语法
因为过于简单而先咕了
太基础的就不写这儿了,闲着没事就随便写一点。
如果你还没安装python3,点我!
标识符和保留字
python和大部分编程语言一样,标识符遵循下列3条原则:
- 第一个字符必须是字母或下划线
_
- 除第一个字符外,剩余部分由字母、数字和下划线组成。
- 标识符区分大小写
python3还有一点比较牛,那就是可以用中文作为变量名(事实上,非ASCII标识符也是允许的)
——菜鸟教程 python3基础语法
保留字即关键字,我们不能把它们用作任何标识符名称。我们可以用keyword模块查看所有关键字:
1 | import keyword |
关于if __name__=="__main__"
首先想说的是,python作为一个解释型语言,是没有类似C++或Java那样的入口函数(main函数)的。程序执行时会从第一行开始,逐行向下执行。但通常而言,我们出于程序规范性和可读性,还是会定义一个main函数,并通过以下方法让程序从main函数开始执行:
1 | def main(): |
需要注意的是,这里定义的main
函数只是一个普通的成员函数,只是被程序员取名为main,并不像其他语言里的main
函数那样天然就是入口函数。我们是通过执行一个if
语句,使得当脚本文件被直接执行时,运行main函数中的内容(我们知道,仅仅定义一个函数而不调用它,这个函数是不会执行的)。这里的if __name__ == "__main__"
的作用在于,判断当前脚本是被直接执行还是被其他脚本import导入了,当文件直接运行时,系统变量__name__
的值就等于"__main__"
,而被其他文件导入时,这个值等于这个文件名的名字。一般在一个py文件中,能直接运行的只有这个if
语句,这是为了程序的规范和合理可读,我们应当养成良好的编程习惯。
关于多行语句
python一行就是一个语句,可以用分号";"
隔开来在一行内写多条语句,当一个语句过长时,也可以分为几行写,此时需要利用反斜杠\,例:
1 | b=1;c=2;d=3 |
注意,在{}、[]、或()中的多行语句不需要反斜杠(常见于函数传参时):
1 | print( |
关于字符串
多行字符串用三引号包起来,这种写法也有人用来写注释。
反斜杠
\
用来转义,在字符串前加前缀r可以关闭转义,如r"test\n"
这里的\n不换行,直接作为字符串一部分存在。u前缀表示unicode,以Unicode字符来存储字符串。在python3中,字符串的存储方式中,不管前缀带不带u,默认方式都是unicode编码的字符串。
b前缀表示bytearray,生成字节序列对象。比如在网络通信中,需要按字节序列发送数据时有用。
f前缀表示format,用来格式化字符串。比format具有更好的可读性。
1
2
3
4'test' s =
print(f'This is a {s}')
This is a test
print('This is a {}'.format(s)) # 和前种写法等效,但更少可读性python也支持用占位符%来格式化字符串,用法参考C语言中
printf()
里的%格式化。这种方式在python2中较为常见,现在广泛使用的都是format方式1
2
3
4
5
6
7
8
9'Mike' name =
18 age =
180.59 height =
print('%s %d %f' % (name, age, height))
Mike 18 180.59
print('%s %d %.1f' % (name, age, height))
Mike 18 180.6
print('%s %d %12.4f' % (name, age, height))
Mike 18 180.590按字面意义级联字符串,如:
1
2'aa''bb'"cc"
'aabbcc'字符串用加号
+
连接,乘号*
重复:1
2
3
4'a'+'b'+'c'
'abc'
'a'*3+'b'*2
'aaabb'把列表(或其他可迭代对象)中的元素合并成一个字符串的方法
string.join(seq)
,这里的的string为分隔符,seq中的元素也需要是字符串:1
2
3
4
5
6
7
8'a', 'b', 'c'] lst = [
''.join(lst)
'abc'
','.join(lst)
'a,b,c'
'name':'bob', 'age':18, 'school':'NCU'} d = {
'-'.join(d) # 参数为字典时拼接的内容为字典的键
'name-age-school'咕了
常用的库
写爬虫会用到的库
Python写爬虫能用的库有很多,用于请求数据的库大致如下:
- urllib 很原始的库,Python自带,不需要pip下载就能用。
- requests 只做同步请求,适合初学者,网上很多教程都是用这个库演示的。
- httpx 既能同步请求也能异步请求,在进行同步操作时用法基本和requests相同(很多时候直接把requests替换成httpx就能跑)
- aiohttp 只做异步请求,据说很好用,但因为没怎么用过所以就跳过免得误人子弟。
异步已经有httpx了就懒得去学它了 - scrapy 尝试了解过,看得出来很强大,看起来适合做大项目。
是的,这我也不怎么了解 - selenium 这个库可以模拟浏览器进行一些类似滑动、点击等操作,面对一些被js加密过的ajax接口时,会有亮眼的表现;可以执行js;说是模拟浏览器,其实是控制浏览器,在运行的时候真的会有浏览器窗口弹出来!也正因如此,它很慢很慢。
- maybe more, but I dont know.
利用上述库把网页端数据请求下来后,下一步就是对数据进行处理分析,常用的方法有xpath和css筛选。
- BeautifulSoup 将html文本内容转化成BeautifulSoup对象,封装了一些方便查找数据的方法。
- re 正则表达式。不会真的有人用正则找数据吧,不会吧不会吧?那得是被不规范的前端逼得多惨啊?
- json 有些网站返回json数据,写上凑个数吧。
GUI库
不会有人用Python写GUI的,因为太丑了。
easygui 平时写点自用的小程序就用它,省事儿。上文档!
之前在B站有小甲鱼的教程和翻译的中文文档,现在好像删了,找不到了,可能是太老了。
tkinter Python的IDLE就是用这玩意儿写的,如果直接用IDLE运行tkinter写的GUI脚本,会因为事件循环冲突而报错。
建议不用wxPython 这啥?微信python?微笑python?武侠python?
PyQt5 Qt库的Python版本,大二期末大作业用它写了个记事本,
这辈子不想碰这个了。后来又回去看了看,还是很好用的。Qt,用过的都说好(๑•̀ㅂ•́)و✧