基本语法
基础知识
1.标识符:
第一个字符必须是字母或下划线。
标识符的其他部分由字母,下划线,数字构成。
标识符对大小写敏感。
2.保留字:可通过keyword输出当前所有保留字
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>>
3.#用作注释,多行注释可用‘’‘或“”“将注释内容框起。
4.行与缩进:同一个代码块的语句必须包含相同的缩进空格数。
5.多行语句:语句很长可用/来实现多行语句。
6.数字类型:
int(整数):只有一种,表示为长整形。
bool(布尔):如Ture。
float(浮点数):1.23,3E-2.
complex(复数):如1+2j,1.1+2.2j。
7.字符串。
单双引号作用相同
三引号可以指定一个多行字符串
\为转义符
r可以让转义符失效例如\n可以输出回车,但加上r可以输出\n。
多个“”括起来的字符串相连接
+可以连接字符串,*可以重复
索引:从右往左以0开始,丛左往右以-1开始
字符串不能改变。
一个字符就是长度为一的字符串。
截取语法:变量名[头下标:尾下表:步长](步长就是每几个输出一个)
空行:代表一段新的代码开始,也是程序的一部分。
等待用户输入:input。
同一行使用多条语句可以用;来分割
print输出默认是换行的,如果想要不换行可
print(x,end=' ')
基本数据类型
1.变量没有类型不需要声明(存储的数据有类型),但必须赋值,变量赋值以后才会被创建。(可以同时为多个变量赋值,例如:a=b=c=1。也可以为多个对象指定多个变量,例如:a,b,c=1,2,"runoob")
2.常见数据类型,number(数字),string(字符串),tuple(元组)。这些为不可变数据。
list(列表),dictionary(字典),set(集合),这些为可变数据。
3.type(),isinstance()。可以判断变量所指的对象类型,但前者不会人为子类是一种父类类型,后者则会认为。
4.加减乘除与c语言相同,乘方可用**表示
除法/返回一个浮点数,//返回一个整数,混合计算时python会把整型转变成浮点数
5.复数的实部和虚部都是浮点型
6.布尔类型,只有两个值:ture和false,布尔类型也可以准换成其他数据类型
类型转换方法,print(int()),print(str()),print(float())
7.列表(python中使用最频繁的数据类型,)与字符串不同,列表中的元素是可以改变的。
可以直接改 例如:a[2:5]=[ , , ]
8.元组,与字符串类似用()括起,与列表不同的地方在于,元组中的元素不能改变。
特殊,空元组tup1 = (),只含一个元素的元组 tup2=(20,)
string,list tuple都属于sequence(序列)
9.集合,是一种无序可变的数据类型,用于存储唯一的元素,集合中的元素不会重复,并且可以进行交集,并集,差集等常见的集合操作
特殊,创建一个空集合要用set()
集合运算 a-b(a和b的差集)a|b(a和b的并集)a&b(a和b的交集)a^b(a和b中同时不存在的元素)
10.字典
另一种非常有用的内置数据类型
列表时有序对象的集合,字典时无序对象的集合,字典中的元素通过键来存取,而不是通过偏移来存取
在同一个字典中键是唯一的
字典是一种映射类型,它的元素是值键对
字典的关键字必须为不可变类型且不能重复。
11.bytes类型
bytes类型中的元素是整数值,而不是Unicode字符
与字符串类型相似bytes类型也支持操作和方法,如拼接查找替换等
可以通过加b来定义bytes类型变量
bytes的类型是不可变的,因此在进行修改操作前要创建一个新的对象。
数据类型转换
隐式类型转换:不需要去干预自动转换为另一种数据类型,(两种不同类型的数据进行运算,较低数据类型就会转换为较高数据类型)
显式类型转换
int()强制转换为整型
float()强制转换为浮点型
str()强制转换为字符串类型
输入输出
1.输入,变量=input(),此时变量默认为字符串类型
可用显式类型转换进行转换
用空格分隔输出方法:a,b=map(int,input().split())
2.输出
print("",)
条件控制
关键字为:if elif else(与c语言不同的是else if 变成了elif)
注意:1.每个条件后面要使用冒号
2.使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块
3.python中match....case与c语言中switch....case功能类似
4.操作运算符与c语言相同
5.match...case中case_表示c语言中的default(一个case中也可以设置多个匹配条件,条件之间用|分隔开)
循环语句
1.while循环
while 条件:
代码块
(python中没有do...while循环)
特殊用法
while:
else:
(如果while后面的条件语句为false时则执行else的语句块)
2.for语句
可以遍历任何可迭代对象,如一个列表或者一个字符串。
for <variable> in <sequence>
for..else
当循环执行完毕会执行else子句中的代码,如在循环过程中遇到了break语句则会中断循环,此时则不会执行else语句
range函数,用来遍历数字序列
结合len函数遍历一个序列的索引range(len(a))
3.pass语句
是为了保证程序结构的完整性,不做任何事情,一般用做占位语句。
面向对象
相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法
1在完成某一个需求前,首先确定职责即要做的事情。
2.根据职责确定不同的对象,在对象内部封装不同的方法
3.最后完成的代码就是顺序的让不同的对象调用不同的方法
特点
1.注重对象和职责,不同的对象承担不同的职责。
2.更加适合应对复杂需求变化和,是专门应对复杂项目的开发,提供的固定套路
3.需要在面向过程的基础上,再学习一些面向对象的语法
一.类:对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用,
其中特征被称为属性,行为被称为方法
二.对象:对象是由类创造出来的一个具体存在,可以直接使用,其拥有将其创造出来的类的属性与方法。
(可将类比喻成图纸,而对象便是由图纸创造出的实际物品)
- 方法:类中定义的函数。
- 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
- 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据.
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- 局部变量:定义在方法中的变量,只作用于当前实例的类。
- 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系
- 实例化:创建一个类的实例,类的具体对象。
- Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。
对象可以包含任意数量和类型的数据。 - 类有一个名为_init_()的特殊方法(构造方法),该方法再类实例化时会自动调用
- 类的方法于普通的函数只有一个特别的区别-它们必须有一个额外的第一个参数名称,一般为self
- 继承(子类继承父类的属性和方法)
- 单继承可调用父类的构造函数,覆写父类的方法
- 多继承(两个以上的父类衍生出的子类)
- super函数是一种调用父类的一个方法
- 类的私有属性,(两个下划线开头声名该属性为私有即不能再类的外部被使用或直接访问在类的内部使用时加self.)
- 类的方法用def关键字来定义一个方法,与一般函数不同类方法必须包含参数self,self代表的是类的实例
- 类的私有方法 两个下划线开头声明其为私有方法,只能在类的内部被调用
- __init__ : 构造函数,在生成对象时调用
- __del__ : 析构函数,释放对象时使用
- __repr__ : 打印,转换
- __setitem__ : 按照索引赋值
- __getitem__: 按照索引获取值
- __len__: 获得长度
- __cmp__: 比较运算
- __call__: 函数调用
- __add__: 加运算
- __sub__: 减运算
- __mul__: 乘运算
- __truediv__: 除运算
- __mod__: 求余运算
- __pow__: 乘方
基础的库
与c语言不同,python用import引用库,使用函数时要加import 模块的前缀,若想直接使用可以加上from 模块 import *
1.os 模块:os 模块提供了许多与操作系统交互的函数,例如创建、移动和删除文件和目录,以及访问环境变量等。
例如:os.getcwd()返回当前的工作目录。os.chdir()修改当前的工作目录。os.system()执行系统命令
2.sys 模块:sys 模块提供了与 Python 解释器和系统相关的功能,例如解释器的版本和路径,以及与 stdin、stdout 和 stderr 相关的信息。
(通用工具脚本经常调用命令行参数。这些命令参数以链表形式存储于sys模块的argv变量)
其还有stdin,stdout,stderr属性,即使在stdout被重新定向时后者也可用于显示警告和错误信息
大多脚本的定向终止都用sys.exit()
3.time 模块:time 模块提供了处理时间的函数,例如获取当前时间、格式化日期和时间、计时等。
4.datetime 模块:datetime 模块提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等。
在支持日期和时间算法的同时,实现的重点放在更有效处理和格式化输出
5.random 模块:random 模块提供了生成随机数的函数,例如生成随机整数、浮点数、序列等。
是生成随机数的工具
6.math 模块:math 模块提供了数学函数,例如三角函数、对数函数、指数函数、常数等。
为浮点运算提供了对底层c函数库的访问
7.re 模块:re 模块提供了正则表达式处理函数,可以用于文本搜索、替换、分割等。
为高级字符串处理提供了正则表达式工具,对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案。
(如果只需要简单的功能,应该首先考虑字符串方法,因为他们非常简单,已于阅读和调试)
8.json 模块:json 模块提供了 JSON 编码和解码函数,可以将 Python 对象转换为 JSON 格式,并从 JSON 格式中解析出 Python 对象。
9.urllib 模块:urllib 模块提供了访问网页和处理 URL 的功能,包括下载文件、发送 POST 请求、处理 cookies 等。
urlib.request:用于处理从urls接受的数据
10.shutil模块:针对日常文件和目录管理任务,该模块提供了一个易于使用的高级接口。
11.glob模块:提供了一个函数用于从目录通配符搜索中生成文件列表
12.smtplib模块:用于发送电子邮件
13.zip模块直接支持通用的数据打包和压缩格式
正则表达式
用网站 regex101.com可以尝试
限定符
?可以存在零次或一次
*可以存在零至无数次
+可以存在一次至无数次
{m,n} 可以存在m次到n次
或运算
a (cat|dog)
字符类
在[ ]括号内 - 可表示在一定范围
[ ^ ]则表示在括号范围外
元字符
\d:代表数字字符。相当于[0-9]+
\w:代表单词字符(英文、数字及下划线)
\s:代表空白符(包括tab和换行符)
\D:代表非数字字符
\W:代表非单词字符
\S:代表非空白字符
.:任意字符但不包含换行符
^a,只会匹配行首的a,a$只会匹配行尾的a
高级概念
贪婪与懒惰匹配
<.+>默认贪婪匹配“任意字符”(匹配尽可能多的)
<.+?>懒惰匹配“任意字符”(匹配尽可能少的)
实例1:RGB颜色匹配#[a-fA-F0-9]{6}\b
实例2:地址匹配
\d+\.\d+\.\d+\.\d+
25[0-5]|2[0-4]\d|[01]?\d\d?
网络基础
IP地址分类:
A:0-127------/8(默认掩码)
B:128-191-------/16
C. 192-223-------/24
网络是由很多层构成的:
物理层
链路层
网络层:ARP协议,IP协议
传输层:TCP/UDP
应用层:HTTP/FTP
非常大量的协议共同构成了我们目前使用的网络
域名和DNS
要访问一个公网服务器或者应用,当然要知道他的地址
IP地址即在公网上标识地址的东西
域名:用于ip地址的替代,方便用户记忆和宣传。
DNS解析:一种解析域名为IP地址的方式(本质就是向公网上的一个域名解析服务器发送解析请求,这个服务器收到请求之后就会把这个域名转换为域名绑定的IP地址)
端口:是通过程序实现的一种网络分流方式(流量分流到适应它的程序中)
端口范围:0-65535
常见端口:80(http),443(https),20(ftp),21(ftp控制),22(ssh),3306(数据库),8080
GET和POST的区别
GET请求参数是通过URL进行传递的,POST请求的参数包含在请求体当中
GET请求进行url编码(百分号编码),POST请求支持多种编码方式
GET请求在浏览器回退的时候是无害的,POST请求会再次提交数据
(GET传递参数是由长度限制的)(GET只能传递大约1024字节,POST传递的数据量大,可以达到2M)
对于GET请求,浏览器会把http,header和data一起发送出去,服务器响应200,请求成功
对于POST请求,浏览器先发送header,服务器会响应100,浏览器再次发送data,服务器返回200,请求成功
证书:一种点对点的认证机制
常见的:公钥加密,私钥解密
客户通过证书提供的公钥加密一串随机串,这个加密方式只有拥有私钥的人才能够解密加密后的内容,服务器收到这个加密后的随机串用私钥解密。然后双方开始用这个随机串加密通信
这种公钥私钥的加密方式通常利用一些数学上的难题作为防止被破解的机制:
大素数的难解性(RSA),椭圆曲线的难解性(ECC)等
http
1.http相关概念:
http协议是用于从万维网服务器传输超文本到本地浏览器的传送协议
http基于TCP/IP通信协议来传递数据
http是一种通过计算机网络进行安全通信的传输协议
https经由http进行通信,但利用SSL/TLS来加密数据包,HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。
2.http工作原理
HTTP 协议工作于客户端-服务端架构上。
浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。
Web 服务器有:Apache 服务器,IIS 服务器(Internet Information Services)等。
Web 服务器根据接收到的请求后,向客户端发送响应信息。
HTTP 默认端口号为 80,但是你也可以改为 8080 或者其他端口。
3.注意事项
HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。
HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的 MIME-type 内容类型。
HTTP 是无状态:HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。
4.https的作用
在不安全的网络上创建一个安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的防护。
5.http消息结构
HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。
过程:1.客户端请求消息(包括以下格式:请求行,请求头部,空行,和请求数据四个部分)
2.服务器响应消息(包括四个部分:状态行 消息报头 空行 响应正文)
常见的http状态码:200-请求成功
301-资源被永久转移到其他URL
404-请求的资源不存在
500-内部服务器错误
响应分为五类;
1.信息响应(100-199):信息,服务器收到请求,需要请求者继续执行操作
2.成功响应(200–299):成功,操作被成功接收并处理
3.重定向(300–399):重定向,需要进一步的操作以完成请求
4.客户端错误(400–499):客户端错误,请求包含语法错误或无法完成请求
5.服务器错误 (500–599):服务器错误,服务器在处理请求的过程中发生了错误
http的content-type指用于定义网络文件的类型的网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。
它的标头会告诉客户端实际返回的内容的内容类型
常见的媒体格式类型:
- text/html : HTML格式
- text/plain :纯文本格式
- text/xml : XML格式
- image/gif :gif图片格式
- image/jpeg :jpg图片格式
- image/png:png图片格式