首页 > 其他 > 详细

模块和包

时间:2020-03-17 21:30:57      阅读:45      评论:0      收藏:0      [点我收藏+]

模块

  模块定义:模块就是一个保存python代码的文件

  import :导入一个整体的模块

  from :从一个模块中获取一个特定的内容

  reload:在不终止python程序的情况下,重新导入模块文件内容的方法。

  备注:

  一般导入模块的语句都是写在文件的顶部,一个模块只需导入一次就好。

  交互模式下,os.getcwd()的路径 必须和这个模块文件的路径处于同一级,否则在import的时候会找不到

程序找包的过程:
#1 会在当前目录下进行查找import 的模块文件
#2 去pythonpath下面的所有路径下,去找import 的模块文件
#3 最后 python的安装路径C:\Python36\Lib\site-packages的目录下去找
如果1/2/3/4都没有找到,则报没有这个模块

解决方案:
1 把模块文件和当前执行的python文件放到同一个文件夹下后,在执行
2 把模块文件的所在绝对路径添加到操作系统的环境变量中
3 或者
import sys
sys.path.append("你的模块文件所在的绝对目录")
import 你自己写的包名/模块名 # 注意这个要写在后面才能导入成功
4.把模块放在 ..Python36\Lib\site-packages 这个文件夹下面就可以直接 import 模块名

# 这个是用于包和模块的引用才用到,不要和 执行文件  py -3.6 D:\\test.py 搞混了,执行文件还是要写路径的
# 一般是用于文件里面引入另一个文件

包和模块的区别:
1 模块是个python文件
2 包是个目录,目录里面必须有__init__.py文件
3 包下面可以有子包和模块
# 包的查找方式和模块是一样的。
在__init__.py文件中写入的内容
__all__ = [a] # 允许导入的模块
 
globals()和locals()函数
  根据调用地方的不同,globals()和locals()函数可被用来返回全局和局部命名空间里的名字。
  如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名。
  如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字。
  两个函数的返回类型都是字典。所以名字们能用keys()函数摘取。
def foo():
    print("calling foo()...")
    aStr = "bar"
    anInt = 23
    print("foo()‘s globals:", globals().keys())
    print("foo()‘s locals:", locals().keys())

 
print("__main__‘s globals:", globals().keys())
print("__main__‘s locals:", locals().keys())
foo()

结果:

__main__s globals: dict_keys([__name__, __doc__, __package__, __loader__, __spec__, __annotations__, __builtins__, __file__, __cached__, foo])
__main__s locals: dict_keys([__name__, __doc__, __package__, __loader__, __spec__, __annotations__, __builtins__, __file__, __cached__, foo])
calling foo()...
foo()s globals: dict_keys([__name__, __doc__, __package__, __loader__, __spec__, __annotations__, __builtins__, __file__, __cached__, foo])
foo()s locals: dict_keys([aStr, anInt])

 

  包是一个分层的文件目录结构,它定义了一个由模块及子包和子包下的子包等组成的Python的应用环境。
  包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹被当作包使用时,文件夹中需要包含__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。
  __init__.py的内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,__all__是在frompackage-name import *这语句使用的,表示全部导出定义过的模块。如果希望调用同一个package中的module,则直接import即可。
 
包的相对路径
  如果是子包内的引用,可以按相对位置引入子模块 以 b 模块为例,可以引用如下:
  1 、from . import a # 同级目录 导入 a
  2 、from .. import test2 # 上级目录 导入 test2
  3 、from ..test2 import d # 上级目录的test2模块下 导入 d
if __name__ == "__main__":
    print(100)
    

# 只有当执行文件的时候才会执行 if 下面的语句

py -3.6 a.py

# 当作模块导入的时候不会执行

import a 

 

模块和包

原文:https://www.cnblogs.com/su-sir/p/12513385.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!