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编 ...
随机推荐
- poj2763(树链剖分)
题目链接:http://poj.org/problem?id=2763 题意:定一棵带边权的树,要求支持两种操作:1)询问树中某两点间的距离. 2)修改某条边的权值. 分析:树链剖分,边权修改,路径求 ...
- C++设计模式之建造者模式(三)
4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外.还能够通过Director类来更加精细地控制产品的创建过程.比如添加一类称之为钩子方法(HookMethod)的特殊方法来控制是 ...
- C#之网络
首先很不好意思,前段时间把评论的功能给关掉啦,BUT NOW 此功能以开放,欢迎小伙伴们拍砖. 1网络 在网络环境下,我们最感兴趣的两个名称空间是System.Net和System.Net.Socke ...
- U10vim程序编辑器
vim需要多加练习. 1.你可以将vim视为vi的高级版本.vi分成三种模式:一般模式,编辑模式和命令行模式. 一般模式:以vi打开一个文件就直接进入一般模式了(这也是默认的模式).在这个模式中,你可 ...
- SQLserver2012 tcp/ip 1433port问题解决方法
非常多MSSQL安装完毕后,调用1433(默认port)是失败的,这边具体介绍下解决方法. 一..我们须要在电脑上开启telnet服务,定位问题须要.在cmd下使用telnet,假设报命令不存在说明没 ...
- dede 首页或列表页调用文章内容页body内容
在使用dede过程,有的朋友会调调出文章的列表的内容出来,怎么调呢?当然是用dede的传参的数据查询语句了,方法如下: {dede:arclist flag=h typeid=2 row=1 titl ...
- STL源代码分析——STL算法remove删除算法
前言 因为在前文的<STL算法剖析>中,源代码剖析许多.不方便学习,也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的remove删除算法. ...
- 解决vmware卡的要死
如题: 一般而言虚拟机不会卡的.CPU跟随你的操作而增减,内存设置vmware的推荐值就好.遇到卡的情况,检查一下如下情况. 两个方法: 1>内存分配最好是1G,512少了点 2>虚拟机的 ...
- D3js-堆栈图
效果图: 源码: <%@ page language="java" import="java.util.*" pageEncoding="UTF ...
- Apache介绍
怎样使用Apache许可证 若用户须要应用Apache许可证,请将下面演示样例使用适当的注视方法包括在作品源文件里,将括号"[]"中的字段以用户自身的区分信息来替换 ...