命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。
命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响
就好比不同的文件夹下,可以有重复的文件名,但是在同一个文件夹下就不能有相同的文件名
三种命名空间
命名空间的查找顺序
局部命名空间 > 全局命名空间 > 内置命名空间
如果找不到则会抛出一个 NameError 的异常
命名空间的生命周期
命名空间的生命周期取决于对象作用域,如果对象执行完成,则该命名空间的生命周期就结束,因为无法从外部命名空间访问内部命名空间对象
Python 程序可以直接访问命名空间的正文区域
Python 作用域有四种
g_count = 0 # 全局作用域
def outer():
o_count = 1 # 闭包函数外的函数中
def inner():
i_count = 2 # 局部作用域
注意:在 Python 中,只有模块,类,以及函数,才会引入新的作用域,其它代码块 if/else try/except while/else 是不会引入新的作用域
global 和 nonlocal 关键字
当内部作用域想要修改外部作用域的变量,就要用到 global 和 nonlocal 关键字
num = 1
def fun1():
global num
print(num) # 1
num = 100
print(num) # 100
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了
def fun1():
num = 1
def fun2():
nonlocal num
num = 100
print(num) # 100
fun2()
print(num) #100
有一种特殊情况需要注意
num = 1
def fun1():
num = num + 1
print(num)
这个是会报错的,因为 fun1 中的 num 是局部变量,无法修改
所以应该
num = 1
def fun1():
global num
num = num + 1
print(num)
或
num = 1
def fun1(num):
num = num + 1
print(num)
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
fun1(num)
操作系统接口
os 模块提供了很多与操作系统相关的函数
import os
import shutil
def Library():
str = os.getcwd()
os.chdir('../venv') # 进入到同级的 /venv 目录
os.system('rmdir today') # 删除 today 目录
os.system('mkdir today') # 创建目录
shutil.copyfile('./main.py','main1.py')
os.remove('main1.py') # 删除指定文件
shutil.move('./main1.py','test')
文件通配符
搜索当前目录下以 .py 结尾的文件
import glob
def File():
dict1 = glob.glob('*.py')
print(dict1)
另外还有字符串正则,这个会在另外一篇博客详细总结
访问互联网
这个就是传说中的 爬虫,这里只是简单了解,后期也会总结专栏 Python 爬虫
用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib
def PyPachong():
url='http://www.taobao.com'
res=urlopen(url) #通过urlopen方法访问拼接好的url
res=res.read().decode() #read()方法是读取返回数据内容,decode是转换返回数据的bytes格式为str
print(res) # 输出百度官网的源码
文件压缩
import zlib
def ZlibPress():
s = b'abcdabcdabcdabcdabcd'
print(len(s)) # 20
t = zlib.compress(s)
print(len(t)) # 14
zlib.decompress(t)
print(len(s)) #20
如果出现压缩后变大的情况,其实也很正常,这和 zlib 底层的压缩算法有关,但是当你写的字符串越长的时候,其实压缩的越明显,比如你给的 s = ‘abcdefg’
但是压缩后可能变为 a:1,b:1,c:1,d:1,e:1,f:1,g:1 这很明显会变大,当然这只是一个简单的案例,其底层压缩算法要复杂的多
另外也有一些,性能度量,测试模块,这里也不再总结