Day15:Python 【模块】及__name__:
什么是模块:
在Python中,随着这代码的撰写,代码越来越长,所以产生了,模块这个概念,模块是什么?模块就是一个.py文件,在撰写代码时,我们把不同的功能的代码封装到一个.py文件里,用得时候导入 即可。
模块有什么好处:
代码的可维护性:当你写好了一个程序的功能后,封装到一个.Py文件中,如果需要使用的时候,别人或者自己导入进来就好。
模块的分类:
- python标准库 【python内置的模块】
- 第三方模块 【从网上下载的别人的写好的模块】
- 应用程序自定义模块【自己定义的模块】
导入模块及模块使用的方法:
1、import 语句
import os
#导出os模块
#一般用此语句可以导入系统内置模块
#一般也可以导入当前目录下的模块
备注:1、pythhon 解释器是这么找到os.py文件呢 ?解释器会自动搜索sys.path (系统变量中)
2、导入多个模块时可以 用【,】分割 例: import os,re
导入模块后的使用方法:
例:现在有2个py文件,一个test.py 需要yxg.py这个模块导入
yxg.py的内容是:
def cal(x,y):
return x+y
3 print("hello word")
4 def aggregate(x,y)
5 return x*y
那test.py里面的导入方式:模块名.需要导入的模块。 注:导入模块就是执行所导入模块的里面的代码
import yxg
print(yxg.cal(2,2))#用.的方式执行函数
#输出
#hello word
#
如果不想用"."的方式来运行模块里面的方法还有另外一种也是是 【from…import 语句】
from yxg import cal
print(cal(2,2))#用.的方式执行函数
#输出
#hello word
#
如果想一次性导入模块所有里面的方法,也可以用【From…import* 语句】
注:一般不建议用这种方法,因为有的方法你用不上,你导入了也没用
from yxg import *
print(cal(5,2))
print(aggregate(5,2))
#输出
#hello word
#
#
不同路径下的模块调用
当使用import语句导入模块时,默认情况下,会按照以下顺序进行查找。
(1)当前目录(既执行的python脚本文件所在的目录)下查找
(2)到python PATH(环境变量)下的每个没录下查找
(3)到python的默认安装目录下查找
以上各个目录的具体位置保存在标准模块sys的sys.path变量中,我们先了解下,python导入模块的时候,是用sys模块怎么找所用的模块呢?
注意:在导入模块时,模块名是区分大小写的。
import sys
print(sys.path)
"""
输出:
['C:\\Users\\Administrator\\Desktop\\untitled\\duoduo',
注意:↑上面这个路径就是你执行test.py的路径
'C:\\Users\\Administrator\\Desktop\\untitled',
'C:\\python3\\python37.zip',
'C:\\python3\\DLLs',
'C:\\python3\\lib',
'C:\\python3', ]
"""
#这就是python寻找模块的顺序(不同计算机的python安装不一样,路径不一样)
1、yxg.py现在在my_module这个包下面,那test怎么调用yxg.py呢
from my_module import yxg
print(yxg.cal(5,2))
print(yxg.aggregate(5,2))
2、查看下面的目录结构,根据需求怎么撰写代码?
注:在开发软件的时候,一般我们都会设置一个程序入口的执行文件,还有就是一个逻辑的文件。然后各个功能的.py文件放置在不同的文件夹里面。现在我们要用。test.py当这个入口文件,test.py调用main.py。然后main.py当主逻辑文件。main.py调用yxg.里面的模块
test文件的写法
from my_module import main
main.example()
#调用main模块里面example函数
main 文件的写法
from my_module import yxg
#为什么要这么写呢??
#因为我们执行的test.py文件,python寻找模块的时候找到的执行文件的路径
#而不是同级目录的路径相对于test.py文件,那yxg.pyj就在my_moule下
#如果直接写成import yxg 那肯定是错误的
def example():
print(yxg.cal(3,4))
3、多层包的模块导入:如果我想用test导入yxg这个模块呢?
from db.db1 import yxg
print(yxg.cal(3,5))
from db.db1.yxg import cal
print(cal(3,6))
临时修改环境变量
test,调用yxg
# from bin import yxg
#如果这样调用肯定是错误的,因为你执行文件在my_module
# from duoduo.bin import yxg
#这样你在你得pycharm 是可以运行,但是在解释器里面是报错
#我们需要导入下sys模块,来修改下环境变量,然后在导入模块就可以了
# import sys
# sys.path.append(r"C:\Users\Administrator\Desktop\untitled\duoduo")
# from bin import yxg
#这样虽然可以了,但是这个把路径写死了。如果拷贝到别人机器上就不可以了。
import sys,os
print(__file__)
#输出C:/Users/Administrator/Desktop/untitled/duoduo/my_module/test.py
#其实是找到的是test.py 上面那个路径是pycharm自己加上去的
print(os.path.dirname(os.path.dirname(__file__)))
#这样就输输出:duoduo这一级的目录了
#C:/Users/Administrator/Desktop/untitled/duoduo
#实际工作总,视情况而定吧
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
#把这个路径添加过去,就算你把【duoduo】这个文件夹拷贝到别的电脑也可以使用
#sys.path.append是临时修改系统变量,如果想永久修改就在操作系统里面修改
from bin import yxg
这个代码是干嘛的?if __name__ = "__main__":
经常有人在代码里面 最后面写一个 if __name__ = "__main__":
这个是测试代码时使用,例如
print(__name__)
#输出:__main__
from db.db1 import yxg#导入模块
#当在yxg这个py文件里面写print(__name__)
#输出db.db1.yxg(打印执行文件的路径)
#那如果在所导入的模块里面写if __name__ = "__main__":
# 然后下面写你的代码,模块是导入不进来你下面的东西的,因为你得条件不成立
Day15:Python 【模块】及__name__:的更多相关文章
- Python模块01/自定义模块/time模块/datetime模块/random模块
Python模块01/自定义模块/time模块/datetime模块/random模块 内容大纲 1.自定义模块 2.time模块 3.datetime模块 4.random模块 1.自定义模块 1. ...
- 使用C/C++写Python模块
最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...
- python中if __name__ == '__main__': 的解析
当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一 ...
- Python基础篇【第5篇】: Python模块基础(一)
模块 简介 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就 ...
- python模块使用案例
python模块使用案例 一.使用MySQLdb模块代码示例: # 导入 MySQLdb模块 import MySQLdb # 和服务器建立链接,host是服务器ip,我的MySQL数据库搭建在本机, ...
- Python模块学习
6. Modules If you quit from the Python interpreter and enter it again, the definitions you have made ...
- python中if __name__ == '__main__'
python 中__name__ = '__main__' 的作用,到底干嘛的? 有句话经典的概括了这段代码的意义: “Make a script both importable and execut ...
- python 解析XML python模块xml.dom解析xml实例代码
分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...
- Python中 if __name__ == '__main__': 详解
一个python文件就可以看作是一个python的模块,这个python模块(.py文件)有两种使用方式:直接运行和作为模块被其他模块调用. __name__:每一个模块都有一个内置属性__name_ ...
- python模块之socket
43.python模块之socket: Python在网络通讯方面功能强大,学习一下Socket通讯的基本方式 UDP通讯: Server: import socket port=8081 ...
随机推荐
- 使用HBuilder编辑器进行真机调试运行时提示Waiting for debugger!
在使用HBuilder编辑器创建mui项目进行真机调试的时候,手机总是提示Waiting for debugger! 现在终于找到了解决办法: 手机 设置 -> 开发人员选项 -> USB ...
- SP7258 SUBLEX - Lexicographical Substring Search(后缀自动机)
传送门 解题思路 首先建\(sam\),然后在拓扑序上\(dp\)一下,把每个点的路径数算出来,然后统计答案时就在自动机上\(dfs\)一下,仿照平衡树那样找第\(k\)小. 代码 #include& ...
- Codeforces gym102222 B.Rolling The Polygon 凸包/余弦定理
题意: 有一个不保证凸的多边形,让你滚一圈,计算某点滚出的轨迹多长. 题解: 求出凸包后,以每个点为转轴,转轴到定点的距离为半径,用余弦定理计算圆心角,计算弧长. #include<iostre ...
- 2019 wannafly winter camp day1-4代码库
目录 day1 F div1 爬爬爬山 (最短路) B div2 吃豆豆 (dp) J div2 夺宝奇兵(暴力) J div1 夺宝奇兵 (权值线段树) C div1 拆拆拆数 E div1 流流流 ...
- linux:lrzsz安装
Linux中的lrzsc是linux里可代替ftp上传和下载的程序. yum install lrzsc 没有可用软件包 lrzsc. 这时使用 -y即可安装 centos安装:yum -y inst ...
- Sleepy与DbgHlp库学习
参考:http://msdn.microsoft.com/en-us/library/windows/desktop/ms679291(v=vs.85).aspx http://msdn.micros ...
- Codeforces 1169A Circle Metro
题目链接:codeforces.com/contest/1169/problem/A 题意:有俩个地铁,一个从 1 → 2 → …→ n → 1→ 2 →…, 一个 从 n → n-1 →…→ 1 → ...
- Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本的开发环境(亲测)
写这篇博客时2D游戏引擎Cocos2d-x的最新版本为2.1.4,记得很久以前使用博客园博主子龙山人的一篇博文<Cocos2d-x win7+vs2010配置图文详解(亲测)>成功配置 ...
- Ubuntu14.04搭建JSP与Servlet开发环境及其测试详解
一,搭建JDK开发环境 1,在Java官网下载Jdk软件包,我的系统是64位Ubuntu14.04,所以选择jdk-8u25-linux-x64.tar.gz. 2,解压Jdk软件包 tar xvzf ...
- 结合Poi实现可读取Excel的文件选择对话框
第一步:ApachePoi的jar包导全,不全会出现异常. 第二步:写就完事了:此例为读取特定模板的excel,仅供参考,根据实际需求改写. package 自建包; import java.awt. ...