跟着我们一起学 Python 30天课程-第16天-模块基础Module Basics

作者 : IT 大叔 本文共4613个字,预计阅读时间需要12分钟 发布时间: 2020-08-22

今天,我花了一些时间探索Python中的模块。结构化和组织代码是开发的一个非常重要的方面。到目前为止,我们已经通过使用命名函数并创建用于组织功能的类在Python中构建代码。但是,当项目的大小增加时,将所有代码都保存在一个文件中非常困难,因为它的大小会变得很大,以读取和理解功能。通过使用模块可以解决此问题。Python中的模块是包含一些Python代码的Python文件(扩展名为.py)。使用模块,可以根据功能将单个文件拆分为多个文件或模块。模块是组织和重用代码的好方法。然后可以使用import关键字在另一个模块或交互式Python解释器中使用模块

假设我们的项目中有两个文件。main.pyutilities.pymain.py是将由解释器运行的文件。

utilities.py应具有的功能。

def tagify(content, tag):
    return f'<{tag}>{content}</{tag}>'


def emojifier(content, emoji):
    return f'{emoji} {content} {emoji}'

然后可以在这样的main.py文件中使用此功能

import utilities

result = utilities.tagify('hello world', 'p')

emoji_result = utilities.emojifier('python', '😍')

print(result)  # <p>hello world</p>
print(emoji_result)  # 😍 python 😍

因此,可以将这些实用程序功能导入并在任何文件中重用,从而改善了代码组织。

Ways of importing

import语法可通过多种方式用于导入模块

  • 重命名导入
import utilities as utils

result = utils.tagify('hello world', 'p')

emoji_result = utils.emojifier('python', '😍')

print(result)  # <p>hello world</p>
print(emoji_result)  # 😍 python 😍
  • from .. import声明

从模块导入特定名称而不导入整个模块

from utilities import tagify, emojifier

result = tagify('hello world', 'p')

emoji_result = emojifier('python', '😍')

print(result)  # <p>hello world</p>
print(emoji_result)  # 😍 python 😍
  • 使用*导入所有名称
from utilities import *
result = tagify('hello world', 'p')

emoji_result = emojifier('python', '😍')

print(result)  # <p>hello world</p>
print(emoji_result)  # 😍 python 😍

上面的导入方式不被认为是好的编程习惯,因为它会影响可读性,并且可能导致标识符重复定义。

__name__

__name__Python中有一个特殊的dunder属性,用于检查模块的名称。

# utilities.py
print(__name__)  # utilities


def tagify(content, tag):
    return f'<{tag}>{content}</{tag}>'


def emojifier(content, emoji):
    return f'{emoji} {content} {emoji}'
# main.py
from utilities import tagify, emojifier

print(__name__)  # __main__
result = tagify('hello world', 'p')

emoji_result = emojifier('python', '😍')

print(result)  # <p>hello world</p>
print(emoji_result)  # 😍 python 😍

注意:由解释器运行的文件的__name__返回__main__。碰巧这里文件名也是主文件。但是,文件名可以是任何东西。在Python中,有一种常见的做法是根据模块是否为主模块的条件执行代码块。

# main.py
from utilities import tagify, emojifier

print(__name__)
result = tagify('hello world', 'p')

emoji_result = emojifier('python', '😍')

print(result)  # <p>hello world</p>
print(emoji_result)  # 😍 python 😍

if (__name__ == '__main__'):
    print('This is the main module'
          )  # This line gets printed as its the main module

Packages

包只是放在文件夹中的一组模块。包用于将具有类似功能的模块组合在一起,就像我们将所有音乐文件保存在音乐文件夹中,将所有视频保存在视频文件夹中以更好地组织文件一样。每个Python模块都需要包含一个__init.py__文件。这使Python解释器知道该目录是Python包。

让我们将实用程序模块放在名为helper的目录中。该帮助程序目录需要有一个__init.py__文件才能使其成为一个包。然后可以将该包导入到主文件中,如下所示:

# main.py
import helper.utilities

result = helper.utilities.tagify('hello world', 'p')

emoji_result = helper.utilities.emojifier('python', '😍')

print(result)  # <p>hello world</p>
print(emoji_result)  # 😍 python 😍

if (__name__ == '__main__'):
    print('This is the main module')

