python函数及模块 python函数及模块课件( 二 )


前面我们提到了可以使用import来导入一个模块,并且 __name__ 中保存的是模块的名字 。
和java中的main方法一样,如果我们想要在模块中进行一些测试工作 , 有没有类似java中main方法的写法呢?
先看一个例子:
在模块中,我们需要进行一个判断 __name__ 是不是被赋值为 "__main__" 。
我们这样来执行这个模块:
以脚本执行的情况下 , 模块的 __name__ 属性会被赋值为 __main__ , 这也是例子中为什么要这样写的原因 。
看下执行效果:
如果是以模块导入的话,那么将不会被执行:
使用import导入模块的时候,解释器首先会去找该名字的内置模块,如果没找到的话,解释器会从 sys.path变量给出的目录列表里寻找 。
sys.path的初始目录包括:
要想查看模块中定义的内容,可以使用dir函数 。
上面的例子列出了当前模块中定义的内容,包括变量,模块,函数等 。
我们可以给dir加上参数,来获取特定模块的内容:
java中有package的概念 , 用来隔离程序代码 。同样的在Python中也有包 。
我们看一个Python中包的例子:
上面我们定义了4个包,分别是sound,sound.formats, sound.effects, sound.filters 。
__init__.py 可以是一个空文件,也可以执行包的初始化代码或设置 __all__ 变量 。
当导入的时候,python就会在 sys.path 路径中搜索该包 。
包的导入有很多种方式,我们可以导入单个模块:
但是这样导入之后,使用的时候必须加载全名:
如果不想加载全名,可以这样导入:
那么就可以这样使用了:
还可以直接导入模块中的方法:
然后这样使用:
如果一个包里面的子包比较多,我们可能会希望使用 * 来一次性导入:
那么如何去控制到底会导入effects的哪一个子包呢?
我们可以在 __init__.py 中定义一个名叫 __all__ 的列表,在这个列表中列出将要导出的子包名 , 如下所示:
这样from sound.effects import * 将导入 sound 包的三个命名子模块 。
如果没有定义 __all__,from sound.effects import * 语句不会从包 sound.effects 中导入所有子模块到当前命名空间;它只会导入包 sound.effects 。
Import 可以指定相对路径,我们使用 . 来表示当前包,使用 .. 来表示父包 。
如下所示:
python模块与函数的区别和联系?Python模块和Python函数都是Python中的重要概念,但是它们的作用和用法有所不同 。
Python模块指的是包含Python代码的文件,通常以.py文件扩展名结尾 。模块中可以包含多个函数、类和变量等,并且可以通过导入该模块来访问其中的内容 。Python中有许多内置的模块,如math、random等 , 也可以自定义模块 。模块的作用是将功能封装在一个文件中,方便代码管理和重用 。
Python函数是一段可重复使用的代码块,它接受输入参数并执行一系列操作,最后返回一个输出值 。函数可以接受任意数量的输入参数,也可以返回任意数量的输出值 。函数的作用是将一些重复的代码封装在一起,方便代码重用和维护 。
模块和函数之间的联系在于,一个模块可以包含多个函数 , 而函数通常定义在模块中 。在Python中,可以通过导入模块来使用其中的函数 。例如,如果有一个名为example.py的模块 , 其中包含一个名为add的函数,可以使用以下代码导入该模块并调用该函数:
import example
result = example.add(2, 3)
此外 , Python中还可以定义在函数内部的函数(也称为嵌套函数),这些函数可以在包含它们的函数中使用 , 但在函数外部无法访问 。

推荐阅读