08-python中的包与模块_import using_name if __name__ == ‘__main__‘ #说明这个模

本文介绍了如何在Python中通过模块重用代码,包括创建独立文件、使用import语句导入函数,以及如何利用__name__属性区分模块的执行方式。还讲解了包的概念,如何组织和导入模块,以及Python标准库的运用。
摘要由CSDN通过智能技术生成

你已经了解了如何在你的程序中通过定义一次函数工作来重用代码。那么如果你 想在你所编写的别的程序中重用一些函数的话,应该怎么办?正如你可能想象到的那样,答 案是模块(Modules)

编写模块有很多种方法,其中最简单的一种便是创建一个包含函数与变量、以 .py 为后缀的 文件

from…import 语句

import 语句允许在当前运行的程序文件中使用模块中的代码。通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。这还能让你在众多不同的程序中重用函数。

**将函数存储在独立文件中后,可与其他程 序员共享这些文件而不是整个程序。**知道如何导入函数还能让你使用其他程序员编写的函数库。

案例

from math import sqrt
print("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 mymodule 
mymodule.say_hi() 
print('Version', mymodule.__version__)

输出

Hi, mymodule 正在说话.Version 0.1

它是如何工作的

你会注意到我们使用相同的点符来访问模块中的成员。Python 很好地重用了其中的符号,这 充满了“Pythonic”式的气息,这使得我们可以不必学习新的方式来完成同样的事情。

下面是一个使用 from…import 语法的范本(保存为 mymodule_demo2.py ):

from mymodule import say_hi, __version__
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 为测试调用包的代码,目录结构如下:

test.pypackage_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 runfun1
from package_my.demo2 import runfun2
 
runfun1()
runfun2()

结果

package_my  初始化我在demo1.py我在demo2.py

总结

如同函数是程序中的可重用部分那般,模块是一种可重用的程序。包是用以组织模块的另一 种层次结构。Python 所附带的标准库就是这样一组有关包与模块

我们已经了解了如何使用这些模块并创建你自己的模块。

《python小白入门系列教程》

01-Python安装教程与特色介绍-小白python入门基础

02-python你应该知道这些

03python—9个基础常识-python小白入门系列

05-Python—列表、元祖、字典、集合操作大全:建议收藏

06 一篇,学会python循环与分支

07-Python函数详解

IT入门 感谢关注练习地址:www.520mg.com/it

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值