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编 ...
随机推荐
- 西南民大oj(递推)
我的数学不可能那么难推 时间限制(普通/Java) : 3000 MS/ 9000 MS 运行内存限制 : 65536 KByte总提交 : 49 测试通过 : ...
- codechef Sums in a Triangle题解
Let's consider a triangle of numbers in which a number appears in the first line, two numbers appear ...
- Git管理工具对照(GitBash、EGit、SourceTree)
Git管理工具对照(GitBash.EGit.SourceTree) GitBash是採用命令行的方式对版本号进行管理,功能最为灵活强大,可是由于须要手动输入希望改动的文件名称,所以相对繁琐. EGi ...
- 无状态会话bean(3)---远程业务接口(没有排版)
迄今为止,我们仅仅讨论了使用一个本地业务接口的会话bean.在这样的情况下.本地意味着仅仅能由执行在同一个应用程序server实例的JavaEE组件声明会话bean的依赖性.比如.远程client不可 ...
- Galaxy (hdu 5073 数学)
Galaxy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total S ...
- Java容器的概要
[Java流输入/输出原理] 在Jaav程序.对于输入数据/输出操作"流"(stream)时尚:J2SDK它提供了多种 各种各样的"流"类,用于获得不同类型的数 ...
- 基础知识(1)- Java程序设计概述
1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1 简单性 1.2.2 面向对象 1.2.3 网络技能 1.2.4 健壮性 1.2.5 安全性 1.2.6 体系 ...
- oracle 关于日期格式转换与使用
在oracle中我们经常会和日期打交道,在做报表的时候经常会用日报,周报,月报之类的条件进行分组: 我写了些例子来启发下大脑 select Sysdate from dual select to_ch ...
- svn创建并应用补丁
有时,我们不能提交临时局部变化,而我们需要回滚到svn最新的版本号.然,这些变化,我们要保持.提交或发送给其他同事的未来review. 怎么做?非常easy,只需要两个步骤: (1)创建一个补丁文件并 ...
- win8.1 64位环境建设android开发环境
1.下载JDK,http://www.oracle.com/technetwork/java/javase/downloads/index.html,选择版本号 2.安装刚刚下载的JDK 3.环境变量 ...