第8天:模块和包

学习目标

  • 理解Python模块和包的概念
  • 学习如何创建和导入模块
  • 掌握标准库模块的使用
  • 学习如何使用包组织代码
学习内容
1. 模块的概念

模块是一个包含Python代码的文件,模块可以包含函数、类和变量,也可以包含可执行的代码。模块使你能够组织和重用代码。

创建模块

创建一个名为 mymodule.py 的文件:

# mymodule.py

def greet(name):
    return f"Hello, {name}!"

PI = 3.14159
 
导入模块

使用 import 语句导入模块:

import mymodule

print(mymodule.greet("Alice"))  # 输出: Hello, Alice!
print(mymodule.PI)  # 输出: 3.14159

使用 from ... import 语句导入模块的特定部分:

from mymodule import greet, PI

print(greet("Bob"))  # 输出: Hello, Bob!
print(PI)  # 输出: 3.14159
2. 标准库模块

Python标准库包含许多有用的模块,可以直接导入使用。以下是一些常用模块的示例:

math 模块
import math

print(math.sqrt(16))  # 输出: 4.0
print(math.pi)  # 输出: 3.141592653589793
datetime 模块
import datetime

now = datetime.datetime.now()
print(now)  # 输出: 当前日期和时间
os 模块
import os

print(os.getcwd())  # 输出: 当前工作目录
print(os.listdir('.'))  # 输出: 当前目录下的文件和文件夹
3. 包的概念

包是一个包含多个模块的目录。包通过在目录中包含一个名为 __init__.py 的特殊文件来创建。

创建包

创建一个包结构如下:

mypackage/
    __init__.py
    module1.py
    module2.py

module1.py 中定义一些函数和变量:

# mypackage/module1.py

def func1():
    return "Function 1"

var1 = "Variable 1"

module2.py 中定义一些函数和变量:

# mypackage/module2.py

def func2():
    return "Function 2"

var2 = "Variable 2"
导入包

使用 import 语句导入包:

import mypackage.module1
import mypackage.module2

print(mypackage.module1.func1())  # 输出: Function 1
print(mypackage.module2.func2())  # 输出: Function 2

使用 from ... import 语句导入包的特定部分:

from mypackage.module1 import func1, var1
from mypackage.module2 import func2, var2

print(func1())  # 输出: Function 1
print(var1)  # 输出: Variable 1
print(func2())  # 输出: Function 2
print(var2)  # 输出: Variable 2
今日任务
  1. 创建并使用模块:

    • 创建一个名为 math_operations.py 的模块,定义一些数学运算函数(如加法、减法、乘法和除法)。
# math_operations.py

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b != 0:
        return a / b
    else:
        return "Division by zero is undefined"
    • 创建一个Python脚本,导入 math_operations 模块并调用这些函数。
# math_operations.py

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b != 0:
        return a / b
    else:
        return "Division by zero is undefined"
  1. 使用标准库模块:

    • 编写代码,使用 math 模块计算一个数的平方根和圆的面积。
# math_example.py

import math

number = 16
radius = 5

sqrt_value = math.sqrt(number)
circle_area = math.pi * radius ** 2

print(f"The square root of {number} is {sqrt_value}")  # 输出: The square root of 16 is 4.0
print(f"The area of the circle with radius {radius} is {circle_area}")  # 输出: The area of the circle with radius 5 is 78.53981633974483
    • 编写代码,使用 datetime 模块获取当前日期和时间,并格式化输出。
# datetime_example.py

import datetime

now = datetime.datetime.now()

formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")

print(f"Current date and time: {formatted_date}")  # 输出: Current date and time: 2024-07-01 10:00:00
    • 编写代码,使用 os 模块获取当前工作目录并列出当前目录下的文件和文件夹。
# os_example.py

import os

current_directory = os.getcwd()
files_and_folders = os.listdir('.')

print(f"Current working directory: {current_directory}")  # 输出当前工作目录
print("Files and folders in the current directory:")
for item in files_and_folders:
    print(item)
  1. 创建并使用包:

    • 创建一个名为 utilities 的包,其中包含两个模块:string_utils.pyfile_utils.py
utilities/
    __init__.py
    string_utils.py
    file_utils.py
    • string_utils.py 中定义一些字符串操作函数(如大写转换、小写转换)。
# utilities/string_utils.py

