Python 模块

  模块定义

    随着程序越来越庞大,需要分隔成几个文件;也需要能在不同文件中复用函数、类和变量,而不是拷贝代码。为了满足这些需要,Python提供了模块。

    简单来说,模块就是一个保存了Python代码的文件(.py 文件)文件名 就是 模块名 加上  .py 后缀。(这边学习使用Notepad++ 保存的 .py 文件即为模块)

    模块能定义函数,类和变量。模块里也能包含可执行的代码。模块的模块名(作为一个字符串)可以由全局变量 __name __ 得到。

    例如,在当前目录下创建一个名为 fibo.py 的文件,内容如下:

 1 # Fibonacci numbers module
 2
 3 def fib(n):                    # write Fibonacci series up to n
 4     a = 0
 5     b = 1
 6     while b < n:
 7         print(b, end=' ')
 8         b = a + b
 9         a = b - a
10     print()

    备注:Notepad++ 中可分视图查看,选择移动到另一视图,查看下方截图

    新建一 .py 文件,如 module.py( 与 fibo.py 同一目录),引用 fibo  import fibo ,执行 fibo下的 fib 函数  fibo.fib(1000)  (即输出1000 内的 fibonacci数列),参见下方截图

  导入模块

    模块需要导入,通过上方的例子以及之前的章节,已经接触到 import 的语句,现在具体来说明下模块的导入。

    import modulename1 [, modulename2[,... modulenameN]  可通过 import 语句导入一个或多个模块,模块导入命令通常放在脚本顶端。

    参考上例,  import fibo 该命令不会直接把fibo中的函数导入当前,只是引入了模块名fibo,可通过模块名来访问函数  fibo.fib(1000)

    可在代码中定义变量来反复使用该函数,如:

fib = fibo.fib        # 新建函数变量
fib(20)
fib(100)

    from modname import name1[, name2[, ... nameN]]  从模块中导入一个或多个指定的部分到当前命名空间中

    在 fibo.py 新增一个函数,代码如下:

1 def fib_l(n):            # return Fibonacci series up to n
2     result = []
3     a = 0
4     b = 1
5     while b < n:
6         result.append(b)
7         b = a + b
8         a = b - a
9     return result

    通过  from fibo import fib_l  导入 fibo 中的指定部分 fib_l,这样不会导入模块名 fibo

    from modname import *   导入模块中的所有定义(除了以下划线_命名的),这种声明不该被过多地使用。

  定位模块

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

      1. 当前目录

      2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录

      3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

    模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

  dir() 函数

    内置函数 dir() 用于按模块名搜索模块定义,返回一个字符串类型的存储列表;无参数调用时,dir() 函数返回当前定义的命名。

    该列表列出了所有类型的名称:变量、模块、函数 等等;dir() 不会列出内置函数和变量名,这些在 __builtin__ 中定义

  if __name__ = '__main__'

    这边重点说下  if __name__ = '__main__':   代码的作用。我们经常会在代码的最下面看到类似代码段,原因在于我们import 模块时,会执行.py文件,但若希望仅在非import情况下执行的代码,该如何实现呢?

    判断 .py 文件的 __name__ 属性是否是 "__main__" 即可实现,原理如下:

直接运行.py文件, 则__name__的值是'__main__';

而在import 一个.py文件后,__name__的值就不是'__main__'了;

从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件

    这边可做如下实验,查看运行效果,示例代码如下:

1 if __name__ == '__main__':
2     print('This program is being run by itself')
3 else:
4     print('I am being imported from another module')

    保存为using_name.py;分别查看直接运行该 using_name.py 及import该模块的差别,输出如下:

Output:
$ python using_name.py
This program is being run by itself
$ python
>>> import using_name
I am being imported from another module
>>>

 

    

转载于:https://www.cnblogs.com/feeland/p/4396367.html

Python学习(六)模块相关推荐

  1. Python学习--Selenium模块

    1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台 转载于:https://www.cnblo ...

  2. python学习 - copy模块的浅复制(copy)与深复制(deepcopy)

    python学习 - copy模块的浅复制(copy)与深复制(deepcopy) 简介 copy.copy()详解 copy.deepcopy()详解 简介 在使用列表或者字典进行传递参数的时候,可 ...

  3. Python学习 - 常用模块(二)

    目录 一. 常用模块 - hashlib 二. 常用模块 - hmac 三. 常用模块 - logging 四. 常用模块 - re 五. 常用模块 - requests 六. 常用模块 - para ...

  4. 【Python】Python学习----第一模块笔记

    1.python是什么? python是动态解释型的强类型定义语言. python官方版本的解释器是CPython.该解释器使用C语言开发. 当前主要使用3.x版本的python. 2.第一个pyth ...

  5. Python学习:模块

    本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python简介 Python流程介绍:深入Python流程 Python数据结构:P ...

  6. python学习--re模块

    一.结合match匹配任意字符串 (一)匹配单个字符串 字符 功能 . 匹配任意1个字符(除了\n) [ ] 匹配[ ]中列举的字符 \d 匹配数字,即0-9 \D 匹配非数字,即不是数字 \s 匹配 ...

  7. Python学习六:面向对象编程(上)

    文章目录 前言 一.面向对象编程: 1. oop [object oriented programming] 是一种python的编程思路 2. 解释 3. 面向对象 和面向对象编程 二.类和对象 1 ...

  8. Python学习笔记-模块介绍

    (一)-模块概念和基本使用 python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲突的问题.模块我们就可以理解为lib库,如果需要使用某个 ...

  9. 大智慧数据文件python_马克的Python学习笔记#模块和包 3

    让目录或者zip文件成为可以运行的脚本 我们的程序已经从一个简单的脚本进化为一个涉及多个文件的应用.我们希望能有某种简单的方式来让用户运行这个程序 如果应用程序已经进化为由多个文件组成的"庞 ...

  10. python学习之模块--模块(五)

    5.10 包 5.10.1 包的概念 [官网解释] Packages are a way of structuring Python's module namespace by using " ...

最新文章

  1. python网络编程及高并发问题
  2. C++中getline函数的使用
  3. msdn的类型成员描述
  4. Java的包裹wrap
  5. js最简单数组去重_js简单数组去重
  6. 数据清洗工具OpenRefine
  7. php使用使用外部变量的值,PHP实现函数内修改外部变量值的方法示例
  8. 深度学习与神经网络——邱锡鹏
  9. 程序员如何解决并发冲突的难题?
  10. 安卓3d游戏引擎_3D球闯关游戏-3D球闯关游戏安卓官方版预约 v1.2.5
  11. Java工具类之Base64Utils实现base64码转换为文件流等互换
  12. 安全可靠的透明加密软件
  13. gigabyte计算机主板图解,技嘉主板bios设置详解教程
  14. batch_size详解
  15. P1296 分形宇宙
  16. IOS应用版本号设置
  17. LFS(Linux From Scratch)构建过程全记录(一):准备工作
  18. 苹果android wear教程,Android Wear/Apple Watch/WatchKit智能手表开发入门教程
  19. 一副重现赤壁之战的神秘地图
  20. OpenStack新版UI管理skyline

热门文章

  1. 【spring】spring的事务传播性 hibernate/jpa等的事务隔离性
  2. laravel中Blade模板继承
  3. HtmlDom 基础
  4. 在MongoDB的MapReduce上踩过的坑
  5. JEE_Ajax技术
  6. 向“3+1” SQLServer2008集群增加磁盘
  7. 新浪微博***事件分析
  8. python中按照文件夹中文件的排列顺序读取文件内容
  9. 七重定位是什么意思_手机后缀名Note、Mix、Mate代表什么意思?现在终于明白了...
  10. android texturevideoview 缓存,Android TextureView与VideoView性能