Python基础-模块和包

模块和包的相关用法


自定义模块

定义的py文件就可以当做一个模块,如下define_mod.py文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"""
这个说明文档
my_book 字符串变量
say_hi say_hi函数
User 用户类
"""
print("this is test module")

my_book = "this is book var"


def say_hi(user):
print('%s,欢迎学习python' % user)


class User:
def __init__(self, name):
self.name = name

def walk(self):
print('%s is walking' % self.name)

def __repr__(self):
return 'User[name=%s]' % self.name


# 用from 模块 import* 时 只会引入all里面的属性方法
__all__ = ['say_hi', 'User']


# === 测试代码 ===
def test_my_book():
print(my_book)


def test_say_hi():
say_hi('lulu')
say_hi(User('dodo'))


def test_user():
u = User('toto')
u.walk()
print(u)


# __name__ 当前模块运行为__main__ 被其他模块引入时为模块名
if __name__ == '__main__':
test_my_book()
test_say_hi()
test_user()

包就是一个文件夹,里面会包含__init__.py文件,可以将改文件夹的文件里面的文件引入__init__.py文件

1
2
from . import define_mod
from .define_mod import *

引入和包的用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
"""
导入模块语法
1.import m1 [as n1],m2 [as n2] 导入整个模块
2.from m1 import member [as n1],member2 [as n2] 导入模块中的指定成员
"""
import os as o
from sys import winver as v
from sys import path
import pprint

print(o.sep)
# 版本
print(v)
# python 默认加载路径
pprint.pprint(path)

'''
__all__ 没有my_book
'''
# from crazyPython.nine.define_mod import *
# my_book

import crazyPython.nine.define_mod as define_mod

u = define_mod.User('soso')
u.walk()
print(define_mod.my_book)

# 包的使用
import crazyPython.nine as nine

nine.say_hi('rrr')

# dir() 查看所有属性和方法 __all__属性 查看开发的接口和属性
print(dir(define_mod))
print([e for e in dir(define_mod) if not e.startswith("_")])
print(define_mod.__all__)
# __doc__ 说明文档
print(define_mod.__doc__)

import string

# __file__ 文件路径
print(string.__file__)
print(define_mod.__file__)