Python3备忘录,简而言之就是写一些容易被忘掉的东东

基本语法

因为过于简单而先咕了
太基础的就不写这儿了,闲着没事就随便写一点。
gugu

如果你还没安装python3,点我!


标识符和保留字

python和大部分编程语言一样,标识符遵循下列3条原则:

  1. 第一个字符必须是字母或下划线_
  2. 除第一个字符外,剩余部分由字母、数字和下划线组成。
  3. 标识符区分大小写

python3还有一点比较牛,那就是可以用中文作为变量名(事实上,非ASCII标识符也是允许的)
——菜鸟教程 python3基础语法

保留字即关键字,我们不能把它们用作任何标识符名称。我们可以用keyword模块查看所有关键字:

1
2
import keyword
print(keyword.kwlist)

关于if __name__=="__main__"

首先想说的是,python作为一个解释型语言,是没有类似C++或Java那样的入口函数(main函数)的。程序执行时会从第一行开始,逐行向下执行。但通常而言,我们出于程序规范性和可读性,还是会定义一个main函数,并通过以下方法让程序从main函数开始执行:

1
2
3
4
5
def main():
print('Hello World!')

if __name__ == '__main__':
main()

需要注意的是,这里定义的main函数只是一个普通的成员函数,只是被程序员取名为main,并不像其他语言里的main函数那样天然就是入口函数。我们是通过执行一个if语句,使得当脚本文件被直接执行时,运行main函数中的内容(我们知道,仅仅定义一个函数而不调用它,这个函数是不会执行的)。这里的if __name__ == "__main__"的作用在于,判断当前脚本是被直接执行还是被其他脚本import导入了,当文件直接运行时,系统变量__name__的值就等于"__main__",而被其他文件导入时,这个值等于这个文件名的名字。一般在一个py文件中,能直接运行的只有这个if语句,这是为了程序的规范和合理可读,我们应当养成良好的编程习惯。


关于多行语句

python一行就是一个语句,可以用分号";"隔开来在一行内写多条语句,当一个语句过长时,也可以分为几行写,此时需要利用反斜杠\,例:

1
2
3
4
5
b=1;c=2;d=3
a = b + \
c + \
d
print(a) #输出6

注意,在{}、[]、或()中的多行语句不需要反斜杠(常见于函数传参时):

1
2
3
4
5
6
7
8
9
print(
'a', 'b',
'c',
'd',
sep = ',',
end = ''

)
# 输出a,b,c,d

关于字符串

  • 多行字符串用三引号包起来,这种写法也有人用来写注释。

  • 反斜杠\用来转义,在字符串前加前缀r可以关闭转义,如r"test\n"这里的\n不换行,直接作为字符串一部分存在。

  • u前缀表示unicode,以Unicode字符来存储字符串。在python3中,字符串的存储方式中,不管前缀带不带u,默认方式都是unicode编码的字符串。

  • b前缀表示bytearray,生成字节序列对象。比如在网络通信中,需要按字节序列发送数据时有用。

  • f前缀表示format,用来格式化字符串。比format具有更好的可读性。

    1
    2
    3
    4
    >>> s = 'test'
    >>> 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
    >>> name = 'Mike'
    >>> age = 18
    >>> height = 180.59
    >>> 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
    >>> lst = ['a', 'b', 'c']
    >>> ''.join(lst)
    'abc'
    >>> ','.join(lst)
    'a,b,c'
    >>> d = {'name':'bob', 'age':18, 'school':'NCU'}
    >>> '-'.join(d) # 参数为字典时拼接的内容为字典的键
    'name-age-school'
  • Python3 translate()方法 | 菜鸟教程 (runoob.com)

  • Python3 maketrans()方法 | 菜鸟教程 (runoob.com)

  • 咕了


常用的库

写爬虫会用到的库

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,用过的都说好(๑•̀ㅂ•́)و✧


定时器库——APScheduler

来学定时器啊


图像库——Pillow

点我跳转页面

人工智能——PyTorch和TensorFlow

容我去pip list一下看看我还有那些东西没写上来:P

to be continue