Python 基金会 —— 模块和包简介
1、模块的作用
一个Python模块事实上就是一个脚本文件,具有后缀“.py”,比如 hello.py 就是一个模块文件名称。和普通文件一样能够被永久保存在本地存储磁盘中。
以下是hello.py模块的内容。当中有一个变量 a,一个函数 fun()。和一个打印语句。
# -*- coding:UTF-8 -*-
#! /usr/bin/python3
a = [1, 2, 3]
def fun():
return 'fun()'
print('hello', fun(), a)
wuhui@wuhui-H55M-S2H:~/Desktop$ python3 hello.py
hello fun() [1, 2, 3]
>>> import hello
>>> hello.a
[1, 2, 3]
>>> hello.fun()
'fun()'
使用"import module"导入模块方式时,被导入模块不能带后缀;使用导入模块中定义的变量、函数时。必须使用模块名作为前缀,如"hello.a"而不是直接使用"a"。假设感觉这样麻烦的。能够使用以下的方式。将模块中所有的定义信息所有导入。
>>> from hello import *
>>> a
[1, 2, 3]
>>> fun()
'fun()'
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> import hello
>>> dir(hello)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'fun']
hello
"A.B"的方式来引用模块。其结构类似与树状,非常清楚。以下是一个包的结构:
PkgA/ # 顶层包
__init__.py # 初始化 PkgA
PkgB/ # PkgA 的子包 PkgB
__init__.py # 初始化 PkgB
module1.py
module2.py
PkgC/ # PkgA 的子包 PkgC
__init__.py # 初始化 PkgC
module1.py
module2.py
def say():
print(’hello')
# 方式一:导入函数所在模块
>>> import PkgA.PkgB.module1
>>> PkgA.PkgB.module1.say()
hello
# 方式二:从包 PkgA.PkgB 中导入函数所在模块
>>> from PkgA.PkgB import module1
>>> module1.say()
hello
# 方式三:从模块中导入函数
>>> from PkgA.PkgB.module1 import say
>>> say()
hello
>>> from PkgA.PkgB import module1
>>> module1.say()
hello
>>> def say():
... print('world')
...
>>> say()
world
>>> module1.say()
hello
__all__。当导入当前包以下的模块或其它包时,首先当前包中的__init__.py 中的可运行代码会被运行,紧接着导入的模块中的可运行代码也会被运行。因为包或模块仅仅会被导入一次(即使再次使用import导入也无效果),因此这些可运行代码仅仅会被运行一次。
import *"时,仅仅导入变量__all__中的定义的模块,而其它模块则不会被导入。这样能够防止"import *"的将全部模块导入导致载入缓慢和命名空间的污染。拿前面的代码举个样例:
# __init__.py中没有定义__all__时
from PkgA.PkgB import * # 只导入包 PkgB
# __init__.py 中定义 __all__ = ['module1']
from PkgA.PkgB import * # 只导入PkgB包中的模块 module1,而模块 module2则不会被导入
import module1" 外,还能够使用相对路径,"."表示当前包。“..”表示上一级包。
拿前面的代码举个样例。假设想在 PkgA.PkgC.module1中使用 PkgA.PkgB.module2中的函数 say(),能够这么写:
# 这里的"..PkgB"就相当于"PkgA.PkgB"
[1] The Python Tutorial https://docs.python.org/3/tutorial/modules.htm
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Python 基金会 —— 模块和包简介的更多相关文章
- Python之模块和包导入
Python之模块和包导入 模块导入: 1.创建名称空间,用来存放模块XX.py中定义的名字 2.基于创建的名称空间来执行XX.py. 3.创建名字XX.py指向该名称空间,XX.名字的操作,都是以X ...
- 一文搞懂 Python 的模块和包,在实战中的最佳实践
最近公司有个项目,我需要写个小爬虫,将爬取到的数据进行统计分析.首先确定用 Python 写,其次不想用 Scrapy,因为要爬取的数据量和频率都不高,没必要上爬虫框架.于是,就自己搭了一个项目,通过 ...
- Python之模块和包学习
模块简介 python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲突的问题.模块我们就可以理解为lib库,如果需要使用某个模块中的函数或对象 ...
- python 深入模块和包
模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...
- (Python )模块、包
本节开始学习模块的相关知识,主要包括模块的编译,模块的搜索路径.包等知识 1.模块 如果我们直接在解释器中编写python,当我们关掉解释器后,再进去.我们之前编写的代码都丢失了.因此,我们需要将我们 ...
- python基础-------模块与包(一)
模块与包 Python中的py文件我们拿来调用的为之模块:主要有内置模块(Python解释器自带),第三方模块(别的开发者开发的),自定义模块. 目前我们学习的是内置模块与第三方模块. 通过impor ...
- python中模块,包,库的概念
模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...
- python的模块与包的导入
类似于C语言的包含头文件去引用其他文件的函数,python也有类似的机制,常用的引入方法有以下 import 模块名 #模块名就是py文件名 #使用这种方法以后调用函数的时候要使用模块名.函数名()这 ...
- day21 python之模块和包
一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...
随机推荐
- SE 2014年5月22日
一. 用自己的理解描述 tunnel接口状态 up和down的情况都有哪些 Tunnel接口的状态UP:隧道的目标有可达路由. Tunnel接口的状态Down:隧道的目标路由不可达. 如图配置实验 ...
- SE 2014年4月16日
一. 描述BGP路由协议中 BGP路由携带 AS-PATH/ next-hop / ORIGIN / local-preference 属性的特点! BGP协议中的AS-PATH是AS列表,用来 ...
- Django写的投票系统2(转)
在上一篇中 django实例:创建你的第一个应用投票系统(一) 已经介绍基本的功能,并已经启动服务了.这一节介绍数据库相关的东东. 首页打开mysite/settings.py配置文件, 设置数据库打 ...
- IIS总提示输入用户名和密码
解决办法: 第一步,在"运行"中输入"gpedit.msc"调出组策略设置. 找到计算机配置-管理模块-windows 组件-internet控制面板-安全页- ...
- Redis设计与实现读书笔记——双链表
前言 首先,贴一下参考链接: http://www.redisbook.com/en/latest/internal-datastruct/adlist.html, 另外真赞文章的作者,一个90后的小 ...
- 网络安全之IP伪造
眼下非常多站点的涉及存在一些安全漏洞,黑客easy使用ip伪造.session劫持.xss攻击.session注入等手段危害站点安全.在纪录片<互联网之子>(建议搞IT的都要看下)中.亚伦 ...
- onmouseover 执行 ToolTip 控件
Tooltip控件是一个简单,但非常有用的控件.它能够为我们的软件提供非常漂亮的提示信息,提高软件的可用性,给用户比较好的体验.假设现在有两个按钮,一个用来预览吊线世系图,一个用来预览行转.为了保持按 ...
- 阐述php(四) 流量控制
一个.选择结构 1. 单路分支 <? php if(条件){ 运行一条语句; } ?> 2. 双路分支 <?php if(条件) 运行一条语句; }else 运行一条语句; } ?& ...
- windows phone (25) Canvas元素B
原文:windows phone (25) Canvas元素B ZIndex 这也是一个附加属性,表示canvas的children集合内的子元素的显示顺序,在canvas中的元素默认情况下是后面的 ...
- Java4Android之BlockingQueue
在研究Smack的源码的时候,我对它的连接Connection以及派生类XMPPConnection的关注是最多的,由于一个即时通信程序,它的网络模块必是它的核心. 而我非常在乎它是怎样实现的. 在收 ...