8.3 函数知识点(补充)
函数的类型提示
Python并不强制规定程序员的操作
def fun(name:str,age:int,hobbies:tuple)->int:
print(name)
print(age)
print(hobbies)
fun('hello',12,('play','music'))
def fun(name:str='hello',age:int=12,hobbies:tuple=('play','music'))->int:
fun()
8.4 包
什么是包?
包就是模块。
包就是一个含有__ init __.py文件的文件夹,文件夹内可以组织子模块或子包 。
为什么要使用包?
随着模块数目的增多,把所有模块不加区分地放到一起也是极不合理的,于是Python为提供了一种把模块组织到一起的方法,即创建一个包 。
import mmm # mmm为一个含有__init__.py文件的文件夹
print(mmm.x)
print(mmm.y)
如何使用包?
1、绝对导入,以包的文件夹作为起始来进行导入
from mmm.m1 import x
print(x)
from mmm.m2 import x
print(x)
2、相对导入
.:代表当前文件夹
..:代表上一层文件夹,如果还在上一层就在加一个点
仅局限于在包内使用
包内的模块导入推荐使用相对导入
绝对导入是没有任何限制的,所以,绝对导入是一种通用的导入方式
1、关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:
凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如import 顶级包.子包.子模块,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
2、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间
3、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,
即包下的__init__.py,导入包本质就是在导入该文件
8.5 软件开发的目录规范
• core/: 存放业务逻辑相关代码
• api/: 存放接口文件,接口主要用于为业务逻辑提供数据操作。
• db/: 存放操作数据库相关文件,主要用于与数据库交互
• lib/: 存放程序中常用的自定义模块
• conf/: 存放配置文件
• run.py: 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹作为sys.path的第一个路径,这样就省去了处理环境变量的步骤
• setup.py: 安装、部署、打包的脚本。
• requirements.txt: 存放软件依赖的外部Python包列表。
• README: 项目说明文件。
从一个文件引入另外一个文件,就需要使用sys.path.append('绝对路径'),然后再引入。
# 优化目录
import os
import sys
# print(__file__) # 当前文件的绝对路径
BASE_DIR=os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)
from core import src
src.run()
浙公网安备 33010602011771号