首页 > 技术文章 > 模块以及包

newt 2018-05-14 22:34 原文

 #注意三种模块! #引用的时候是默认从同级的找

 

python文件夹跟package的区别就是package会多一个init文件

 

import cal1  #调用过来的只是这个变量名 import执行的时候先执行

print(cal1.add(3,5))  #下面才是开始使用

 

import:1.执行调用模块文件 (比如说有print 那么它会先打印所有print再执行对应函数)

             2.引入变量名

 

#第二种方式 用from跟import同时运用 更方便

from
cal1 import add from cal1 import sub print(add(3,5)) print(sub(3,5))
#第三种方式 用*号 代表一切 但是不推荐此方法 因为会执行模块里所有的文件 比如说被调用文件所有的print都执行了
from
cal1 import * print(add(3,5)) print(sub(3,5))
#错误示范

def
add(x,y); return x+y+100 from cal1 import * #导致两个函数冲突 导致覆盖函数 可能会跟自己写的有重复 print(add(3,5))

 

 

路径:因为系统默认是找执行文件的本级路径以及上一级路径 所以最好统一用from引用文件 不是找得到的就需要路径 比如你执行文件在第二层 但是调用函数在第三层 而不仅仅是不在同级

 

import sys
print(sys.path)  #通过这个知道import是默认找到执行文件以及执行文件相关的路径
#针对上述情况可以用这个方法

from
my_module import cal #从package中引用模块 也就是文件名 print(cal.add(1,2)) #当前执行的文件就是入口

 

包的概念(下面有init文件):1.用来组织模块 比如看了包之后就知道引用的大概是什么 2.防止有重复的变量名 只要包不同则路径不同 因此不会冲突 3.逻辑更清晰

 

 

#如果是多层就用这三种方式引用

from
web.web1.web2 import cal #最好用第一种 print(cal.add())

from web.web1.web2.cal import add
print(add())

from web.web1 import web2 #执行web2的__init__文件,唯一不支持的调用方式    其实也可以在_init_里面加入一个引用与cal拼接起来,这样下面的print就不会报错
print(web3.cal.add()) #这一步不行 不能这么调用
 

 

__name__与__main__:在执行文件(bin文件)执行的时候print(__name__)就是打印main,如果是在执行文件执行调用文件中的print(__name__)就是打印文件路径

 

有什么用?

 

if __name__ == "__main__":  #将这个if语句放在被调用文件里可以达到测试的作用 因为被调用的时候name不等于main,下面的执行代码就不会在执行文件里执行
    print(add(1,5))

 

 

如果把上面这个表达式放在执行文件有什么用?          不想让这个文件被调用 

 

 

time是解释器内部的模块!

 

 BASE_DIR:灵活添加文件路径或者定位路径

import sys
sys.path.append() #临时修改 永久修改就是改环境变量 也就是系统path
#修改路径的作用:有时候不能定位到想定位的层(比如要调用的在上一层,但是其实调用的时候只能从同级一步一步往里面找) 这时候就需要添加一个路径来到那一层 然后再引用
import
sys sys.path.append(r"C:\Users\Administrator\PycharmProjects\untitled2\day21\web\web1\web2") #临时修改 永久修改就是改环境变量 也就是系统path 记得加引号
#打印当前文件,这样append的时候就是添加这个文件的路径 就不至于把引用写死 但是直接用__file__是得到当前执行文件的路径 而我们是要得到上量两层的路径

import sys
sys.path.append(C:\Users\Administrator\PycharmProjects\untitled2\day21\web\web1\web2) #临时修改 永久修改就是改环境变量 也就是系统path

C:/Users/Administrator/PycharmProjects/untitled2/day13/Hello.py
#不把路径写死的方法  其实__file__得到的只是一个文件名 但是pycharm帮你找到了这个文件的路径 如果我们要自己来找就需要os.path.abspath这个方法 这是一个绝对路径方法

import
os,sys #dirname的作用就是在绝对路径的基础上往上走 BASE_DR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #这是os模块的内置方法 注意这里用了两个dirname 用一个是定位到当前文件目录 如果还要再往上一层就需要再加一个dirname
sys.path.append(BASE_DR) #意思就把这一层路径加进去 从这一层开始找

 

推荐阅读