首页 > 其他 > 详细

模块和包

时间:2020-04-26 14:30:13      阅读:36      评论:0      收藏:0      [点我收藏+]

模块

Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。

模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。

import 语句

想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下:

import module1[, module2[,... moduleN]
#support.py 文件代码

def print_func( par ):
    print ("Hello : ", par)
    return

#test.py 引入 support 模块:
#test.py 文件代码

# 导入模块
import support
 
# 现在可以调用模块里包含的函数了
support.print_func("Runoob")

输出结果:
Hello :  Runoob

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

from … import 语句

Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:

from modname import name1[, name2[, ... nameN]]
# 斐波那契(fibonacci)数列模块
 
def fib(n):    # 定义到 n 的斐波那契数列
    a, b = 0, 1
    while b < n:
        print(b, end= )
        a, b = b, a+b
    print()
 
def fib2(n): # 返回到 n 的斐波那契数列
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result


#例如,要导入模块 fibo 的 fib 函数,使用如下语句:
from fibo import fib, fib2
fib(500)

输出结果:
1 1 2 3 5 8 13 21 34 55 89 144 233 377

这个声明不会把整个fibo模块导入到当前的命名空间中,它只会将fibo里的fib函数引入进来。

from ... import ... as ...

from   模块名  import 函数名/类名   as  简称

什么时候用as?

1、函数或者类的名字太长了

2、不同的模块中有重名的函数/类

from … import * 语句

把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

from modname import *

__name__属性

一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

说明: 每个模块都有一个__name__属性,当其值是‘__main__‘时,表明该模块自身在运行,否则是被引入。

说明:__name__ 与 __main__ 底下是双下划线, _ _ 是这样去掉中间的那个空格。

dir() 函数

内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:

import sys
dir(sys)

输出结果:
[__displayhook__, __doc__, __excepthook__, __loader__, __name__,
 __package__, __stderr__, __stdin__, __stdout__,
 _clear_type_cache, _current_frames, _debugmallocstats, _getframe,
 _home, _mercurial, _xoptions, abiflags, api_version, argv,
 base_exec_prefix, base_prefix, builtin_module_names, byteorder,
 call_tracing, callstats, copyright, displayhook,
 dont_write_bytecode, exc_info, excepthook, exec_prefix,
 executable, exit, flags, float_info, float_repr_style,
 getcheckinterval, getdefaultencoding, getdlopenflags,
 getfilesystemencoding, getobjects, getprofile, getrecursionlimit,
 getrefcount, getsizeof, getswitchinterval, gettotalrefcount,
 gettrace, hash_info, hexversion, implementation, int_info,
 intern, maxsize, maxunicode, meta_path, modules, path,
 path_hooks, path_importer_cache, platform, prefix, ps1,
 setcheckinterval, setdlopenflags, setprofile, setrecursionlimit,
 setswitchinterval, settrace, stderr, stdin, stdout,
 thread_info, version, version_info, warnoptions]

软件开发过程中可以通过目录来组织模块,这种方法叫做包。

对模块进行分组

可以以如下方式对模块进行组织:

技术分享图片

包的创建

1、创建一个目录

2、在该目录下创建一个__init__.py文件

3、在该目录下创建模块

包的使用

import 包名.模块名

from 包名.模块名 import 函数/类

自定义的 模块的名字和 系统模块的名字冲突的时候:导包的时候最后导的自定义的。

自定义模块的时候尽量不要名字和系统模块的名字一样。

我怎么知道系统有没有这个模块?

一招可以解决冲突问题:导包的时候指定路径

 

模块和包

原文:https://www.cnblogs.com/-Leif/p/12779123.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!