Python程序设计入门(4)模块和包

作者:shichen2014 时间:2023-06-18 11:37:36 

Python语言功能非常强大,除了类之外,还有模块和包的概念,这有点像perl,此处简单说说包和模块。

一、Python中的模块

模块——其实就是我们说的库(lib)的概念,不过它不仅只是可以包含一系列函数,也可以包含类,python里是没有像C语言之类,直接include某文件的,包正是这种类似的东西。

Python 引入模块的方法有两种:

1、import 模块名(实际是对应的就是 文件名.py )

2、模块名 = __import__("模块文件名(不带扩展名)")

也可以" import 模块名  as  别名 "这样用

例如:

test.py
# -*- coding: gb18030 -*-
#引入模块
import test_mod

#调用模块里的函数
test_mod.my_func()

#调用模块里的类
tc = test_mod.test_cls()
tc.test_func()

test_mod.py源码如下:
# -*- coding: gb18030 -*-

def my_func():
    print 'I am a function in the module! '

class test_cls:
    def test_func(self):
        print 'I am a mothod in the class! '

调用模块里的函数或类一定要用 “模块名.类名|函数名” 的方式。

正是因为这种特性,python里很多 os.xx 、 sys.xx 之类的语法,但它不一定是对象(对象和非对象之间显得极混乱,或者可以认为模块也是一个对象吧,只是比较特殊),这是python语言的一个严重的缺点,不过当你习惯这些的时候,就比较容易读懂python的脚本了。

sys 和 os 是 python 里最常用的模块,需要了解一下它们。

二、Python中的包

包实际上就是对一系列模块的封装,以防止模块名之间发生冲突,对于一个标准的python程序,通常的结构为:

app.py
    appname
        __init__.py
        son_pack1
            __init__.py
            son_mod_1_1.py
            son_mod_1_2.py
         son_pack2
            __init__.py
            son_mod_2_1.py
            son_mod_2_2.py
        son_mod_1.py
        .......


如果学过Java就会明显,这是一种按目录来查找文件的方法,不过不同之处是每个目录必须带 __init__.py 否则将不会被识别为包的子目录。

在有__version__、__all__、__path__ 三个特殊变量,可以指定,也可以让这文件为空。

调用包里的类或函数的方法是:

包名.子包名.类名|函数名 

这实际上就相当于C++或C#里的名字空间。

在调用包时,需要注册目录和具体模块的调用方法

如,要调用 son_mod_1_1.py

那么就是:

appname.son_pack1.son_mod_1_1

此外还有一种方法是用  form 关键字,方法为:

from appname.son_pack1 import son_mod_1_1

如果要喜引入 appname.son_pack1 里的所有模块,那么为:

from appname.son_pack1 import *


对于使用 import * 的情况,必须在 __init__.py 中用 __all__ 指明,如:

__all__ = ["son_mod_1_1", "son_mod_1_2"]


标签:Python,模块,包
0
投稿

猜你喜欢

  • 讲解SQL Server数据库的触发器安全隐患

    2009-01-13 14:01:00
  • Select下拉列表控件美化

    2008-11-12 12:55:00
  • 基于Python制作一个图片色卡提取器

    2023-06-15 14:25:26
  • Web设计色彩速查表

    2009-12-21 16:24:00
  • pyqt远程批量执行Linux命令程序的方法

    2023-05-08 15:59:06
  • Mysql使用存储过程快速添加百万数据的示例代码

    2024-01-19 21:51:26
  • ASP提高数据显示效率-缓存探幽

    2007-09-28 12:37:00
  • Python中循环后使用list.append()数据被覆盖问题的解决

    2023-02-08 20:45:49
  • selenium跳过webdriver检测并模拟登录淘宝

    2023-06-14 18:22:52
  • Python一个简单的通信程序(客户端 服务器)

    2023-09-09 11:09:39
  • 深入解析mysql.sock不见的问题

    2024-01-26 21:30:28
  • Django 多环境配置详解

    2022-01-25 06:38:49
  • 在Internet Explorer中正确使用MSXML

    2009-02-22 18:41:00
  • Python随机生成数模块random使用实例

    2022-08-04 21:04:48
  • Python基于pygame模块播放MP3的方法示例

    2023-09-22 12:33:19
  • 关于Python自动化操作Excel

    2022-07-19 23:25:48
  • jupyter notebook参数化运行python方式

    2022-09-10 21:38:55
  • python3爬虫中异步协程的用法

    2021-11-01 01:16:02
  • vue动态添加store、路由和国际化配置方式

    2024-05-05 09:10:09
  • MySQL分页优化

    2024-01-13 23:18:50
  • asp之家 网络编程 m.aspxhome.com