一、软件安装,环境准备
- 安装python3运行环境
- 安装ipython:
pip install ipython
升级pip:
python -m pip install --upgrade pip
- 安装PyCharm,激活码可选购买
二、python 基础
- 变量
int:整形
float:浮点型
bool:布尔型,True(非0) False(0)
complex:复数型,用于科学计算
非数字型:字符串、列表、元组、字典
- 运算:
+(加) 字符串、列表、元组均支持+合并
–(减)
*(乘) 字符串、列表、元组均支持*进行重复,字典不可以。
**(取方)
/(除)
//(除取整)
%(模)
- Pycharm快捷键:
F7、F8 单步执行,
F9 跑完程序,
shift + F9 debug模式运行
ctrl+/ 注释、取消注释
- 常用函数:
del 关键字删除变量后,变量不可使用。也可以用来删除列表中的数据。
type()查看变量类型
print()打印到控制台
input() 获取输入
示例:input(“请输入账号:”)
str() 转换为字符串
int() 转换为整形
float() 转换为浮点
关键字:输出所有关键字
import keyword
print(keyword.kwlist)
pass 关键字:占位符,保证程序正常运行,可以进行占位。
示例:if 1==1:
pass
id()查看变量在内存中的地址
- 计算
bool在计算时会转为数字 True(1),False(0)
字符串 * int = 多个字符串重复
字符串与非字符串之间不能使用其它运算符号
- 逻辑操作符
and 并且
- or 或者
not 非
in 是否在字符串、列表、元组、字典(只判断key)中
not in 同上,取反
is 内存地址相同判断
is not 内存地址不相同判断
>
>=
== 与is的区别在于,比较内存中的值,而不是地址。
!=
<=
<
- 变量的格式化输出
示例:
yuanzu=(“hello”,19)
printstr=“%s 的年龄是 %d” % yuanzu
print(printstr)
%s 字符串
%d 有符号十进制整数
%06d 按指定6位数显示的整数,不足的地方使用0补全
%f 浮点数
%.02f表示小数点后只显示2位
%% 输出%
示例:print("%s %d %05d %f %.02f %%" % ("哈哈哈",44,44,44.5555,44.555)
结果:哈哈哈 44 00044 44.555500 44.55 %
- 变量函数命名规则:数字、字母、下划线组成,数字不能开头
- 关键字:
import keyword
print(keyword.kwlist)
- 条件判断:if elif else
- 三大流程:顺序、分值、循环
- 注释
单行注释:# 单行注释
多行注释:“”“注释内容”“”
文档注释:在方法体后第一行
- 列表(数组)
定义:name_list=[数据1,数据2 ]
长度:len(name_list)
增加:insert、append、extend(方法内的参数会拆分成单个字符append到列表中)
删除:remove(如果参数不存在,则报异常)、clear、pop(弹出并删除)、del name_list[0]
修改:name_list[0]=数据3
查询:name_list[0]、count、index(如果参数不存在,则报异常)
遍历:
for n in name_list:
print(n)
排序:sort(正序),reverse(反序)
删除列表中的空字符串:
- 元组
定义:(数据1,) (数据1,数据2)
长度:len(name_list)
方法:append、count、index(如果参数不存在,则报异常)
修改:name_list[0]=数据3 元组不能修改,但可以修改元组引用内的数据。
查询:name_list[0]
遍历:
for n in name_list:
print(n)
应用场景:
1函数的参数和返回值
2格式字符串,防止修改
3让列表数据不被修改,更安全
- 元组与list互转
元组=tuple(列表)
列表=list(元组)
- 字典
定义:dic={key:value,key:value}
键必须唯一,且只能为字符串、数字或者元组。无序。
长度:len(dic),统计键值对数量
获取所有的键:keys()
获取所有的值:values()
获取所有的项:items()
增加:dic[key3]=value3
修改:与增加相同
查询:dic[key](如果key不存在,则报错)
删除:clear、pop(如果key不存在,则报错)
合并字典:
示例:dic2={key:value,key2:value2}
dic.update(dic2)
注意:update方法会将相同的键进行更新,不同的键将进行合并。
- 字符串
定义:’单引号或者双引号’
长度:len()
出现次数:count
出现位置:index
方法分类:
判断类型:
isspace 只包含空格( )
isalnum 字母或者数字
isalpha 字母
isdecimal全角数字,不能判断小数
isdigit 全角数字、(1)(unicode字符串)、u00b2,不能判断小数
isnumeric isdigit基础上,包含中文数字(示例:一千零一夜),不能判断小数
……
查找和替换:
startswith、endswith
find(如果不存在,返回-1)
rfind 从右侧开始查找
replace
大小写转换:
upper
lower
swapcase
文本对齐:
ljust 左对齐,并使用空格填充至指定长度
rjust 右对齐,并使用空格填充至指定长度
center 居中对齐
去除空白:
lstrip
rstrip
strip
拆分或者拼接
split 默认按照( )和空格拆分
splitlines 按照( )分割,返回包含各行的列表
join 多个字符串链接
切片:
字符串[开始索引:结束索引:步长]
倒序索引,从右向左依次递减 -1,-n
示例:
num=”0123456789”
num[2:6:] #截取2-5 2345
num[2:] #截取2-末尾 23456789
num[0:6]或者num[:6] #截取开始-5 012345
num[:] #截取完整字符串 0123456789
num[::2] #开始-末尾,每隔一个字符截取 02468
num[1::2] #1-末尾,每隔一个字符截取 13579
num[-1] #最后一个字符 9
num[2:-1] #从2开始到倒数第二个 2345678
num[-2:] 从后往前截取89
num[-1::-1] #从后往前截,步长为倒叙 9876543210
- 公共方法
内置函数:
len()
del或者del()
max(),如果是字典,则对key进行比较
min(),同上
- for-else:
for 变量 in 集合:
循环体
else:
没有通过break退出循环,循环结束后会执行的代码
- TODO 注释
# TODO(作者/邮件) 注释内容
- 重命名变量:定位光标到变量上,按shift+F6改名
- Linux上的shebang符号(#!)
a.使用which python3获得路径
b.在启动文件顶部添加:#! python路径
c.增加可执行权限 chmod +x 文件路径
- 函数的调用是传入内存地址,函数的返回是返回内存地址。
- 局部变量和全局变量
python中不允许直接修改全局变量的值,如果赋值,则会在函数内部定义一个局部变量。
如果要给全局变量赋值,则需要使用global 变量进行显示申明。
全局变量命名规则,使用g_或者gl_开头进行命名。
- 方法:可变参数方法定义,*+参数名为元组参数,**+参数名为字典参数
def demo(num,*nums,**person):
print(num)
print(nums)
print(person)
demo(1)
demo(1,2,3,4)
demo(1,2,3,4,name=”小米”)
demo(1,2,3,4,name=”小米”,age=18)//1为第一个参数,2,3,4为第二个参数,后面两个为第三个参数
元组和字典拆包:上面的demo方法无法直接传入元组和字典,如果直接传入,会被当做元组或者字典的一部分。如果要传入元组,则需要使用拆包的方式。示例代码:
a=(2,3,4)
b={ name=”小米”,age=18}
demo(1,*a,**b)
三、导入包
- 同项目不同包名导入
- 不同项目引用导入
四、面向对象
- 类和对象的关系
- 类的设计:类(大驼峰命名方法)、属性(小驼峰命名法)、方法(小驼峰命名法)
- dir()方法查询类的方法列表
- 类的定义与创建对象的语法
示例:
class 类名:
def 方法():
pass
变量=类名()
- self:类方法可以使用参数self进行对自身的指代。
- _init_方法(对象创建时调用)、_del_方法(对象销毁前调用)、_str_方法(返回对象的描述信息,print方法会自动调用)
- None关键字,相当于其它语言中的null
- 伪私有属性和私有方法,定义:定义时在前面加上两个下划线。外部一定要访问,则可以使用_类名__方法名。
- 继承语法:class 类名(父类名1,父类名2):多继承,父类不要有重名方法,应尽量避免使用多继承。
- 重写:
定义相同方法名进行覆盖。
方法1:可以使用super()对父类进行指代和方法调用。只能调用方法。
方法2:使用父类名.方法名进行调用。只能调用方法。
- 私有属性和方法,子类对象不能直接访问。
- 类属性相当于java中的类全局静态字段。类属性是描述类的特征,不与具体对象相关。在继承中,会有一个向上查找机制,先在子类中查找,若找不到,然后在父类中查找。
使用对象名.类属性赋值,会创建实例属性。如果使用的子类名,也会创建实例对象。
- 类方法,同java中的类静态方法。定义,在方法上面加上 @classmethod,方法参数中加上cls,方法类别可以使用cls来指代当前类。
- 静态方法。如果一个方法不需要访问类属性,也不需要访问对象属性,则可以定义为静态方法。
定义,在方法上面加上@staticmethod
- 单例设计模式:
重写__new__方法
示例代码:
instance = None def __new__(cls, *args, **kwargs): if cls.instance is None: cls.instance = super().__new__(cls) return cls.instance
- 异常捕获:
try:
exception 异常类型1:
exception (异常类型2,异常类型3):
exception Exception as result:
print(“未知错误:%s” % result)
- 主动抛出异常 raise Exception(“异常”)
五、模块
- 导入模块 示例:import 文件名 as 别名,使用方式 别名.类名等
- 导入部分 示例:from 文件名 import 类名,使用方式 直接使用类名等
- 如果从两个不同的模块中导入相同的函数,后面的会覆盖前面导入的函数。
- 模块导入顺序,先从当前文件夹进行搜索,如果没有,则会从系统模块中进行导入。所以与系统重名的文件命名会覆盖系统的模块。可以使用 模块名.__file__查看模块的路径。
- 文件中的代码被导入时(import 行),如果没有缩进,则会都被执行一遍。
- if __name__==”__main__” ,当前文件直接运行,则为true,否则为false。
- 包是一个包含多个模块的特殊目录,目录下有一个特使的文件 __init__.py,报名的命名反射和变量名一致,小写字母+_组成。需要在 __init__.py中指定对外界提供的模块列表。
模块列表示例:from . import 文件名
外部使用示例:
import 包名
包名.模块名.方法/类名
- 发布模块(了解即可)
- 创建setup.py文件
- 构建模块 python setup.py build
- 打包模块 python setup.py sdist
- 解压缩模块 tar zxvf 文件名
- 安装模块 python setup.py install
- 导入包名 imoprt 包名
- 安装模块 pip install 模块/包名
- 卸载模块 pip uninstall 模块/包名
- pygame 第三方游戏模块
pip install pygame
六、文件操作
- open()
- read()
- write()
- close()
示例代码:
file = open("hm_class.py") print(file.read()) file.close() print("over")
- open() 参数说明
r 以只读方式打开
w 以只写方式打开,如果文件存在,会覆盖,如果不存在,则创建。
a 以追加方式打开,文件指针在文件末尾
r+ 读写方式打开,文件指针在开头,如果文件不存在,则报错
w+ 读写方式打开,如果文件存在则覆盖,不存在,则创建。
a+ 读写方式打开,如果文件存在,则指针放在结尾,如果文件不存在,则创建新文件进行写入。
- readline 读取一行数据
- 小文件复制
示例代码:
file_read=open(“”) file_write=open(“”,”w”) file_write.write(file_read.read()) file_read.close() file_write.close()
- 大文件复制
使用部分读取,部分写入的方式。
示例代码:
file = open("","rb") file2 = open("hm_class2.py", "wb") while 1: text = file.read(1024) if not text: break file2.write(text) file.close()
- 文件或者目录的常用管理操作
- 导入os模块,实现对文件或者目录的操作
- rename() 重命名
- remove() 删除文件
- listdir() 返回当前文件夹下所有的文件夹和文件
- os.path.isdir(“”)判断是否为文件夹
- mkdir() 创建目录
- rmdir() 删除目录
- getcwd() 获取当前目录
- chdir() 修改工作目录