http状态码获取
客户端请求,服务端响应
响应状态码:标识接收或拒绝请求
python解决问题
1 | import requests |
http请求
get传递参数
1 | import requests |
安装pytoch
1 | python --version |
1 | pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu |
验证是否安装成功
1 | python -c "import torch; print(torch.__version__)" |
安装在了web工具
1 | import torch |
11点从床上爬起来打算系统学习一下,妈妈我再也不想麻烦ai了
完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。
''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。
如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如:
1 | 'I\'m \"OK\"!' |
就是前面都加个斜杠‘
转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\,可以在Python的交互式命令行用print()打印字符串看看:
1 | >>> print('I\'m ok.') |
r''表示''内部的字符串默认不转义
1 | >>> print('\\\t\\') |
Python允许用'''...'''的格式表示多行内容
1 | >>> print('''line1 |
None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
字符串和编码
字符编码
Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节
字母A用ASCII编码是十进制的65,二进制的01000001;
字符0用ASCII编码是十进制的48,二进制的00110000,注意字符'0'和整数0是不同的;
汉字中已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。
UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:
| 字符 | ASCII | Unicode | UTF-8 |
|---|---|---|---|
| A | 01000001 | 00000000 01000001 | 01000001 |
| 中 | 01001110 00101101 | 11100100 10111000 10101101 |
从上面的表格还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,UTF-8字符被转换为Unicode字符到内存里,编辑完成后,再把Unicode转换为UTF-8保存到文件
浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器
Python的字符串
ord()函数获取字符的整数表示
chr()函数把编码转换为对应的字符:
1 | >>> ord('A') |
如果知道字符的整数编码,还可以用十六进制这么写str:
1 | >>> '\u4e2d\u6587' |
\u 是固定的转义标识,后面必须跟4 位十六进制数
本质上 '\u4e2d' 和 chr(20013) 是等价的,只是写法不同:
chr()接收十进制码点;\u转义序列用4 位十六进制码点(如果是超出 4 位的码点,用\U加 8 位十六进制)。
由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
对bytes类型的数据用带b前缀的单引号或双引号表示:
1 | x = b'ABC' |
纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes
在bytes中,无法显示为ASCII字符的字节,用\x##显示。
反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:
1 | >>> b'ABC'.decode('ascii') |
如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节:
1 | >>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') |
计算str包含多少个字符,可以用len()函数:
1 | >>> len('ABC') |
格式化
1 | >>> 'Hello, %s' % 'world' |
常见的占位符有:
| 占位符 | 替换内容 |
|---|---|
| %d | 整数 |
| %f | 浮点数 |
| %s | 字符串 |
| %x | 十六进制整数 |
format()
它会用传入的参数依次替换字符串内的占位符{0}、{1}……
1 | >>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)#{编号:保留1位小数的浮点数} |
f-string
以f开头的字符串,称之为f-string,它和普通字符串不同之处在于,字符串如果包含{xxx},就会以对应的变量替换:
1 | >>> r = 2.5 |
使用list和tuple
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
比如,列出班里所有同学的名字,就可以用一个list表示:
1 | >>> classmates = ['Michael', 'Bob', 'Tracy'] |
变量classmates就是一个list。用len()函数可以获得list元素的个数:
1 | >>> len(classmates) |
用索引来访问list中每一个位置的元素
1 | >>> classmates[0] |
当索引超出了范围时,Python会报一个IndexError错误
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素
list是一个可变的有序表,所以,可以往list中追加元素到末尾:
1 | >>> classmates.append('Adam') |
也可以把元素插入到指定的位置,比如索引号为1的位置:
1 | >>> classmates.insert(1, 'Jack') |
要删除list末尾的元素,用pop()方法:
1 | >>> classmates.pop() |
要删除指定位置的元素,用pop(i)方法,其中i是索引位置:
1 | >>> classmates.pop(1) |
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
1 | >>> classmates[1] = 'Sarah' |
tuple
tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:
1 | >>> classmates = ('Michael', 'Bob', 'Tracy') |
因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
但是,要定义一个只有1个元素的tuple,如果你这么定义:
1 | >>> t = (1) |
定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:
1 | >>> t = (1,) |
最后来看一个“可变的”tuple:
1 | >>> t = ('a', 'b', ['A', 'B']) |
input
input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数。Python提供了int()函数来完成这件事情:
1 | s = input('birth: ') |
模式匹配
当我们用if ... elif ... elif ... else ...判断时,会写很长一串代码,可读性较差。
如果要针对某个变量匹配若干种情况,可以使用match语句。
例如,某个学生的成绩只能是A、B、C,用if语句编写如下:
1 | score = 'B' |
如果用match语句改写,则改写如下:
1 | score = 'B' |
js逆向
可以直接用在线网址生成爬虫代码https://curlconverter.com/,在开发者工具网络里面右键copy,然后copy curl bash,自动生成后在最后response后面加.json()(浏览器里面看见返回数据是{}包裹就加),然后print(response)
如有错误,多多指教