模块的概念

一个python文件就是一个模块。

模块名同时也是一个标识符,需要符合标识符的命名规则。

在模块中定义的全局变量、函数、类 都是个外界提供的直接使用的工具。

模块就好比工具包,要想使用一个模块,需要先导入它。

模块的导入方式

模块在被导入时,模块中没有任何缩进的代码,会被完全执行一遍。

推荐方法

import 模块名1
import 模块名2

  

不推荐方法

import 模块名1,模块名2

  

模块的别名

模块导入后,可以给模块起别名,别名遵循大驼峰命名规则

格式: import 模块名 as 别名

模块导入的顺序规范

按以下优先级导入

  • 官方标准模块
  • 第三方模块
  • 应用程序模块

部分工具导入(局部导入)

如果指向导入某个模块中的部分工具(全局变量、函数、类),则可以使用部分工具导入方法。

优点:导入的工具可以直接使用,无需使用 模块名.的方法调用。

格式: from <模块名> import <工具名>

工具的别名:

如果导入了两个名字相同的工具,则最后导入的会覆盖前面导入的。为了解决这个问题,也可以使用as关键字来给导入的工具起别名。

别名遵循标识符命名规则

例如:

from xh_25_测试模块1 import module_name as tools1

  

通过form <模块名> import * 导入全部工具(不推荐!了解即可)

通过此方法可以模块的全部工具,但是不推荐!

因为工具重名覆盖不会有任何提示,不便于问题的排查。

模块的导入顺序

  • 在python系统中,内置有系统模块方便用户使用(例如random模块)。
  • 在导入模块时,按照:当前文件目录、python系统模块目录 的顺序进行搜索。
  • 由于存在系统模块目录,在给模块起名时,不要和系统模块名相同。

__file__内置属性

使用:print(模块名.__file__)可输出模块的所在绝对路径。

如果直接print(__file__)则输出当前python文件的绝对路径。

__name__与模块测试代码块

测试代码块

在开发中,通常一个模块中都会写有测试代码块,这些代码块通常会将测试结果输出到控制台。

而导入模块时,模块中没有任何缩进的代码,会被完全执行一遍。

但对于一个模块来说,我们只需要它的工具,并不需要它的测试代码输出测试结果到控制台。

为了解决这个问题,我们需要使用到__name__内置属性。

__name__

__name__属性储存的是文件的模块名。对于当前模块下对它进行的调用,它的值都是字符串"__main__"。

但是!如果这个模块被导入到其它模块,此时__name__属性的值则为被调用模块的值。

解决导入模块时测试代码块输出的问题

利用__name__属性的特性,我们可以使用一个if语句来解决这个问题。

在被导入的模块中,使用if 判断__name__的值,如果是"__main__"(在此模块测试时),则执行if下的测试代码,否则(被导入时),就不执行。

如:

if __name__ == "__main__":
"""if下的区域即为测试区域,测试代码就写在这里"""
print("测试代码正常执行")

  

11 模块、模块的搜索顺序、__file__内置属性、__name__属性的更多相关文章

  1. Python第八天 模块 包 全局变量和内置变量__name__ Python path

    Python第八天  模块   包   全局变量和内置变量__name__    Python path 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Pyt ...

  2. python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)

    面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...

  3. JSP内置对象和属性

      JSP内置对象和属性列举如下: 1.request对象     客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的 ...

  4. 【python基础语法】OS模块处理文件绝对路径,内置的异常类型、捕获、处理(第9天课堂笔记)

    import os """ 通过文件的路径去打开文件 相对路径:相对当前的工作路径去定位文件位置 .:代表当前路径 ..:代表上一级路径(父级路径) 绝对路径:相对于电脑 ...

  5. 11 The Go Memory Model go语言内置模型

    The Go Memory Model go语言内置模型 Version of May 31, 2014 Introduction 介绍 Advice 建议 Happens Before 在发生之前 ...

  6. EassyUI内置方法与属性

    Jquery插件 easyUI属性汇总 作者: 字体:[增加 减小] 类型:转载 时间:2011-01-19我要评论 找了个时间看了下EasyUI插件,对它的插件感觉是很舒服,特地把Easy UI的大 ...

  7. 前端笔记之JavaScript面向对象(二)内置构造函数&相关方法|属性|运算符&继承&面向对象

    一.复习 1.1复习上下文 函数的调用方式 上下文 fun() window obj.fun() obj box.onclick = fun box setInterval(fun,1000) set ...

  8. 34、JavaScript面向对象(内置构造函数&相关方法|属性|运算符&继承&面向对象)

    一.面向对象 1.1 this的指向问题 要看清楚最终的函数调用者是谁. IIFE也被当做函数直接运行,IIFE的this都是window对象 函数的arguments是类数组对象,比如传入的第0项参 ...

  9. JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)

    1.字符串属性   <script>   var test_var = "I Iove you"; console.log(test_var.charAt(3)) // ...

随机推荐

  1. Linux下CRMEB环境搭建

    环境准备:PHP7.0.33MySQL5.7Apache2.4 PHP环境安装: sudo apt--cli php7.-common php7.-curl \ php7.-dev php7.-fpm ...

  2. Git的使用(2) —— 本地版本库的操作

    1. 向本地版本库中添加文件 注意:.git文件夹是本地版本库,包含.git文件夹的目录叫工作目录,要往本地版本库中添加文件,就必须将文件放在工作目录中. (1) 把文件添加到工作目录中. (2) 右 ...

  3. html5中time元素详解

    html5中time元素详解 一.总结 一句话总结: time的使用的话主要是将时间放在datetime属性里面:<time datetime="2015-10-22"> ...

  4. [Java/Reflect]使用反射机制获得一个对象的属性名和属性值

    一个辅助对象,用于给属性排序 class KeyValue implements Comparable<KeyValue>{ String key; Object value; @Over ...

  5. vue-router 使用query传参跳转了两次(首次带参数,跳转到了不带参数)

    问题: 在做项目的过程中,使用query传参数,发现跳转过程中第一次有参数,但是路由马上又跳转了一次,然后 ?和它之后的参数都不见了 问题分析: 因为路由加载了两次 解决办法: ·1. 找到总的 la ...

  6. Python之Pandas操作csv文件dataframe

    # -*- coding: utf-8 -*- # author:baoshan import pandas as pd def main(): aqi_data = pd.read_csv('chi ...

  7. openresty开发系列12--lua介绍及常用数据类型简介

    openresty开发系列12--lua介绍及常用数据类型简介 lua介绍  1993 年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de ...

  8. 软件定义网络基础---OpenFlow概述

    一:OpenFlow概述 二:交换机模型架构 (一)OpenFlow构架三个组成成分 三:OpenFlow 1.0版本 自OpenFlow1.0发布以来,目前已经有多个版本的OF规范版本被发布 四:O ...

  9. 提供对字符串的全角->半角,半角->全角转换

    package com.opslab.util.algorithmImpl; import com.opslab.util.StringUtil; /** * 提供对字符串的全角->半角,半角- ...

  10. boost写的异步客户端样例代码修改为支持断开重连的代码

    考虑到boost的工业级强度,因此就直接用了,代码的官方示例地址:https://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/examples/ ...