学习python
一、python的特点
1.简洁,灵活,优雅,哲学;
2.易于上手,难于精通;
3.python既有动态脚本的特性,又有面向对象的特性,非常具有自己的特性;
4.python相对C、C++、Java语言运行效率较慢,C、C++属于编译型语言,python、JavaScript属于解释型语言;其实目前硬件比较发达,开发人员更加注重开发效率,所以语言类型的区分已不再重要,选择一种适合当前应用场景的语言更加重要;
5.python不止可以用来进行web编程,还可以应用于很多场景,例如大数据与数据分析、爬虫、自动化运维与自动化测试、机器学习、混合编程等等,python几乎可以说是万能的;
6.语言有很多种,语言风格却各不相同;
二、python的正确打开方式
当你遇到一个问题,可以随手拿起python编写一个工具来解决问题;
三、python基本数据类型
number:数字
整数:int
浮点数:float
type(2/2)是float,type(2//2)是int;单斜杠是除法,双斜杠是整除;
进制:0b-二进制,0o-八进制,0x-十六进制;转换:二进制bin(),十进制用int(),八进制用oct(),十六进制用hex();
bool:布尔类型,True,False;bool(0)=False,bool(1)=True,bool(2)=True,bool(0b01)=True,bool('abc')=True,bool('')=False;非空非零为True,否则为False;
complex:复数
str:字符串
单引号,双引号,三引号都可以表示字符串
转义字符:print('c:\\north')与print(r'c:\north')等价,字符串前加r,表示原始字符串
字符串的运算:'hello'+'world' 'hello'*3 'hello'[0] 'hello'[-1] 'hello'[0:4] 'hello'[0:-1] 'hello'[2:] 'hello'[-2:]
list:列表
[1,2,'a',True,[1,2,3]]
访问列表元素,['a','b','c'][0] ['a','b','c'][0:2]
修改列表元素:['a','b','c']+['a','b','c'] ['a','b','c']*3
tuple:元组
(1,2,3)[0] (1,2,3)[0:2]
(1,2,3)+(1,2,3) (1,2,3)*3
疑问:为什么type((1))不是tuple,而是int?
在python里,小括号可以表示元组,也表示运算;如果想表示单个元素的元组,需要加逗号,(1,),空元组()
str,list,tuple在python里都叫序列,序列有序号,序列有切片操作
print(users[2:5])#取角标2到5的元素,含头不含尾
print(users[2:5:2])#取角标2到5的元素,步长为2
print(users[:5])#如果切片前面值不写,从开头取
print(users[2:])#末尾不写,一直取到结束
print(users[:])#都不写,取全部
Python提供了ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
set:集合(无序)(不重复)
len({1,2,3,4,5})=3
集合操作:求差集{1,2,3,4,5}-{3,4};求交集{1,2,3,4,5}&{3,4};合并集合且去重{1,2,3,4,5}|{3,4,5,6};定义空集合set()
dict:字典(由key和value构成)
{1:'a',2:'b',3:'c'}
访问字典:{1:'a','2':'b',3:'c'}[1] {1:'a','2':'b',3:'c'}['2'] 定义空字典{}
字典的key要求取不可变数据类型,value可以去任意一种数据类型
数据类型总结:
四、python变量
python的变量比较简单,就是起名字。
name=['marry','kitte']
变量由字母数字下划线组成,不能以数字开头
a=1
b=a
a=3
b还是等于1
a=[1,2,3,4]
b=a
a[0]='1'
b也改变了
原因:int,str,tuple类型是值类型(不可变),list,set,dict类型是引用类型(可变);
运算符:+、-、*、/、//、%、**
赋值运算符:=、+=、*=、/=、%=、**=、//=
比较运算符:==、!=、>、<、>=、<=
逻辑运算符:and,or,not
成员运算符:in,not in
身份运算符:is,not is 比较的是两个变量的身份是否相等,是内存地址,不是值。
位运算符(操作对象为二进制数据):&按位与 |按位或 ^按位异或 ~按位取反 <<做移动 >>右移动
五、流程控制语句
判断语句
while循环
for循环
用来遍历序列、集合、字典
六、python项目的组织结构
写高性能,可复用的代码;python项目的组织结构有包、模块、类
包和模块,包就是文件夹,模块就是文件
命名空间:包名.文件名
一个普通文件夹要想成为python包,文件夹应该包含一个特殊文件,文件名为:__init__.py
包和模块不会被重复的导入
避免循环引入(文件间相互引入)
python在导入一个模块时,会执行这个文件的代码
模块的内置变量:
__name__ 模块的完整名称(经典用法:if __name__ == '__main__':)
__doc__ 注释
__package__ 包
__file__ 文件路径
dir函数可以打印出当前模块的内部变量
例如:import sys
infos=dir(sys)
print(infos)
包和模块的导入:
一般的项目结构:
导入包的绝对路径,import+绝对路径
导入包的相对路径,用from,目录但是不能超过顶级包目录,main所在的目录不是顶级
入口模块不能用相对路径导入
七、函数
在python命令行下,help(函数名),查看内置函数用法
在python命令行下,import this,如何查看python之禅
python函数有顺序,要先定义,后调用
定义函数:
·
设置递归的最大层数:
import sys
sys.setresursionlimit(10000)
如果定义函数时,没有写return,默认返回None;python可以返回多个变量(默认元组形式),可以用多个变量接受
默认参数,函数默认参数在定义函数的时候设置;默认参数不能放到必须参数后面,更不能混杂放置;形参和实参按顺序对应,如果指定关键字,可以不按顺序;
可变参数,*的使用
变量的作用域
有全局变量、局部变量,没有块级作用域
global可以使局部变量变成全局变量
八、面向对象
1.类和对象
类是现实世界或思维世界中的实体在计算机中的反映,他将数据以及这些数据的操作封装在一起,只负责定义,不负责运行
对象是具体的类,是实例化之后的类
类变量和实例变量的区别:总体特点和个体特点
self 就是调用类的对象(实例),不可以省略
实例方法可以操作实例变量,也可以操作类变量;类变量是属于类的,实例变量属于实例自己。self和cls是约定的关键字,可以定义为其他的,但最好不要改。
2.方法和函数的区别
面向对象和面向过程
3.静态方法
也需要装饰器;没有默认参数;类和对象都可以调用;也可以操作类变量,需要写全类名,而类方法可以用默认参数cls加点号操作,但是不能操作实例变量;
4.成员的可见性
方法和变量都有内部调用和外部调用的区别;
在类的内部,需要定义一些不允许在类外面操作的变量,只有在类的内部可以操作,保证类数据的安全;
在类外提倡用方法操作类变量,不建议在类外直接修改类变量;
方法和变量名前加两个下划线,变成私有方法和私有变量;
python不能通过动态的方式添加私有变量;
5.继承、封装、多态
super关键字的用法
python支持多继承(先搞清楚单继承,因为有单继承就够用了,多数语言只支持单继承)
九、正则表达式
正则表达式是一个特殊的字符序列,一个字符串是否符合我们的设定
字符匹配规则
匹配字符串,python默认采取贪婪的匹配模式,满足5的时候还会继续匹配;在花括号后面加?,就变成非贪婪匹配;
字符串的替换--re.sub
re.finfall re.match re.search
re.finfall在字符串里找所有的匹配项;re.match从字符串开头找匹配项,找到一个即停止;re.search在字符串里找匹配项,找到一个即停止;
group分组
十、
十一、