系列文章目录
一、包
-
包的概念:
含有一个或多个模块的并包含一个
__init__.py
文件的文件夹(该文件可以为空,也可以有代码),该文件夹就是包,它是比模块更高一级的封装;包的名称通常为全部小写,避免使用下划线。
-
包的使用方法:
包的使用方法和模块的使用方法基本一致。
import 包.模块 from 包 import 模块 from 包.模块 import 要导入的对象
-
导入包时,解释器所作的操作:
在导入模块时,会运行模块中的代码;而在导入包时,实际上就是导入包下
__init__.py
文件,解释器会运行__init__.py
中的代码。 -
包内有包:
包支持相对路径和绝对路径的导入,这种情况适用于包内有包的情况:
在
__init__.py
中,导入子包中的对象,这样子包中的对象才能在别处被正确导入 :# 绝对路径 from 包 import 子包 from 包.子包 import 模块 # 相对路径 from . import 子包 from .. import 模块 # 只有一个子包(文件夹) from .包 import 模块
-
__all__
变量:包的
__all__
变量定义在__init__.py
文件中,作用和模块内的定义的变量一模一样。都是指定用*
导入时,可以导入的对象。
二、函数注解(最低版本:python 3.5)
-
函数注解的概念:
函数注解也叫类型提示,它是可选的,用来标注形参的数据类型和返回值的数据类型。
-
作用:
函数注解目前仅是对参数做一个说明,和给IDE代码、检查工具等第三方工具检查代码使用。不按照标注的类型传参并不会有任何影响。
-
语法格式:
参数注解是
形参:类型
的格式,返回值注解是在括号后面添加-> 数据类型
:def foo(a:int, b:float, c:str='默认值') -> None: pass
-
__annotations__
属性:
注解是以字典的形式存放在函数的__annotations__
属性中,并且不会影响函数的任何其他部分。
三、软件开发的目录规范
-
日志文件通常会单独存放到另一块硬盘中;
-
README文件相当于该程序的说明书,写一些程序的安装方法,使用方法等;
-
requirements.txt
保存着运行该程序需要安装的一些库,也就是包或者模块; -
run.py
是程序的运行入口文件; -
setup.py
是安装程序时运行的文件; -
将工程根目录添加到环境变量中,能极大的方便对其他目录的操作:
import os import sys # 获取项目根目录; __file__保存着当前文件的绝对路径 BASE_DIR = os.path.dirname(os.path.dirname(根据__file__指出根目录位置)) # 添加到环境变量 sys.path.append(BASE_DIR)