模块概念与使用及注意事项

1 模块概念

模块就是包含了python代码的文本文件,通俗讲,一个py文件就是一个模块

 

2 使用模块(import)

 

比如,我们单独编写了一个模块,命名为mymodule.py,在该模块中我们定义一些函数和类,我们如何在test.py中使用呢?答案是使用import.

mymodule.py内容如下:

#Person类

class Person(object):

    def __init__(self,name,age):

        self.name = name

        self.age = age

 

    def showPerson(self):

        print("Name:%s Age:%d"%(self.name,self.age))

 

#函数

def myAdd(a,b):

    ret = a + b

    return ret

test.py如下:

#引入mymodule模块

import mymodule

 

#使用mymodule模块中的myAdd函数

#注意在使用mymodule中的符号的时候,必须指定模块名.符号的方式

ret = mymodule.myAdd(10,20)

print("ret = %d"%ret)

 

#使用mymodule模块中的Person类

person= mymodule.Person("Edward",22)

person.showPerson()

 

不仅可以引入函数,还可以引入一些全局变量、类等.

为什么必须加上模块名调用呢?

因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名.

3 使用模块(from...import...)

有时候我们只需要用到模块中的某个函数,只需要引入该函数即可.通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函数。如果想一次性引入math中所有的东西,还可以通过from math import *来实现

#引入mymodule模块中的myAdd函数

from mymodule import  myAdd

 

#使用mymodule模块中的myAdd函数

#注意不可添加模块名

ret = myAdd(10,20)

print("ret = %d"%ret)

 

#使用mymodule模块中的Person类出错

#person= mymodule.Person("Edward",22)

#person.showPerson()

使用import xxx import *

#引入mymodule模块中的所有符号

from mymodule import *

 

#使用mymodule模块中的myAdd函数

#注意不可添加模块名

ret = myAdd(10,20)

print("ret = %d"%ret)

 

#使用mymodule模块中的Person类出错

person= Person("Edward",22)

person.showPerson()

这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。

 

4 使用模块(import...as...)

将引入的模块重新命名:

#引入mymodule并重新命名为md

#此时再使用mymodule就会未定义

import mymodule as md

 

#使用mymodule模块中的myAdd函数

#注意不可添加模块名

ret = md.myAdd(10,20)

print("ret = %d"%ret)

 

#使用mymodule模块中的Person类出错

person= md.Person("Edward",22)

 

person.showPerson()

 

5 定位模块

当你导入一个模块,Python解析器对模块位置的搜索顺序是:

  • 当前目录。
  • 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
  • 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
  • 模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
  •  

6 __name__变量

#引入mymodule并重新命名为md

#此时再使用mymodule就会未定义

import mymodule as md

 

#使用mymodule模块中的myAdd函数

#注意不可添加模块名

ret = md.myAdd(10,20)

print("ret = %d"%ret)

 

#使用mymodule模块中的Person类出错

person= md.Person("Edward",22)

person.showPerson()

 

当我们执行此py文件的时候,由于此py文件包含了mymodule.py,导致mymodule中的测试程序也被执行了.

可以根据__name__变量的结果能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行测试代码.

7 模块中的__all__

 

如果一个文件中有__all__变量,当使用fromxxx import *时导入的时候,只能导入__all__中的符号,其余符号导入失败.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

魔兽世界转服务器显示完成,魔兽世界怀旧服:TAQ变简单了,为什么还是出现了AFK大潮?...

魔兽世界怀旧服在开服一年多以后,即将在2020年12月3日,迎来经典60年代的收官副本-第六阶段纳克萨玛斯大墓地(NAXX)。在差不多的时间段内,魔兽世界正式服也将上线全新的9.0版本-暗影国度。囧王者估计,在即将到来的12月份里面&#…

LeetCode 317. 离建筑物最近的距离(逆向BFS)*

文章目录1. 题目2. 解题2.1 正常思维BFS2.2 逆向思考BFS1. 题目 你是个房地产开发商,想要选择一片空地 建一栋大楼。 你想把这栋大楼够造在一个距离周边设施都比较方便的地方,通过调研,你希望从它出发能在 最短的距离和 内抵达周边全部的建筑…

Ubuntu 运行Asp.net MVC3

1 先通过SVN获取最新版的Asp.net MVC3代码 2 用Monodevelop打开后,进入Web项目的引用,删除标了红色的引用 3 添加引用“System.Web.Mvc.dll”和“System.Web.WebPages.Deployment.dll” 4 重新编译,然后删除Web项目的bin下的“Microsoft.Web.Infrastruct…

LeetCode 431. 将 N 叉树编码为二叉树(递归/层序)

文章目录1. 题目2. 解题2.1 递归2.2 BFS1. 题目 设计一个算法,可以将 N 叉树编码为二叉树,并能将该二叉树解码为原 N 叉树。 一个 N 叉树是指每个节点都有不超过 N 个孩子节点的有根树。 类似地,一个二叉树是指每个节点都有不超过 2 个孩子节…