这样可以使上面的导入更加方便

from helper.utilities import tagify, emojifier

result = tagify('hello world', 'p')

emoji_result = emojifier('python', '😍')

print(result)  # <p>hello world</p>
print(emoji_result)  # 😍 python 😍

if (__name__ == '__main__'):
    print('This is the main module')

内置模块 Built-in modules

Python附带了许多内置模块。在安装Python时,这些模块与Python解释器一起下载。在其他一些编程语言中,这些也称为标准库。这些模块由Python核心团队开发和维护,并提供开箱即用的功能来完成许多很酷的事情,例如读取文件,处理音频数据,处理电子邮件等等。所有Python标准模块的列表

可以像导入其他任何用户创建的模块一样导入这些模块。

让我们使用一个内置模块time来创建一个高阶函数,该函数估计运行一个函数所花费的时间。

import time  # built-in Python module

def list_maker(max_items):
    result = []
    for item in range(max_items):
        result.append(item)
    return result

def higher_order(func):
    def wrapper(item):
        time_start = time.time()
        list_maker(item)
        time_end = time.time()
        time_diff = time_end - time_start
        print(f'took {time_diff} seconds')

    return wrapper

res = higher_order(list_maker)
print(res(100000))

注意:结果将因系统配置而异。

函数式编程部分,我们之前也使用了内置模块functools来导入reduce函数。

今天就这些。明天将探讨与Python中的模块相关的其余概念,例如使用外部Python包等。

跟着我们一起学 Python 30天课程目录:

  1.  跟着我们一起学 Python 30天课程-第30天-免费Python资源 
  2.  跟着我们一起学 Python 30天课程-第29天-自动化测试 
  3.  跟着我们一起学 Python 30天课程-第28天-ML和数据科学II 
  4.  跟着我们一起学 Python 30天课程-第27天-ML和数据科学I 
  5.  跟着我们一起学 Python 30天课程-第26天-机器学习基础 
  6.  跟着我们一起学 Python 30天课程-第25天-Web 开发进阶
  7.  跟着我们一起学 Python 30天课程-第24天-Web开发基础 
  8.  跟着我们一起学 Python 30天课程-第23天-网页爬虫 
  9.  跟着我们一起学 Python 30天课程-第22天-脚本额外功能Scripting Extras 
  10.  跟着我们一起学 Python 30天课程-第21天-脚本编写基础 
  11.  跟着我们一起学 Python 30天课程-第20天-调试和测试 
  12.  跟着我们一起学 Python 30天课程-第19天-正则表达式 
  13.  跟着我们一起学 Python 30天课程-第18天-文件I / O 
  14.  跟着我们一起学 Python 30天课程-第17天-外部模块External Modules 
  15.  跟着我们一起学 Python 30天课程-第16天-模块基础Module Basics 
  16.  跟着我们一起学 Python 30天课程-第15天-生成器Generators 
  17.  跟着我们一起学 Python 30天课程-第14天-错误处理Error Handling 
  18.  跟着我们一起学 Python 30天课程-第13天-Decorators 
  19.  跟着我们一起学 Python 30天课程-第12天-Lambda Expressions & Comprehensions 
  20.  跟着我们一起学 Python 30天课程-第11天-函数编程Functional Programming基础 
  21.  跟着我们一起学 Python 30天课程-第10天-OOP Missing Pieces 
  22.  跟着我们一起学 Python 30天课程-第9天-OOP Pillars 
  23.  跟着我们一起学 Python 30天课程-第8天-OOP基础知识 
  24.  跟着我们一起学 Python 30天课程-第7天-开发环境搭建(Developer Environment) 
  25.  跟着我们一起学 Python 30天课程-第6天-循环II和函数(Loops II & Functions) 
  26.  跟着我们一起学 Python 30天课程-第5天-条件和循环I(Conditions & Loops I) 
  27.  跟着我们一起学 Python 30天课程-第4天-数据类型III(Data Types III) 
  28.  跟着我们一起学 Python 30天课程-第3天-数据类型II(Data Types II) 
  29.  跟着我们一起学 Python 30天课程-第2天-数据类型I(Data Types I) 
  30.  跟着我们一起学 Python 30天课程-第1天-简介 
免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 跟着我们一起学 Python 30天课程-第16天-模块基础Module Basics

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论