python模块加强和命名空间

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(旧数据)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值