博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模块与包
阅读量:5051 次
发布时间:2019-06-12

本文共 1354 字,大约阅读时间需要 4 分钟。

 

模块(一个py文件):

导入一个模块时会把这个模块从头到尾执行一遍。为了防止导入模块时执行模块中的执行语句可以在编写模块时候将执行语句写在"if __name__ == '__main__':",这样被别人当模块导入时因为不满足if条件执行语句就

不会被执行了(__name__是模块自带的一个变量,当自己执行相应模块时__name__的值是"__main__",当被其他模块导入时该变量为该模块的名字。)。
导入一个模块时会现在当前的目录搜索该模块文件,当前目录没有该模块文件时再去系统目录搜索(通过sys模块中的sys.path可以看到搜索的什么系统目录,并且依次从前往后搜索)。
import os as bieming =========>给导入的模块起个别名"bieming"

模块的重新导入:
已经导入一个模块后又对该模块进行了修改,要想让新修改的部分生效需要重新加载该模块。重新加载该模块的方式为:
from tmp import *
reload(test)

一个模块中可以包含一个__all__变量,此变量为一个列表,它限制了别人导入该模块时能导入的内容。
例:
模块1:
__all__ = ['test1'] =======> 利用__all__限制此模块被别人导入时能导入的内容
def test1():
  print('test1')
def test2():
  print('test2')

模块2:

from 模块1 import * =======> 此时只能导入test1.

 

 

包(包含若干py文件的文件夹)(注意:以后导包的时候统一使用from方式,以免出现混淆):

from 包 import * :通过*号这种形式导入包中模块时默认是不能导入的。

要想这样导入必须在包内创建一个__init__文件,然后在以下方法中挑一个进行设置后方能导入:
1、在包中__init__文件中加入__all__参数告诉程序哪些包能导入。
2、在包中通过若干'from . import 模块'代码告诉程序哪些模块可以导入

注意:

1、当导入一个包时,会将这个包中的__init__文件从头到尾执行一遍(例如:在__init__文件中含有‘print(123)’,则在导包的时候会打印‘123’)。
2、当使用‘from 包 import 模块’这种精确导入方式时包内可以不包含__init__文件

 

 

 

模块发布:

在包当前路径新建文件setup.py。setup.py文件包含:
"
from distutils.core import setup
setup(name='laowang',version='1.0',description='miaoshu',author='laowang',py_modules=['包名.模块名'])
"
python3 setup.py build ==========>构建模块
python3 setup.py sdist ==========>生成发布压缩包

解压压缩包后执行:

python3 setup.py install

 

转载于:https://www.cnblogs.com/baihualin/p/10345208.html

你可能感兴趣的文章
“富豪相亲大会”究竟迷失了什么?
查看>>
控制文件的备份与恢复
查看>>
返回代码hdu 2054 A==B?
查看>>
Flink独立集群1
查看>>
iOS 8 地图
查看>>
20165235 第八周课下补做
查看>>
[leetcode] 1. Two Sum
查看>>
iOS 日常工作之常用宏定义大全
查看>>
PHP的SQL注入技术实现以及预防措施
查看>>
MVC Razor
查看>>
软件目录结构规范
查看>>
Windbg调试Sql Server 进程
查看>>
linux调度器系列
查看>>
mysqladmin
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
SVN服务器搭建和使用(三)(转载)
查看>>
Android 自定义View (三) 圆环交替 等待效果
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
HEVC播放器出炉,迅雷看看支持H.265
查看>>
[置顶] Android仿人人客户端(v5.7.1)——人人授权访问界面
查看>>