什么是Python程序概念层级?
python分为4层:表达式 --> 语句 --> 模块 -->包
表达式
表达式是python程序中最小的构成单位。表达式最基本的功能就是创建和处理对象(可以是任意类型的)。
name="王大锤"
# 程序做了两件事情:
# 第一:在内存中开辟一块区域存储一个字符串对象"王大锤";
# 第二:把对象"王大锤"在内存中的唯一标识指向name。就可以通过name这个引用来操作"王大锤"对象了。
语句
个人理解:
表达式说的是内存中有个什么对象
语句就是要多这个对象做什么
表达式:name="王大锤"
语句:print(name*3) #在屏幕上连续打印3次"王大锤"
语句执行结果:王大锤王大锤王大锤
子语句的概念:
语句: if score >= 60 :
子语句: print('及格')
模块
个人理解:以.py作为后缀的文件都是模块。
在同一个模块中可以包含多个语句或表达式,也可以将语句或表达式定义到程序逻辑单元如函数或类中。
不管包含多少代码,当这些代码组织到一起形成一个以.py为后缀的文件,就形成了脚本文件,从概念上讲,这个脚本文件也称为一个模块。
包
在程序功能越来越复杂的情况下,可能需要将代码做一定的分割,将不同的功能放到不同的模块中(连接数据库模块、从网上爬取数据模块),而这些模块之间可能有一些关联,就需要将他们放在同一个文件夹下,这个文件夹在Python中就是包。用来定义一组文件或模块之间的关系的。
知道了Python层级,有什么用?
引用链接:http://www.jianshu.com/p/56829d816197
Python 包含子目录中的模块方法比较简单,关键是能够在 sys.path 里面找到通向模块文件的路径。
网上比较好找到的,是下面几种情况:
(1)主程序与模块程序在同一目录下:如下面程序结构:
-- src
|-- mod1.py
-- test1.py
若在程序 test1.py 中导入模块 mod1, 则直接使用import mod1或from mod1 import *;
(2)主程序所在目录是模块所在目录的父(或祖辈)目录如下面程序结构:
-- src
|-- mod1.py
|-- mod2
| -- mod2.py
-- test1.py
若在程序 test1.py 中导入模块 mod2, 需要在 mod2 文件夹中建立空文件init.py 文件(也可以在该文件中自定义输出模块接口); 然后使用from mod2.mod2 import *或import mod2.mod2.
(3)主程序导入上层目录中模块或其他目录(平级)下的模块如下面程序结构:
-- src
|-- mod1.py
|-- mod2
| -- mod2.py
|-- sub
| -- test2.py
-- test1.py
若在程序 test2.py 中导入模块 mod1 和 mod2。首先需要在 mod2 下建立init.py 文件(同(2)),src 下不必建立该文件。然后调用方式如下:
下面程序执行方式均在程序文件所在目录下执行,如 test2.py 是在 cd sub; 之后执行 python test2.py 而test1.py 是在 cd src; 之后执行 python test1.py; 但是在 src 目录下执行 python sub/test2.py 或者 python src/sub/test2.py 会报错。
import sys
sys.path.append("..")
import mod1
import mod2.mod2
(4)但是很多项目里,是通过命令行执行完整路径的 py 文件,需要解决如上问题。
通过(3)可以看出,导入模块关键是能够根据 sys.path 环境变量的值,找到具体模块的路径。如果在 src 目录下执行 python sub/test2.py 要成功,就需要在 test2.py 中添加当前文件所在的绝对路径到 sys.path, 代码如下:
import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),os.path.pardir)))
import mod2.mod2
然后执行 python src/sub/test2.py 就能正常导入 mod2 并使用了
网友评论