python 7

一、module 模块自定义
if name == ‘main’:

一般情况下,当我们写完自定义的模块之后,都会写一个测试代码,检验一些模块中各个功能是否能够成功运行。

if __name__=='__main__':
    def test_my_book ():
        print(my_book)
    def test_say_hi():
        say_hi('孙悟空')
        say_hi(User('Charlie'))
    def test_User():
        u = User('白骨精')
        u.walk()
        print(u)
    test_my_book()
    test_say_hi()
    test_User()

if name == ‘main’: 的作用是确保只有单独运行该模块时,此表达式才成立,才可以进入此判断语法,执行其中的测试代码;反之,如果只是作为模块导入到其他程序文件中,则此表达式将不成立,运行其它程序时,也就不会执行该判断语句中的测试代码。

二、导入模块的3种方式(超级详细)
(1)通常情况下,当使用 import 语句导入模块后,Python 会按照以下顺序查找指定的模块文件:
1.在当前目录,即当前执行的程序文件所在目录下查找;
2.到 PYTHONPATH(环境变量)下的每个目录中查找;
3.到 Python 默认的安装目录下查找。

(2)为了让 Python 能找到自定义(或第三方提供) 的模块,可以用以下 3 种方式来告诉它:
1.向 sys.path 中临时添加模块文件存储位置的完整路径;
2.将模块放在 sys.path 变量中已包含的模块加载路径中。
3.设置系统环境变量。

模块文件的存储位置,可以临时添加到 sys.path 变量中,即向 sys.path 中添加 D:\python_module(hello.py 所在目录),在 say.py 中的开头位置添加如下代码:

import sys
sys.path.append('D:\\python_module')

三、导入模块的本质
1.使用“import fk_module”导入模块的本质就是,将 fk_module.py 中的全部代码加载到内存并执行,然后将整个模块内容赋值给与模块同名的变量,该变量的类型是 module,而在该模块中定义的所有程序单元都相当于该 module 对象的成员。

2.使用“from fk_module import name, hello”导入模块中成员的本质就是将 fk_module.py 中的全部代码加载到内存并执行,然后只导入指定变量、函数等成员单元,并不会将整个模块导入

在导入模块后,可以在模块文件所在目录下看到一个名为“pycache”的文件夹,打开该文件夹,可以看到 Python 为每个模块都生成一个 *.cpython-36.pyc 文件,比如 Python 为 fk_module 模块生成一个 fk_ module.cpython-36.pyc 文件,该文件其实是 Python 为模块编译生成的字节码,用于提升该模块的运行效率。

四、__all__变量用法
在默认情况下,如果使用“from 模块名 import *”这样的语句来导入模块,程序会导入该模块中所有不以下画线开头的成员(包括变量、函数和类)。
但在一些场景中,我们并不希望每个成员都被暴露出来供外界使用,此时可借助于模块的 all 变量,将变量的值设置成一个列表,只有该列表中的成员才会被暴露出来。

'''测试__all__变量的模块'''
def hello():
    print("Hello, Python")
def world():
    print("Pyhton World is funny")
def test():
    print('--test--')
# 定义__all__变量,指定默认只导入hello和world两个成员
__all__ = ['hello', 'world']

上面的 all 变量指定该模块默认只被导入 hello 和 world 两个成员。下面程序示范了模块中 all 变量的用处:

# 导入all_module模块内所有成员
from all_module import *
hello()
world()
test() # 会提示找不到test()函数

如果确实希望程序使用模块内 all 列表之外的成员,有两种解决方法:
1.**第一种是使用“import 模块名”来导入模块。**在通过这种方式导入模块之后,总可以通过模块名前缀(如果为模块指定了别名,则可以使用模快的别名作为前缀)来调用模块内的成员。
2.**第二种是使用“from 模块名 import 成员”来导入指定成员。**在这种方式下,即使想导入的成员没有位于 all 列表中,也依然可以导入。

五、包(存放多个模块的文件夹)
1.什么是包呢?简单理解,包就是文件夹,只不过在该文件夹下必须存在一个名为“init.py” 的文件。

每个包的目录下都必须建立一个 init.py 的模块,可以是一个空模块,可以写一些初始化代码,这是 Python 的规定,其作用就是告诉 Python 要将该目录当成包来处理。

注意,__init__.py 不同于其他模块文件,此模块的模块名不是 __init__,而是它所在的包名。
例如,在 settings 包中的 __init__.py 文件,其模块名就是 settings。
  1. init.py作用详解
    我们知道,导入包就等同于导入该包中的 init.py 文件,因此完全可以在 init.py 文件中直接编写实现模块功能的变量、函数和类,但实际上并推荐大家这样做,因为包的主要作用是包含多个模块。
    因此 init.py 文件的主要作用是导入该包内的其他模块。

六、查看模块(变量、函数、类)方法
为了查看模块包含什么,可以通过如下两种方式:
1.使用 dir() 函数。
2.使用模块本身提供的 all 变量。

七、__doc__属性:查看文档
使用 help() 函数查看的其实就是程序单元的 doc 属性值。
-================================================================
capwords() 函数的作用就是将给定的 s 字符串中每个单词的首字母变成大写的。该函数可通过 sep 参数指定分隔符:如果不指定 sep 参数,该字符串默认以空白作为分隔符。

capwords(s [,sep])

八、__file__属性:查看模块的源文件路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值