包概念与__init__注意事项

1.包的概念 为了组织好模块,将多个模块分为一个包。包是python模块文件所在的目录,且该目录下必须存在__init__.py文件。常见的包结构如下: package_a ├── __init__.py ├── module_a1.py └── module_a2.py package_b ├── _…

服务器上有涉密文件,涉密文件保密管理规定

为贯彻落实国家和省、市、区保密局对涉密文件资料管理工作的要求,进一步做好我办涉密文件资料管理,特制定本规定。一、涉密文件的拟制、印刷、传递、承办、借阅、保管、归档、移交和销毁,必须严格履行审批、清点、登记、签收等手续。二、涉密…

服务器文件同步管理

服务器文件同步管理 原文 http://www.cnblogs.com/yanxiaodi/archive/2011/03/21/2296462.html 前几天有台服务器电源坏了,还好数据没有丢。因此必须做好服务器文件内容的备份。服务器主要是用来提供网站服务,带着一个数据库,数据库可以用分发…

LeetCode 774. 最小化去加油站的最大距离(极小极大化 二分查找)

文章目录1. 题目2. 解题1. 题目 假设我们在一条水平数轴上,列表 stations 来表示各个加油站的位置,加油站分别在 stations[0], stations[1], ..., stations[N-1] 的位置上,其中 N stations.length。 现在我们希望增加 K 个新的加油站&…

修改软件服务器json返回数据格式,AngularJS处理服务器端返回的JSON数据的格式问题...

用ng的$http服务发起ajax请求,php返回的JSON数据格式要正确!一开始我的php页面是这样返回数据的:if($result){$oid mysqli_insert_id($conn);echo "{msg:succ,oid:$oid}";}else{echo "{msg:error}";}然后总是报错&#…

python编码规范与命名规范

编码规范 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 每行不超过80个字符,Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号.例如: x (This will build a …

Linux学习笔记(4) - 文件系统

4.1 什么是文件系统 文件系统表示存储在计算机上的文件和目录的数据结构,也可以用于存储文件的分区或磁盘,操作系统通过文件系统可以方便地查询和访问其中所包含的磁盘块。在Linux系统中,每个分区都是一个文件系统,都有自己的目录…

LeetCode 644. 最大平均子段和 II(二分查找)*

文章目录1. 题目2. 解题2.1 暴力超时2.2 二分查找1. 题目 给定一个包含 n 个整数的数组,找到最大平均值的连续子序列,且长度大于等于 k。并输出这个最大平均值。 样例 1: 输入: [1,12,-5,-6,50,3], k 4 输出: 12.75 解释: 当长度为 5 的时候&#xff…

python基础学习总结

1.python历史 Guido 89年圣诞开写 91年编辑器问世 优点与缺点 优点:简单、易学、免费开源、高层语言 可移植、解释、面向对象、扩展 丰富库、规范代码 缺点:运行速度、国内市场小、中文资料少 2.模式:文本、交互、集成开发 程序原理&am…

学生管理系统代码赏析

# 添加、删除、显示学生信息(保存) # 保存所有学生信息 students {} # 创建 ID 1000 # 控制系统是否退出 flag True # 从文件中读取学生信息 def load_students(): # 加载学生信息从文件中 stu_file open("students.txt",&quo…

LeetCode 527. 单词缩写(Trie树)

文章目录1. 题目2. 解题1. 题目 给定一个由n个不重复非空字符串组成的数组,你需要按照以下规则为每个单词生成最小的缩写。 初始缩写由起始字母省略字母的数量结尾字母组成。若存在冲突,亦即多于一个单词有同样的缩写,则使用更长的前缀代替…

POJ 1523 SPF (割点 点双连通分量)

题意:求出割点以及除去割点后的连通分量的数量(附带求出了点双连通分量(块)) [求割点]对图深度优先搜索,定义DFS(u)为u在搜索树(以下简称为树)中被遍历到的次序号。定义Low(u)为u或u的子树中能通过非父子边追溯到的最早的节点&…

质数——python代码赏析

一、求(2—您输入数字)之间的质数: num int(input("请输入您要输入的数字:"))a[] if num 2:a.append(2) elif num >2:for i in range(2,num1):for j in range(2,i):if i %j 0:breakelse:a.append(i)print(a) 二、求2-100之间…

LeetCode 1199. 建造街区的最短时间(优先队列贪心)

文章目录1. 题目2. 解题1. 题目 你是个城市规划工作者,手里负责管辖一系列的街区。在这个街区列表中 blocks[i] t 意味着第 i 个街区需要 t 个单位的时间来建造。 由于一个街区只能由一个工人来完成建造。 所以,一个工人要么需要再召唤一个工人&…

用Android-X86和VirtualBox打造高性能Android开发环境

现在已经采用genymotion替换下面的方法 https://www.genymotion.com转载于:https://www.cnblogs.com/sunzhuo1228/archive/2013/05/30/3109445.html