炸鸡人博客 基本上无害
Posts with the tag python:

Python 系列:命名空间和作用域

定义

命名空间

命名空间(namespace):官方说法是从名称到对象的映射,实际上就是保存变量名与变量值绑定关系的一个空间。赋值语句会将绑定关系写入命名空间,而引用变量时则会根据变量名在命名空间中查询出对应的值。并且大部分的命名空间都是利用 Python 的字典来实现的(例外如类的 __slots__ 属性)。程序中出现在全局的变量构成一个命名空间,Python 内置的函数和异常类也有它们自己的命名空间,每次定义函数或类时也会创建专属于它们的命名空间。命名空间之间相互独立,同名的变量可以存在于不同的命名空间中,例如两个函数内部可以使用同名的局部变量,这有助于我们在不引发冲突的同时合理复用变量名。

作用域

作用域(scope):官方说法是 Python 程序中能直接访问一个命名空间的文本区域。听起来有点抽象,实际上就是指出程序中哪些区域的文本归哪个命名空间管理,例如函数的作用域显然就是函数体(定义函数的所有语句),全局作用域就是从头到尾整个程序。但并不是说出现在一个作用域中的变量就一定属于该作用域(的命名空间):若在该区域内通过赋值语句等操作创建(或修改)了该变量的绑定关系后,那它就属于该作用域;否则它就属于其它作用域,在当前区域引用它需要根据特定的规则向其它作用域进行查询。例如常见的在函数中引用全局变量。本文的一个重点就是要来仔细说说这一规则。

Python 系列:除法运算符

在 Python 3 中关于除法的运算符有三种:

  • /:表示精确的真除法。魔法方法为 __truediv__
  • //:表示地板除。魔法方法为 __floordiv__
  • %:表示求模。魔法方法为 __mod__

Python 系列:操作文件和目录的路径

前言

之前在 Linux 上用 Python 处理系统的文件和目录时,我都是简单粗暴地用 os.system 函数直接执行 shell 命令来实现的。例如新建一个目录并把文件移动进去,我会这么写

dirpath = './result'
filepath = './data.txt'
os.system(f'mkdir {dirpath}')
os.system(f'mv {filepath} {dirpath}')

即把 shell 命令硬编码到程序中。但最近在 Windows 上运行老程序时,因为 os.system 默认调用 CMD,所以这种写法的老代码全部木大。

其实借助 Python 标准库中用于系统交互和路径处理的模块,就能尽可能降低代码对平台的依赖,并且模块中也提供有许多方便的函数。本文会记录那些最常用的功能。