pip使用
pip是一个现代的,通用的python包管理工具,提供了安装,卸载,下载,查找功能
安装包
pip install 包名 # 最新版本
pip install 包名==1.0.4 # 指定版本
pip install '包名>=1.0.4' # 最小版本
升级包
pip install --upgrade 包名
卸载包
pip uninstall 包名
搜索包
pip search 包名
列出已安装的包
pip list
# 导入和导出安装包
pip freeze > 盘符:/requirements.txt # 导出
pip install -r 盘符:/requirements.txt # 导入
# 查看版本
pip -V 或者 --version
pip源修改
Pip默认下载的地址是在国外,我们安装大一点的包的时候,会因为网速受限浪费大量的时间,这个时候我们需要去把下载源修改为国内镜像。
pip国内的一些镜像
阿里云 https://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) https://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
windows:
直接在user目录中创建一个pip目录,如:C:/Users/xx/pip,新建文件pip.ini,内容如下
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
也可以安装的时候通过参数 -i 临时修改:
pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple
模块加强
1. 内置模块
2. 标准模块 (/Lib)
3. 自定义模块
4. 第三方包模块 (/Lib/site-packages)
查找顺序:
1, 内置模块和标准 优先级最高
2, 当前文件所在路径------>第三方模块路径
3, 自定义模块查找路径
import sys
sys.path.append()
sys.path.insert(0,"模块路径")
命名空间作用域
命名空间: 解决命名突出, python只能用于查看
命名空间,字典, 保存变量/函数/类 名 与其 对应值的 映射关系
局部命名空间–locals()
全局命名空间–globals()
内建命名空间- print(dir(builtins))
概念: 变量/函数 作用范围
作用域分类:
1 .局部作用域 (函数内部)
只能在函数内使用
2. 全局作用域 (函数外部)
任意地方都能访问, 函数内不能修改
3. 闭包作用域 (函数 嵌套函数, 内函数使用外层函数中的变量 , 必须返回内函数)
4. 内建作用域
任意位置使用
1. 三种
Local: 局部命名空间
查看: locals()
Global : 全局命名空间, 只要在全局命名空间中的内容到处都能使用
查看: globals()
__name__: 模块名, 如果是主执行文件 值为 __main__
__builtins__: 内建名字空间对象,用于查看内建名字空间中的内容的
__file__: 当前文件的绝对路径
# 动态获取当前文件所在的目录
import os
print(os.path.dirname(__file__))
Built-in: 内建命名空间, 内建中的所有内容到处都能使用
查看: dir(__builtins__)
内容: int,list,tuple,str,max,min,sum,range,len,super,locals,globals
例子1:
name = "张飞" # 全局命名空间
class Student(object):
pass
def changeName():
name = "李四" # 局部命名空间中
age = 18 # 局部命名空间中
# 查看局部命名空间内容
print(locals())
changeName()
print(name)
# 查看全局
print(globals())
# 查看当前文件的路径
print(__file__)
# 动态获取当前文件所在目录
import os
print(os.path.dirname(__file__))
# 查看内建中的内容
print(dir(__builtins__))
1. 作用域的分类
局部作用域(Local): 作用范围为当前函数内容
闭包作用域(Enclosing): 作用范围为函数中的子函数中(函数嵌套)
全局作用域(Global): 作用范围全局
内建作用域(Builtin): 作用范围全局
作用域: 指成员(变量,函数,类,方法)的使用范围
2. 成员的查找顺序: L>E>G>B
3. 指定操作对应作用域中的成员
在函数内修改全局的成员, 使用 global 全局变量名 引入之后才能修改
在子函数中修改闭包变量, 使用 nonlocal 闭包变量 引入闭包变量才能修改
例子2:
def len(string): # 获取字符串长度
print("全局位置的len")
i = 0
for tmp in string:
i += 1
return i
name = "小刘备"
def outer():
name = "局部张飞"
print(name)
def inner(): # 子函数
# 闭包
nonlocal name
name += "小关羽" # local
print("闭包位置输出:", name)
print("名字长度", len(name))
inner()
print("全局位置的", name)
outer()
变量查找顺序
- LEGB
Local (局部) > Enclosed(闭包) > Global(全局)–>Built-in 内建 - 指定访问对应命名空间
- global 变量名 — 指定访问全局
- nonlocal 变量名 — 指定访问不是局部
UnboundLocalError — 使用一个未赋值的局部变量
复制和拷贝
简单数据和复杂数据
1. 简单数据在赋值的时候都是使用同一个内存空间, 节约内存.
列如: 字符串, 数字 ,布尔
2. 复杂数据,每次赋值,都是开辟一个新的内存空间, 将对应的空间地址 赋值 给变量
例如: 列表,字典,元组,类实例化的对象
==: 判断值相等
is : 判断地址相等
1. 浅拷贝
import copy
copy.copy()
2. 深拷贝
将对应数据中 的复杂数据 也拷贝了一个新的内存地址
import copy
新数据 = copy.deepcopy(旧数据)