模块

  一个py文件,就是一个模块,一个模块是一些相似功能的集合体。

# echo.py  定义一个模块。 下文都用这个
print('from echo 模块')
name = 'echo'
def func1():
print('来自echo模块', 111)
def func2():
print('来自echo模块', 222)
func1()
def func3():
global name
name = 'iris'
print(name)

作用:1、减少重复代码,提高开发效率。

   2、使得你的代码的组织结构更清晰,有条理性。

模块的划分:

  1、内置模块。 time   os     sys

  2、扩展模块(第三方模块)

    这个需要下载安装pip3 ,pip安装的模块,第三方模块

    beautiful soup     request   gevent 等等

    itchat  与微信相关的模块

  3、自定义模块

    自己写的模块

模块的使用:

  引用模块相当于执行这个模块, 重复导入会直接引用内存中加载好的结果

import echo   #  pring: from echo 模块
import echo # 后续引用不会再打印 from echo 模块
import echo

模块被执行发生了三件事:

1、创建一个以被导入模块的名字命名的名称空间

2、自动执行模块中的代码(将模块中的所有内容加载至内存)

3、要想执行模块中的代码,必须通过模块名. 的方式执行获取

import echo
print(echo.name) # echo

注意:每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突

name = 'alex'
import echo
print(name) # alex
print(echo.name) # echo

模块改名

  1、模块名过长,引用不方便,给模块改名,简化引用

import time as t  #  改time为 t

  2、优化代码

#mysql.py
def sqlparse():
print('from mysql sqlparse')
#oracle.py
def sqlparse():
print('from oracle sqlparse') #test.py
db_type=input('>>: ')
if db_type == 'mysql':
import mysql as db
elif db_type == 'oracle':
import oracle as db db.sqlparse()

引用多个模块

# 建议
import time
import sys
import os # 不建议
import tiem, sys, os

from ...... import.....

from echo import  name , read()

  1、执行一遍echo的所有代码,加载到内存

  2、将name,read()实际引用过来的变量函数在本文件复制一份,可以通过globals()查看

  好处:使用简单

  坏处:容易与本文件的变量,函数名等发生冲突

其他应用:

  起别名:

    from echo import name as n

    prrint(n)

  导入多个:

from  echo  import name
from echo import read() # 也可以
from echo import name, read()

  导入所有:

    from  echo import *

    一般不用

    如果使用只有两点:

      1、将导入的模块中的所有的代码全部清除的前提下,可以使用*

      2、只使用一部分

__all__=['name', 'read1'] #这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字

py文件有两个作用:

1、作为脚本,直接运行

2、作为模块供其他人使用

3、__name__ == '__main__'可以作为一个项目的启动文件

#python为我们内置了全局变量__name__,
当文件被当做脚本执行时:__name__ 等于'__main__'
当文件被当做模块导入时:__name__等于模块名
#作用:用来控制.py文件在不同的应用场景下执行不同的逻辑(或者是在模块文件中测试代码)
if __name__ == '__main__':
print('from the tbjx.py')

__all__ = ['name', 'read1',]

name = '太白金星'

def read1():
print('tbjx模块:',name) def read2():
print('tbjx模块')
read1() def change(): global name
name = 'barry' if __name__ == '__main__':
# 在模块文件中测试read1()函数
# 此模块被导入时 __name__ == tbjx 所以不执行
read1()

文件的查找顺序:

  先从内存中查找---> built-in 内置模块 --> sys.path 找

      

    