def to_uppercase(s):
    return s.upper()

def to_lowercase(s):
    return s.lower()
    • file_utils.py 中定义一些文件操作函数(如读取文件内容、写入文件)。
# utilities/file_utils.py

def read_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

def write_file(file_path, content):
    with open(file_path, 'w') as file:
        file.write(content)
    • 创建一个Python脚本,导入 utilities 包并调用这些函数。
# main_utilities.py

from utilities.string_utils import to_uppercase, to_lowercase
from utilities.file_utils import read_file, write_file

# 使用字符串操作函数
s = "Hello, World!"
print(to_uppercase(s))  # 输出: HELLO, WORLD!
print(to_lowercase(s))  # 输出: hello, world!

# 使用文件操作函数
file_path = 'example.txt'
content = "This is a test file."

# 写入文件
write_file(file_path, content)

# 读取文件
read_content = read_file(file_path)
print(read_content)  # 输出: This is a test file.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/771232.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot3学习 | 第2篇】SpringBoot3整合+SpringBoot3项目打包运行

文章目录 一. SpringBoot3 整合 SpringMVC1.1 配置静态资源位置1.2 自定义拦截器(SpringMVC配置) 二. SpringBoot3 整合 Druid 数据源三. SpringBoot3 整合 Mybatis3.1 Mybatis整合3.2 声明式事务整合配置3.3 AOP整合配置 四. SpringBoot3 项目打包和运行…

界面材料知识

界面材料是用于填充芯片和散热器之间的空隙,将低导热系数的空气挤出,换成较高导热系数的材料,以提高芯片散热能力。参考下图 图片来源网上 热阻是衡量界面材料性能最终的参数,其中与热阻有关的有: 1、导热系数&#x…

(三十一)Flask之wtforms库【剖析源码下篇】

每篇前言: 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者 🔥🔥本文已收录于Flask框架从入门到实战专栏:《Flask框架从入…

使用java stream对集合中的对象按指定字段进行分组并统计

一、概述 有这样一个需求,在一个list集合中的对象有相同的name,我需要把相同name的对象进行汇总计算。使用java stream来实现这个需求,这里做一个记录,希望对有需求的同学提供帮助 一、根据指定字段进行分组 一、先准备好给前端要…

菱形继承和菱形虚拟继承

c具有多继承的特性,那么菱形继承就是多继承的一种特殊情况,但是菱形继承会出现一些问题,比如数据冗余和二义性; 那么怎么解决这个问题呢? 菱形虚拟继承 菱形虚拟继承的原理 class A { public:int _a; };class B: v…

Stable Diffusion【基础篇】:降噪强度(denoising strength)

