文章目录
python知识点回顾
编码相关
文件存储时,使用某种编码,打开时需要使用相同的编码,否则会乱码
字符底层存储时本质上都是二进制
字符和二进制的对应关系:
ascll编码,256种对应关系
gb2312,gbk(中文和亚洲的一些国家)中文:占2个字节
unicode,ucs2/ucs4(包括所有文明)
utf-8,中文:占三个字节
python默认解释器编码(utf-8)
python.exe 代码文件
计算机中的单位
8位=1字节
字符串格式化
v1="我是{}".format(“俞琦”)
v2="我是%s"%(“俞琦”)
name="俞琦" v3=f"我是{name}"
数据类型
int、bool、str、list、tuple、dict、set、float、None
转为bool为False:空、None、0
可变类型和不可变:
可变:list、set、dict
可哈希和不可哈希:
不可哈希:list、set、dict
字典的键/集合的元素,必须是可哈希类型(list、set、dict不能做字典的键和集合的元素)
str:
独有功能:split、upper、lower、startwith、strip、join
注意:str不可变,不会对原子符进行修改,直接生成新的内容
list:
独:append/insert/remove/pop
注意:list可变,对原数据进行操作
dict:
独:get\keys\items\value
运算符
特殊的逻辑运算符:(整体结果取决于谁?)
v1=99 and 88 #88
v2=[] or 10 #10
v3= 10 or [] #10
推导式
data =[i for i in range(10) if i<5>] #[0,1,2,3,4]
函数
定义:
参数:位置传参/关键字传参/参数默认值/动态参数*args,**kwargs
返回值
函数没有返回值默认返回None
函数的进阶:
python中是以函数为作用域。
全局变量(大写)、局部变量(小写)
局部变量中global关键字,引用全局的变量(不是局部新建的)
内置函数;
bin\hex\odc\max\min\dicmod\sorted\open文件操作
文件操作:
with open自动关闭
打开的模式:
r:读 【文件不存在,报错】 【文件夹不存在,报错】
w:写(清空)【文件不存在,自动新建】 【文件夹不存在,报错】
a:追加 【文件不存在,自动新建】 【文件夹不存在,报错】
注意:os.makedirs/os.path.exsits是否存在,不存在新建目录
模块
1.自定义模块:
2.内置模块:
time/datatime/json/re/random/os..
查看当前目录下所有文件:os.listdir/os.walk
关于时间模块:时间戳/datetime/字符串可以互相转换
关于json模块:
json本质是字符串,有一些自己格式的要求,如:无元组、无单引号
json.dumps序列化时,只能序列化python常用数据类型
关于re正则模块:
正则:\d \w
默认贪婪,不贪婪加?
re.search/re.match/re.findall
3.第三方模块:
requests/openpyxl/python-docx/flask...
面向对象
三大特性:封装、继承、多态
install python in ubuntu
- 下载安装python:
官网:https://devguide.python.org/getting-started/setup-building/ - 安装项目虚拟环境
# 安装虚拟环境库
sudo apt-get install python3-pip
pip3 install pipenv
# 创建项目的虚拟环境
mkdir flask-project
cd flask-project
pipenv shell
- 安装git
步骤1.首先,通过运行以下命令确保您的系统和apt包列表完全更新:
apt-get update -y
apt-get upgrade -y
第2步。在Ubuntu 18.04上安装Git。
现在让我们安装git:
apt install git
您可以使用以下命令来检查已安装的git版本:
$ git --version
第3步。在Ubuntu上配置Git。
(blog-project) root@aliyun:~/blog-project# git config --global user.name "sobermh"
(blog-project) root@aliyun:~/blog-project# git config --global user.email "409788696@qq.com"
接下来,我们将通过查看.gitconfig来验证配置更改:
(blog-project) root@aliyun:~/blog-project# git config --list
user.name=sobermh
user.email=409788696@qq.com
装饰器及闭包
装饰器基本概念
用来装饰其他函数的,即为其他函数添加特定功能的函数
- 两个基本原则:
- 装饰器不能修改被装饰函数的源码
- 装饰器不能修改被装饰函数的调用方式
- 函数即变量
任何变量名都是指向变量值的内存地址;函数名跟变量名一样,只是一个变量的标识符,它指向函数定义对应的内存地址。
高阶函数
定义:接受函数名作为形参(不改变被装饰函数的代码的前提下增加功能),返回值中包含函数名(不改变被装饰函数的调用方式)。
但是高阶函数无法同时实现装饰器的两个原则
嵌套函数
通过def关键字定义在另一个函数中的函数叫嵌套函数。
def timer(func):
def gf():
start_time = time.time()
func()
end_time = time.time()
print('func运行的时间为:',end_time-start_time)
return gf
@timer == foo=timer(foo)
def foo():
time.sleep(3)
print("in foo")
foo()
作用:新增功能和返回的原函数要写在嵌套函数中,在外层函数中需要返回嵌套函数。
编写装饰器的基本套路
- 定义一个接受函数名作为参数的高阶函数
- 在高阶函数中定义一个嵌套函数,在该嵌套函数中:封装想要添加的功能代码、调用作为参数传入的函数名、返回嵌套函数的函数名
常见的装饰器类型
- 被装饰的函数带参数
def timer(func):
def gf(*args,**kwargs): #通过提供不定量参数来自适应被装饰函数的参数
#所有要附加的功能
start_time = time.time()
func(*args,**kwargs)
end_time = time.time()
print('func运行的时间为:',end_time-start_time)
return gf
- 装饰器本身带参数
def timer(timer_type): #接收装饰器本身的参数
print(timer_type)
def outer(func) #加入一层嵌套函数,并且接受被装饰函数名作为参数
def inner(*args,**kwargs):
start_time = time.time()
func(*args,**kwargs)
end_time = time.time()
print('func运行的时间为:',end_time-start_time)
return inner
return outer
@timer(timer_type='minites') #== foo=timer(timer_type='minites')(foo)
def foo(name.age):
time.sleep(3)
print("in foo",name,age)
foo('maohui',11) #inner(name,age)
- 被装饰函数带返回值
def timer(timer_type):
print(timer_type)
def outer(func) #加入一层嵌套函数,并且接受被装饰函数名作为参数
def inner(*args,**kwargs): #通过提供不定量参数来自适应被装饰函数的参数
start_time = time.time()
res= func(*args,**kwargs) 记录返回值
end_time = time.time()
print('func运行的时间为:',end_time-start_time)
return res 返回
return inner
return outer
闭包及与装饰器的比较
func_list=[]
for i in range(3):
def deco(i):
def myfunc(a):
return i+a
return myfunc
func_list.append(deco(i))
for i in func_list:
print(f(1))
- 闭包的作用:
可以用来在一个函数与一组私有变量之间创建关联关系,在给定函数被多次调用的过程中,这些私有变量能够保持其持久性(保存运行环境与变量的状态) - 闭包的特征:
- 必须要有函数的嵌套,而且外层函数必须返回内层函数。外层函数相当于给内层函数提供了一个包装起来的运行环境,在这个包装的运行环境里面,内层函数可完全自己掌握自由变量的值。
- 内层函数一定要用到外层函数中定义的自由变量
- 区别:
the meaning of underlined varibales and functions in python
- variables:
1.前带_的变量;标明是一个私有变量,只用于标明,外部类还是可以访问到这个变量。
2.前带两个__,后到两个__的变量:表明是内置变量
3.大写加下划线的变量:表明是不会发生改变的全局变量 - functions:
1.前带_的变量:表明是一个私有函数,只用于表明
2.前带两个__,后带两个__的函数:表明是特殊函数
环境
在Ubuntu部署64位anconda
https://blog.csdn.net/qq_53564294/article/details/120535377?spm=1001.2014.3001.5506
https://blog.csdn.net/a_cherry_blossoms/article/details/123434261?spm=1001.2014.3001.5506
https://blog.csdn.net/qq_33290813/article/details/125389669?spm=1001.2014.3001.5506
anaconda
官网:https://www.anaconda.com/products/distribution
anaconda操作
1.基础操作
# 查看版本
conda --version / conda -V
# 获取帮助
conda --help / conda -h
# 获取remove命令的帮助
conda remove --help
# 详细信息
conda info
# 安装包s
conda install <package_name>
# 卸载包
conda remove 包名
# 更新包
conda update 包名
# 查询已安装的包
conda list
2.管理及配置环境
# 升级anaconda
conda update conda
# 建虚拟环境
conda create -n name(自己起) python=3.7
# 查看已有环境
conda info -e
# 进入创建的虚拟环境
conda activate <name>
# 切换到base环境
activate base
# 创建某些包的环境
conda create --envname numpy
# 创建指定版本指定包的环境
conda create --envname python=3.6 numpy
# 复制某个环境
conda create --newenv --clone oldenv
# 删除某个环境
conda remove -n 你的环境名字 --all
3.anaconda使用时间长了,会衍生很多没用文件,比如pakage、tar文件包等,大到十几G;使用命令行能有效清除。
# 1.删除从不使用的包
conda clean --packages
# 2.删除tar包
conda clean --tarballs
# 3.删除索引缓存、锁定文件、未使用过的包和tar包
conda clean -a
$ 4.清除索引缓存
conda clean -i
模块导入与搜索机制
- 模块搜索路径:
1.程序的主目录
2.pythonpath(环境变量)
3.标准链接库
4.任何.pth文件的内容
以上四个组件组合起来就变成了sys.path,其保存了模块搜索路径在机器上的实际配置,可以通过打印内置的sys.path列表来查看路径。