zoukankan      html  css  js  c++  java
  • Python模块调用方式详解

                     Python模块调用方式详解

                                              作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

      模块,用一砣代码实现了某个功能的代码集合。 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。接下来就让我们一起学习一下Python中模块调用方式吧。

    一.什么是模块

      在计算机程序的开发过程中,随着程序代码, 在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放在不同的文件里,使得每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个“*.py”文件就成为一个模块(Module)

    二.模块的优点

      1>.提高了代码的可维护性(可能性更好);

      2>.编写代码不必从零开始,当一个模块编写完毕,就可以被其他地方引用,也经常引用其他模块,包括Python内置的模块和来自第三方的模块.所以,模块分为三类:

        a>.Python标准库

        b>.第三方模块

        c>.应用程序自定义模块

      3>.使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别在不同的模块中,因此,我们自己在编写模块时,不必要考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

    三.Python导入模块的方式

     1 #!/usr/bin/env python3
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 #方法一:
     7 '''
     8     import modname
     9     提示:这种导入方法适合用在导入内置模块(如:os,sys.time等等)或者导入第三方库时使用!
    10 '''
    11 #用法展示
    12 import sys
    13 #方法2
    14 '''
    15     from modname import funcname   & from modname import *
    16     提示:这种用适合用在包文件的导入,相对导入,绝对导入就是用他实现的!不建议使用from modname import *   这种方法导入!
    17 '''
    18 #用法展示:
    19 from os import chown,chmod
    20 #方法3
    21 '''
    22     mymodule = __import__ (’module_name’)
    23 '''
    24 #友情提示
    25 '''
    26     不主张从一个包或模块中用import * 导入所有模块,因为这样的通常会导致可读性很差。
    27     from Package import specific_submodule的用法并没有错,实际上这还是推荐的用法,除非导入的模块需要使用其它包中的同名子模块(the importing module needs to use submodules with the same name from different packages). 
    28          综上所述,一般情况应该使用import , 但有几个例外 
    29         1>.module文档告诉你要用from-import的 
    30         2>.导入一个包组件。需要一个包里面的某个子模块,一般用from A.b import c比import A.b.c 更方便 且不会冒混淆的危险.
    31 '''

    四.import 语句

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 
     8 x = 2018
     9 
    10 
    11 def get():
    12     print(x)
    13 
    14 def set():
    15     global x
    16     x=100
    module1.py
     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 import module1
     8 
     9 import module1          #第二次调用,不会再次执行该模块,只是完成了一次引用。一个模块可以在当前位置import多次,但只有第一次
    10 # 导入会执行源文件内的代码,原因是:第一次导入就会将模块包含的内容统统加载到内存了,以后在当前文件位置的导入都是指向内存中已有的模块。
    11 
    12 import os,sys,time          #我们可以同时导入多个模块,不建议这样干,可读性差!
    13 
    14 x = "yinzhengjie"
    15 
    16 print(module1.x)
    17 
    18 module1.get()
    19 
    20 module1.set()
    21 
    22 module1.get()
    23 
    24 print(x)
    25 
    26 
    27 
    28 
    29 #以上代码执行结果如下:
    30 2018
    31 2018
    32 100
    33 yinzhengjie

    五.导入模块是起别名

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 
     8 import logging as log
     9 
    10 log.error("This yinzhengjie's test error !")
    11 
    12 
    13 
    14 
    15 #以上代码执行结果如下:
    16 ERROR:root:This yinzhengjie's test error !

    六.from…import 语句 

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 
     8 x = 2018
     9 
    10 
    11 def get():
    12     print(x)
    13 
    14 def set():
    15     global x
    16     x=100
    module1.py
     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 
     8 # from module1 import x,get,set           #只导入module1模块中的部分变量。推荐使用这种方法。
     9 
    10 from module1 import *                   #将module1模块中所有的数据都导入到内存,不建议这样干!from…import* 语句提供了
    11 # 一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。大多数情况, Python程序员不使用这种方法,
    12 # 因为引入的其它来源的命名,很可能覆盖了已有的定义。它和“import module1”调用方式是不同的!
    13 
    14 
    15 print(x)
    16 
    17 get()
    18 
    19 set()
    20 
    21 get()
    22 
    23 def get():
    24     print("yinzhengjie")
    25 
    26 get()
    27 
    28 
    29 
    30 
    31 #以上代码执行结果如下:
    32 2018
    33 2018
    34 100
    35 yinzhengjie
  • 相关阅读:
    ASP.NET WEB API构建基于REST风格
    .net平台下深拷贝和浅拷贝
    Visual Studio 必备神器
    sql注入
    proxy
    职场人生
    JSch
    何时用继承,何时用组合
    视频码率,帧率和分辨率的联系与差别
    超过响应缓冲区限制
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/8586301.html
Copyright © 2011-2022 走看看