提到降噪强度(denoising strength),大家一定不会陌生,这个参数是图生图中最关键的参数之一。今天在Stable Diffusion Art网站看到一篇介绍降噪强度(denoising strength)的文章(地址:…

【postgresql】版本学习

PostgreSQL 17 Beta 2 发布于2024-06-27。 PostgreSQL 17 Beta 2功能和变更功能的完整列表:PostgreSQL: Documentation: 17: E.1. Release 17 ​ 支持的版本: 16 ( 当前版本) / 15 / 14 / 13 / 12 ​ 不支持的版本: 11 / 10 / 9.6 / 9.5 /…

「前端」快速排序算法演示

快速排序算法演示。 布局描述 一个简单的HTML页面,用户可以在其中输入一系列用逗号分隔的数字。 一个CSS样式表,提供了一个美观大方的布局和样式。 一个JavaScript脚本,实现了快速排序算法,并在用户点击按钮时对输入的数字进行排序,并显示结果。 效果演示 核心代码 <…

Django创建项目

虚拟环境创建成功 使用命令行创建项目 创建一个文件夹&#xff0c;用pycharm打开&#xff0c;将之前创建好的虚拟环境选中&#xff08;这一步不在仔细赘述了&#xff0c;比较简单&#xff09; cd进入虚拟环境所在文件目录&#xff0c;打开虚拟环境pipenv shell 创建django项…

身边有填报志愿需求别错过!张雪峰透露今年志愿填报技巧:报专业,别报行业!(文末附稳定高薪专业推荐)

高考填报志愿是每个考生和家长都要面对的重大抉择。在当前就业形势日趋严峻、部分行业发展前景不明朗的大背景下,考生在填报志愿时更需要全面了解各个专业的就业前景,理性权衡自身兴趣特长与社会需求&#xff0c;而不是盲目跟风报考所谓的"热门专业"。 今天跟大家分…

对谈 MoonBit:AI 时代的编程语言应该是什么样子的?丨编码人声

「编码人声」是由「RTE开发者社区」策划的一档播客节目&#xff0c;关注行业发展变革、开发者职涯发展、技术突破以及创业创新&#xff0c;由开发者来分享开发者眼中的工作与生活。 本期节目&#xff0c;我们请到了 MoonBit 的创始人宏波和资深的开发者狼叔作为我们的嘉宾&…

人工智能在日常生活中的十大应用:从医疗到智能家居

人工智能已成为当今人类日常生活的重要组成部分&#xff0c;无论您是否意识到&#xff0c;它几乎在所有场景中都能提供帮助。每次您进行网络搜索、在线预订旅行、接收来自京东等购物平台的产品推荐又或是打开您的新浪、抖音时&#xff0c;都能看到影子&#xff0c;这些只是一些…

Python番外篇之代码编译与字节码

引言 关于字节码&#xff0c;不太想讲&#xff0c;不影响实际使用&#xff0c;对新手不友好…… 但是&#xff0c;涉及到新手经常碰到的问题的解惑&#xff0c;似乎又不得不讲。 最终&#xff0c;还是打算以番外篇的形式&#xff0c;稍微提一下。 不过&#xff0c;关于字节码的…

RabbitMQ入门教程(精细版二带图)

目录 六 RabbitMQ工作模式 6.1Hello World简单模式 6.1.1 什么是简单模式 6.1.2 RabbitMQ管理界面操作 6.1.3 生产者代码 6.1.4 消费者代码 6.2 Work queues工作队列模式 6.2.1 什么是工作队列模式 6.2.2 RabbitMQ管理界面操作 6.2.3 生产者代码 6.2.4 消费者代码 …

RAID详解

一、RAID存储是什么&#xff1f; RAID 存储&#xff08;Redundant Arrays of Independent Disks&#xff0c;独立磁盘冗余阵列&#xff09;是一种通过将多个独立的物理磁盘组合在一起&#xff0c;以实现更高的存储性能、数据可靠性和容错能力的技术。其主要目的是解决单个磁盘…

tapd 与国内外主流的8大项目管理软件大对比

对比Tapd与8大项目管理工具&#xff1a;PingCode、Worktile、Redmine、Teambition、广联达、Jira、禅道、飞书。 Tapd 是腾讯推出的一款敏捷开发管理工具&#xff0c;特别适合那些需要高效协作和快速迭代的敏捷开发团队。它支持多种敏捷方法论&#xff0c;包括Scrum和Kanban&am…

liunx文件系统,日志分析

文章目录 1.inode与block1.1 inode与block概述1.2 inode的内容1.3 文件存储1.4 inode的大小1.5 inode的特殊作用 2.硬链接与软链接2.1链接文件分类 3.恢复误删除的文件3.1 案例:恢复EXT类型的文件3.2 案例:恢复XFS类型的文件3.2.1 xfsdump使用限制 4.分析日志文件4.1日志文件4.…

Android10以上实现获取设备序列号功能

Android10以上实现获取设备唯一标识&#xff0c;目前只支持华为和荣耀设备。实现原理&#xff1a;通过无障碍服务读取序列号界面。 public class DeviceHelper implements Application.ActivityLifecycleCallbacks {static final String TAG "WADQ_DeviceHelper";s…

无人机智能追踪反制系统技术详解

随着无人机技术的飞速发展&#xff0c;无人机在各个领域的应用越来越广泛。然而&#xff0c;无人机的无序飞行和非法使用也带来了一系列安全隐患和威胁。因此&#xff0c;无人机智能追踪反制系统应运而生&#xff0c;成为维护公共安全和防止无人机滥用的重要工具。本文将详细介…

SPI四种模式--极性与相位

SPI的四种模式&#xff1a;相位和极性 极性 定义时钟空闲状态&#xff1a; CPOL0&#xff1a;时钟线在空闲状态为低电平 CPOL1&#xff1a;时钟线在空闲状态为高电平 这个设置决定了设备不进行通信时时钟线的状态。 兼容性&#xff1a; 不同的SPI设备可能需要不同的时钟极性…