day 13 模块的更多相关文章

  1. Python 入门基础13 --模块与包

    本节内容: 一.模块及使用 1.模块及使用 2.起别名.from导入 3.自执行与模块 二.包的使用 2.1 包中模块的使用:import 2.2 包的嵌套 2.3 包中模块的使用:from ...i ...

  2. lua 13 模块(类似class)与包

    转自: http://www.runoob.com/lua/lua-modules-packages.html 模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把 ...

  3. system verilog的一些总结(从其他博客复制来的)

    转载自 http://blog.sina.com.cn/s/blog_e7fec2630101f5t9.html SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE 136 ...

  4. Avalon学习

    1.认识AvalonAvalon是一个简单易用的迷你的MVVM框架,作者是博客园的司徒正美,去哪儿.搜狐等等都用这个框架.没有任何依赖,兼容性非常好,支持IE6,不到5000行,压缩后不到50KB.官 ...

  5. 一些推荐的spark/hadoop课程

    为了分享给你们,也为自己. 感谢下面的老师们! 1.王家林DT大数据梦工厂的大数据IMF传奇行动课程 总的目录是: 第一阶段:Linux和Java零基础企业级实战 第二阶段:Hadoop和Hive零基 ...

  6. 关于Vue的路由、脚手架笔记

    在页面引入vue-router.js文件,开始配置路由 <div id="box"> <ul><li> <a v-link="{ ...

  7. python_开发规范

    对于python有哪些开发规范? 1. 每行代码不超过80字符 2. 不要在逗号, 分号, 冒号前加空格, 应该之后加空格 3. 列表, 索引,切片的左括号前不加空格 4. 比较运算前后 加一个空格 ...

  8. SystemVerilog语言简介(二)

    6. 用户定义的类型 Verilog不允许用户定义新的数据类型.SystemVerilog通过使用typedef提供了一种方法来定义新的数据类型,这一点与C语言类似.用户定义的类型可以与其它数据类型一 ...

  9. PHP内核之旅-1.生命周期

    1.SAPI接口 PHP具体应用的编程接口. 2.开始和结束 PHP开始执行以后会经过两个主要的阶段: 处理请求之前的开始阶段和请求之后的结束阶段. 1.1开始阶段: 1.1.1 模块初始化阶段(MI ...

随机推荐

  1. self, super理解

    self是方法参数列表中的第一个参数,是运行时决定的. super是编译器符号,是编译时决定的.super的含义为从父类开始寻找相应的方法,父类在编译的时候就已经决定了. 一个关键点:super并不代 ...

  2. TypeScript set get

    private _id:number; public get id():number{ return this._id; } public set id(value:number){ this._id ...

  3. Haskell语言学习笔记(19)File IO

    关于IO Action 类型为IO t. 运算时不执行,因而没有任何效果,只有执行时才会有效果,产生副作用. 一个IO Action只有在其他IO Action中才能被执行. 类型为IO t的IO A ...

  4. numpy-Randow

    Randow使用 http://blog.csdn.net/pipisorry/article/details/39508417 概率相关使用 转:http://www.cnblogs.com/Nau ...

  5. flume 详细介绍

    http://blog.csdn.net/a2011480169/article/details/51544664 配有详细的例子. http://www.cnblogs.com/gongxijun/ ...

  6. ArcGIS案例学习笔记3_1_地理配准案例_图面控制点

    ArcGIS案例学习笔记3_1_地理配准案例_图面控制点 计划时间:第3天上午 目的:地形图控制点配准 数据:地形图drg 无坐标: 步骤 1.查看地图标注 2. 地理配准,添加控制点 3.结果: 联 ...

  7. 360sdk网游支付服务

    网游支付服务   目录 1.流程介绍2.接口介绍2.1支付接口[客户端调用](必接)2.2支付结果通知接口–应用服务器提供接口, 由360服务器回调(必接)2.3订单核实接口– 服务器端接口, 应用服 ...

  8. java的Timer和TimerTask

    java中Timer类使用的方法是如下的: Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() ...

  9. linux 系统 网卡 ethX没有显示IP的处理方式

    1 临时方式 ifconfig  设备名 IP 地址 (ifconfig eth0  192.168.1.117) 设置好之后马上生效,不需要重启网卡服务(千万别重启网卡服务,不然刚刚设置的又没有了) ...

  10. el-js中循环遍历el的集合

    遇到问题的代码: var score=0; for(var i=0;i<${fn:length(tMovie.tComments) };i++){ score=${tMovie.tComment ...