设为首页 收藏本站
查看: 888|回复: 0

[经验分享] Python学习(六)模块

[复制链接]

尚未签到

发表于 2015-11-30 15:13:27 | 显示全部楼层 |阅读模式
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
>>>

  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145499-1-1.html 上篇帖子: Python学习笔记(1)——数组差集 下篇帖子: Python学习 Day 1-简介 安装 Hello world
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表