Python 08版本中,如何区分包和模块?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1897个文字,预计阅读时间需要8分钟。
在程序中,通过定义函数来重用代码是一种高效的方法。如果你想在不同的程序中重用某些函数,可以采用以下步骤:
1. 创建模块:将常用的函数放入一个模块文件中,例如命名为`my_functions.py`。
2. 导出函数:在模块文件中,使用`def`关键字定义函数,并在函数定义前加上`export`关键字(在某些编程语言中可能需要使用`@export`装饰器)。
3. 导入模块:在其他程序中,使用`import`语句导入这个模块,就可以使用其中的函数了。
例如,如果你的`my_functions.py`模块中有一个函数`add_numbers`:
pythonmy_functions.pyexport def add_numbers(a, b): return a + b
然后在另一个程序中,你可以这样使用:
pythonother_program.pyimport my_functions as mf
result=mf.add_numbers(3, 4)print(result) # 输出 7
这样,你就可以在不同的程序中重用`add_numbers`函数了。
你已经了解了如何在你的程序中通过定义一次函数工作来重用代码。那么如果你想在你所编写的别的程序中重用一些函数的话,应该怎么办?正如你可能想象到的那样,答案是模块(Modules)
编写模块有很多种方法,其中最简单的一种便是创建一个包含函数与变量、以.py为后缀的文件
from..import语句
import语句允许在当前运行的程序文件中使用模块中的代码。通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。这还能让你在众多不同的程序中重用函数。
将函数存储在独立文件中后,可与其他程 序员共享这些文件而不是整个程序。知道如何导入函数还能让你使用其他程序员编写的函数库。
案例
from math import sqrtprint("16开平方是", sqrt(16))
输出
16开平方是 4.0模块的__name__
每个模块都有一个名称,而模块中的语句可以找到它们所处的模块的名称。这对于确定模块 是独立运行的还是被导入进来运行的这一特定目的来说大为有用。正如先前所提到的,当模 块第一次被导入时,它所包含的代码将被执行。
我们可以通过这一特性来使模块以不同的方式运行,这取决于它是为自己所用还是从其它模块中导入而来。这可以通过使用模块的__name__属性来实现。
案例(保存为module_using_name.py):
if __name__ == '__main__':print('这个程序是自己运行的')
else:
print('我是从其他模块导入的')
输出:
这个程序是自己运行的在python控制台导入
import module_using_name# 输出:我是从其他模块导入的
它是如何工作的
每一个Python模块都定义了它的__name__属性。如果它与__main__属性相同则代表这一 模块是由用户独立运行的,因此我们便可以采取适当的行动。
编写你自己的模块
编写你自己的模块很简单,这其实就是你一直在做的事情!这是因为每一个Python程序同时 也是一个模块。你只需要保证它以.py为扩展名即可。下面的案例会作出清晰的解释。
案例(保存为mymodule.py):
def say_hi():print('Hi, mymodule 正在说话.')
__version__ = '0.1'
要记住该模块应该放置于与其它我们即将导入这一模块的程序相同的目录下,
另一个模块(保存为mymodule_demo.py):
import mymodulemymodule.say_hi()
print('Version', mymodule.__version__)
输出
Hi, mymodule 正在说话.Version 0.1
它是如何工作的
你会注意到我们使用相同的点符来访问模块中的成员。Python很好地重用了其中的符号,这充满了“Pythonic”式的气息,这使得我们可以不必学习新的方式来完成同样的事情。
下面是一个使用from...import语法的范本(保存为mymodule_demo2.py):
say_hi()
print('Version', __version__)
mymodule_demo2.py所输出的内容与mymodule_demo.py所输出的内容是一样的
在这里需要注意的是,如果导入到mymodule中的模块里已经存在了__version__这一名称,那将产生冲突。
这可能是因为每个模块通常都会使用这一名称来声明它们各自的版本号。因此,我们大都推荐最好去使用import语句,尽管这会使你的程序变得稍微长一些。
你还可以使用:
from mymodule import这将导入诸如say_hi等所有公共名称,但不会导入__version__名称,因为后者以双下划线开头。
警告:要记住你应该避免使用 from mymodule import *这种形式
Python的一大指导原则是“明了胜过晦涩”这样的话你都不知道函数是在哪定义,哪儿导入的
包
现在,你必须开始遵守用以组织你的程序的层次结构。变量通常位于函数内部,函数与全局变量通常位于模块内部。
如果你希望组织起这些模块的话,应该怎么办?这便是包(Packages)应当登场的时刻。
包是指一个包含模块与一个特殊的__init__.py文件的文件夹,后者向Python表明这一文 件夹是特别的,因为其包含了Python模块。
具备一定功能的工具
包含很多工具、功能强大的工具箱
python中的模块
python中的包(模块包/程序包)
考虑一个在package_my目录下的demo1.py、demo2.py、__init__.py文件,test.py 为测试调用包的代码,目录结构如下:
package_my
|-- __init__.py
|-- demo1.py
|-- demo2.py
package_my/demo1.py
def runfun1():print "我在demo1.py"
package_my/demo2.py
def runfun2():print "我在demo2.py"
package_my/__init__.py
if __name__ == '__main__':print '作为主程序运行'
else:
print 'package_my 初始化'
test.py
from package_my.demo1 import runfun1from package_my.demo2 import runfun2
runfun1()
runfun2()
结果
package_my 初始化我在demo1.py
我在demo2.py
总结
如同函数是程序中的可重用部分那般,模块是一种可重用的程序。包是用以组织模块的另一种层次结构。Python所附带的标准库就是这样一组有关包与模块
我们已经了解了如何使用这些模块并创建你自己的模块。
IT入门感谢关注
本文共计1897个文字,预计阅读时间需要8分钟。
在程序中,通过定义函数来重用代码是一种高效的方法。如果你想在不同的程序中重用某些函数,可以采用以下步骤:
1. 创建模块:将常用的函数放入一个模块文件中,例如命名为`my_functions.py`。
2. 导出函数:在模块文件中,使用`def`关键字定义函数,并在函数定义前加上`export`关键字(在某些编程语言中可能需要使用`@export`装饰器)。
3. 导入模块:在其他程序中,使用`import`语句导入这个模块,就可以使用其中的函数了。
例如,如果你的`my_functions.py`模块中有一个函数`add_numbers`:
pythonmy_functions.pyexport def add_numbers(a, b): return a + b
然后在另一个程序中,你可以这样使用:
pythonother_program.pyimport my_functions as mf
result=mf.add_numbers(3, 4)print(result) # 输出 7
这样,你就可以在不同的程序中重用`add_numbers`函数了。
你已经了解了如何在你的程序中通过定义一次函数工作来重用代码。那么如果你想在你所编写的别的程序中重用一些函数的话,应该怎么办?正如你可能想象到的那样,答案是模块(Modules)
编写模块有很多种方法,其中最简单的一种便是创建一个包含函数与变量、以.py为后缀的文件
from..import语句
import语句允许在当前运行的程序文件中使用模块中的代码。通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。这还能让你在众多不同的程序中重用函数。
将函数存储在独立文件中后,可与其他程 序员共享这些文件而不是整个程序。知道如何导入函数还能让你使用其他程序员编写的函数库。
案例
from math import sqrtprint("16开平方是", sqrt(16))
输出
16开平方是 4.0模块的__name__
每个模块都有一个名称,而模块中的语句可以找到它们所处的模块的名称。这对于确定模块 是独立运行的还是被导入进来运行的这一特定目的来说大为有用。正如先前所提到的,当模 块第一次被导入时,它所包含的代码将被执行。
我们可以通过这一特性来使模块以不同的方式运行,这取决于它是为自己所用还是从其它模块中导入而来。这可以通过使用模块的__name__属性来实现。
案例(保存为module_using_name.py):
if __name__ == '__main__':print('这个程序是自己运行的')
else:
print('我是从其他模块导入的')
输出:
这个程序是自己运行的在python控制台导入
import module_using_name# 输出:我是从其他模块导入的
它是如何工作的
每一个Python模块都定义了它的__name__属性。如果它与__main__属性相同则代表这一 模块是由用户独立运行的,因此我们便可以采取适当的行动。
编写你自己的模块
编写你自己的模块很简单,这其实就是你一直在做的事情!这是因为每一个Python程序同时 也是一个模块。你只需要保证它以.py为扩展名即可。下面的案例会作出清晰的解释。
案例(保存为mymodule.py):
def say_hi():print('Hi, mymodule 正在说话.')
__version__ = '0.1'
要记住该模块应该放置于与其它我们即将导入这一模块的程序相同的目录下,
另一个模块(保存为mymodule_demo.py):
import mymodulemymodule.say_hi()
print('Version', mymodule.__version__)
输出
Hi, mymodule 正在说话.Version 0.1
它是如何工作的
你会注意到我们使用相同的点符来访问模块中的成员。Python很好地重用了其中的符号,这充满了“Pythonic”式的气息,这使得我们可以不必学习新的方式来完成同样的事情。
下面是一个使用from...import语法的范本(保存为mymodule_demo2.py):
say_hi()
print('Version', __version__)
mymodule_demo2.py所输出的内容与mymodule_demo.py所输出的内容是一样的
在这里需要注意的是,如果导入到mymodule中的模块里已经存在了__version__这一名称,那将产生冲突。
这可能是因为每个模块通常都会使用这一名称来声明它们各自的版本号。因此,我们大都推荐最好去使用import语句,尽管这会使你的程序变得稍微长一些。
你还可以使用:
from mymodule import这将导入诸如say_hi等所有公共名称,但不会导入__version__名称,因为后者以双下划线开头。
警告:要记住你应该避免使用 from mymodule import *这种形式
Python的一大指导原则是“明了胜过晦涩”这样的话你都不知道函数是在哪定义,哪儿导入的
包
现在,你必须开始遵守用以组织你的程序的层次结构。变量通常位于函数内部,函数与全局变量通常位于模块内部。
如果你希望组织起这些模块的话,应该怎么办?这便是包(Packages)应当登场的时刻。
包是指一个包含模块与一个特殊的__init__.py文件的文件夹,后者向Python表明这一文 件夹是特别的,因为其包含了Python模块。
具备一定功能的工具
包含很多工具、功能强大的工具箱
python中的模块
python中的包(模块包/程序包)
考虑一个在package_my目录下的demo1.py、demo2.py、__init__.py文件,test.py 为测试调用包的代码,目录结构如下:
package_my
|-- __init__.py
|-- demo1.py
|-- demo2.py
package_my/demo1.py
def runfun1():print "我在demo1.py"
package_my/demo2.py
def runfun2():print "我在demo2.py"
package_my/__init__.py
if __name__ == '__main__':print '作为主程序运行'
else:
print 'package_my 初始化'
test.py
from package_my.demo1 import runfun1from package_my.demo2 import runfun2
runfun1()
runfun2()
结果
package_my 初始化我在demo1.py
我在demo2.py
总结
如同函数是程序中的可重用部分那般,模块是一种可重用的程序。包是用以组织模块的另一种层次结构。Python所附带的标准库就是这样一组有关包与模块
我们已经了解了如何使用这些模块并创建你自己的模块。
IT入门感谢关注

