Python Module

Python Module 导入方法

  1. import <module name>调用这个方法导入的module中的函数时,需要<module name>.<function name>格式进行使用
  2. from <module name> import <sth>从某个模块中引入某些特殊函数等引入现在所在的全局命名空间中,直接使用<sth>就可以进行使用。这里引入的可以是一个子包,也可以是子包中的任意对象。
  3. from <module name> import *将模块中所有对象引入,直接使用原模块中的名称即可使用

搜索路径

导入一个模块时,Python 解析器对模块位置的搜索顺序是:

  1. 当前目录
  2. 如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
  3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。 模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

命名空间和作用域

  • 变量:名字与匹配对象的对应
  • 命名空间:记录了所有名字-对象对应关系的字典

python表达式可以访问全局/局部命名空间,重名时局部命名空间优先。 使用global语句可以告诉python变量属于全局变量。ex.global x

导入本地自定义包

文件结构

main.py
package
|--__init__.py
|--module1.py
|--module2.py

包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。

简单来说,包就是文件夹,但该文件夹下必须存在__init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。

假设module1.py中有函数func1(),则在main函数中可以使用以下集中方式进行包导入:

  1. import mymodule.module1此时对应func1()的调用为mymodule.module1.func1(),前缀较长,比较繁琐。
  2. import mymodule.module1 as m1此时对应func1()的调用为m1.func1()
  3. from mymodule import module1此时对应func1()的调用为module1.func1()

集合数据类型

Python 编程语言中有四种集合数据类型:

  • 列表(List)是一种有序和可更改的集合。允许重复的成员。
  • 元组(Tuple)是一种有序且不可更改的集合。允许重复的成员。
  • 集合(Set)是一个无序和无索引的集合。没有重复的成员。
  • 词典(Dictionary)是一个无序,可变和有索引的集合。没有重复的成员。

选择集合类型时,了解该类型的属性很有用。

为特定数据集选择正确的类型可能意味着保留含义,并且可能意味着提高效率或安全性。

  • List
    • thislist = ["apple", "banana", "cherry"]
    • print(thislist[1])
    • thislist[1] = "mango"
  • Tuple
    • thistuple = ("apple", "banana", "cherry")
    • print(thistuple[1])
    • 不可更改,需要转为列表更改后再转回
  • Set
    • thisset = {"apple", "banana", "cherry"}
    • 访问项目:
      • 您无法通过引用索引来访问 set 中的项目,因为 set 是无序的,项目没有索引。
      • 但是您可以使用 for 循环遍历 set 项目,或者使用 in 关键字查询集合中是否存在指定值。
    • 要将一个项添加到集合,请使用 add() 方法。
    • 要向集合中添加多个项目,请使用 update() 方法。
  • Dictionary
    • 创建字典
      thisdict =	{
       "brand": "Porsche",
      "model": "911",
      "year": 1963
      }
      
    • x = thisdict["model"] or x = thisdict.get("model")
    • thisdict[“year”] = 2019

Virtual Environment

安装虚拟环境

PS D:\Work\04 Research Project\21.08.19 Early Visual Processing\pyspice> pip install virtualenv
Collecting virtualenv
     |████████████████████████████████| 5.6 MB 6.4 MB/s
Collecting filelock<4,>=3.2
  Downloading filelock-3.4.0-py3-none-any.whl (9.8 kB)
Collecting backports.entry-points-selectable>=1.0.4
  Downloading backports.entry_points_selectable-1.1.1-py2.py3-none-any.whl (6.2 kB)
Collecting platformdirs<3,>=2
  Downloading platformdirs-2.4.0-py3-none-any.whl (14 kB)
Collecting distlib<1,>=0.3.1
     |████████████████████████████████| 496 kB 1.6 MB/s
Requirement already satisfied: six<2,>=1.9.0 in c:\programming\python\lib\site-packages (from virtualenv) (1.16.0)      
Installing collected packages: platformdirs, filelock, distlib, backports.entry-points-selectable, virtualenv

创建虚拟环境

virtualenv myvenv,可选参数:

  • --no-site-packages:创建虚拟环境时,不复制主环境中安装的第三方包,也就是创建一个 “干净的” 虚拟环境
  • -p:用于指定 Python 解析器,就是安装好的 Python 应用程序,默认为当前环境中的 Python
  • --no-pip:不需要安装 pip,默认为安装
  • --clear:如果创建虚拟环境的目录已经有了其他虚拟环境,清除重建

激活虚拟环境

虚拟环境创建好后,需要激活才能在当前命令行中使用,可以理解成将当前命令行环境中 PATH 变量的值替换掉

通过 virtualenv 和 模块 venv 创建的虚拟环境,激活方式是一样的,即运行激活脚本

  • Windows 系统中,激活脚本路径是 <myvenv>\Scripts\activate.bat,如果是 powershell 命令行,脚本换成 Activate.ps1 , 注意将 换成你自己的虚拟环境目录
  • Linux 系统中,激活脚本路径是 <myvenv>/bin/activate,默认脚本没有执行权限,要么设置脚本为可执行,要么用 source 命令执行

激活后,可以查看PATH变量 echo %PATH%

退出虚拟环境

退出虚拟环境很简单,只需要执行 deactivate 命令就行,这个命令也在虚拟环境的脚本目录下,因为激活时,将脚本目录设置到 PATH 中了,所以可以直接使用

退出虚拟环境相当于将 PATH 恢复成原来的

Minutiae

  • Python does not have switch statement. Use dict instead.
  • autopep8 auto line feed:
    • Python编码风格指导(PEP8)要求每行代码不得超过80个字符。而VSCode+Pyhon常用代码检查工具是pylint和flake8,常用代码格式化工具是yapf、autopep8和black。针对代码过长导致格式化时自动换行,应在setting.json中修改格式化工具的每行最大字符个数。
      // autopep8
      "python.formatting.provider": "autopep8",
      "python.formatting.autopep8Args": [
          "--max-line-length=200"
      ],
      
  • exec 执行储存在字符串或文件中的 Python 语句,相比于 evalexec可以执行更复杂的 Python 代码

Resources

(W3School Python 教程)[https://www.w3school.com.cn/python/index.asp]