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

[经验分享] Python 学习笔记 (4)—— 模块

[复制链接]

尚未签到

发表于 2018-8-8 12:04:40 | 显示全部楼层 |阅读模式
  模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。
  模块可以从其他程序 输入 以便利用它的功能。这也是我们使用Python标准库的方法。首先,我们将学习如何使用标准库模块。
使用sys模块
#!/usr/bin/python  
# Filename: using_sys.py
  
import sys
  
print 'The command line arguments are:'
  
for i in sys.argv:
  print i
  执行结果
$ python using_sys.py we are arguments  
The command line arguments are:
  
using_sys.py
  
we
  
are
  
arguments
  工作原理
  首先,我们利用import语句 输入 sys模块。基本上,这句语句告诉Python,我们想要使用这个模块。sys模块包含了与Python解释器和它的环境有关的函数。
  当Python执行import sys语句的时候,它在sys.path变量中所列目录中寻找sys.py模块。如果找到了这个文件,这个模块的主块中的语句将被运行,然后这个模块将能够被你 使用 。注意,初始化过程仅在我们 第一次 输入模块的时候进行。
  sys模块中的argv变量通过使用点号指明——sys.argv——这种方法的一个优势是这个名称不会与任何在你的程序中使用的argv变量冲突。另外,它也清晰地表明了这个名称是sys模块的一部分。
  这里,当我们执行python using_sys.py we are arguments的时候,我们使用python命令运行using_sys.py模块,后面跟着的内容被作为参数传递给程序。Python为我们把它存储在sys.argv变量中。
  记住,脚本的名称总是sys.argv列表的第一个参数。所以,在这里,'using_sys.py'是sys.argv[0]、'we'是sys.argv[1]、'are'是sys.argv[2]以及'arguments'是sys.argv[3]。注意,Python从0开始计数,而非从1开始。
  sys.path包含输入模块的目录名列表。我们可以观察到sys.path的第一个字符串是空的——这个空的字符串表示当前目录也是sys.path的一部分,这与PYTHONPATH环境变量是相同的。这意味着你可以直接输入位于当前目录的模块。否则,你得把你的模块放在sys.path所列的目录之一。
  模块的__name__
  每个模块都有一个名称,在模块中可以通过语句来找出模块的名称。这在一个场合特别有用——就如前面所提到的,当一个模块被第一次输入的时候,这个模块的主块将被运行。假如我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的__name__属性完成。
  例子2:
#!/usr/bin/python  
# Filename: using_name.py
  
if __name__ == '__main__':
  print 'This program is being run by itself'
  
else:
  print 'I am being imported from another module'
  执行结果
$ python using_name.py  
This program is being run by itself
  
$ python
  
>>> import using_name
  
I am being imported from another module
  
>>>
  每个Python模块都有它的__name__,如果它是'__main__',这说明这个模块被用户单独运行,我们可以进行相应的操作。
  如何创建你自己的模块
  创建你自己的模块是十分简单的,你一直在这样做!每个Python程序也是一个模块。你已经确保它具有.py扩展名了。下面这个例子将会使它更加清晰。
  例子3
#!/usr/bin/python  
# Filename: mymodule.py
  
def sayhi():
  print 'Hi, this is mymodule speaking.'
  
version = '0.1'
  
# End of mymodule.py
上面是一个 模块 的例子。你已经看到,它与我们普通的Python程序相比并没有什么特别之处。我们接下来将看看如何在我们别的Python程序中使用这个模块。记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。#!/usr/bin/python  
# Filename: mymodule_demo.py
  
import mymodule
  
mymodule.sayhi()
  
print 'Version', mymodule.version
  执行结果
$ python mymodule_demo.py  
Hi, this is mymodule speaking.
  
Version 0.1
  它如何工作
  注意我们使用了相同的点号来使用模块的成员。Python很好地重用了相同的记号来,使我们这些Python程序员不需要不断地学习新的方法。
  from..import
  下面是一个使用from..import语法的版本。
#!/usr/bin/python  
# Filename: mymodule_demo2.py
  
from mymodule import sayhi, version

  
#>  
# from mymodule import *
  
sayhi()
  
print 'Version', version
  模块与包
  1.模块可以通过以下3种方式引用
  (1)import
  (2)import ... as ...
  (3)from ... import ...
  例如:
[root@node1 python]# python say.py  
Hello World
  
[root@node1 python]# cat say.py
  
#!/usr/bin/python
  
def say():
  print 'Hello World'
  
say()
  
[root@node1 python]# cat saysomething.py
  
import say
  
[root@node1 python]# python saysomething.py
  
Hello World
  (1)
[root@node1 python]# cat saysomething.py  
import say
  
say.say()
  
[root@node1 python]# python saysomething.py
  
Hello World
  (2)
[root@node1 python]# cat saysomething.py  
import say as s
  
s.say()
  
[root@node1 python]# python saysomething.py
  
Hello World
  (3)
[root@node1 python]# cat saysomething.py  
from say import say
  
say()
  
[root@node1 python]# python saysomething.py
  
Hello World
  2.包
  包的结构,需要目录里面存在__init__.py 文件即可
[root@node1 python]# mkdir add  
[root@node1 python]# vim add/operator.py
  
#!/usr/bin/python
  
def f(x,y):
  return x+y
  
[root@node1 python]# touch add/__init__.py
  
[root@node1 python]# vim  test.py
  
#!/usr/bin/python
  
import add.operator
  
print add.operator.f(1,2)
  
[root@node1 python]# python test.py
  
3

运维网声明 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-548647-1-1.html 上篇帖子: python写的系统常用命令(二) 下篇帖子: python 多线程实现定期更新ip库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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