Python基础教程——项目的组织结构:包、模块、类、函数(实例)!

news2024/11/27 15:31:26

在这里插入图片描述

01 几个重要的概念

1.1 :可以简单的理解为文件夹的概念
注解:包package是一个文件夹(目录),里面包含__init__.py和模块;

1.2 模块:简单的理解为 .py文件
注解:模块module是文件,以.py为后缀名,包含类、函数、语句

1.3 class

class Student:           
""" 类注释 """           
# 类变量,所有实例共享
total\_cnt_ = 0           
def _init__(self, name, age):                   
""" 初始化方法 """           
# 普通实例变量,每个实例独有                   
self.name = name                   
self.age = age                   
Student.total_cnt += 1           
def set_grade(self, grade):                   
""" 普通方法 """                   
self.grade = grade

1.4 函数:类由3个部分构成:类名、变量(属性)、方法(行为/功能/函数)

在这里插入图片描述

①项目project②包package③文档文件④模块/.py文件

02 实例需求分析

# 需求:用面向对象的方式解决学生成绩表问题,支持学生成绩导入,支

持计算各科平均分、最高分。

03 程序编写与分析
# #############################################################
#  这是一个拆分字符串测试。通过指定分隔符将字符串进行切片,并返回分割后的字符串列表[list]
#  参数:str:分隔符,默认为空格,但不能为空("")
u = "www.google.com"
print(u.split('.'))
#  输出:['www', 'google', 'com']
print(u.split('.')[0])
#  输出:www
u = "www google com"
print(u.split(' '))
#  输出:['www', 'google', 'com']
##############################################################
#  这是一个读文件测试
#  fp作为文件指针
#  实质是一个迭代器,因此在for循环中可以不断迭代
fp = open("input.txt", 'r')
for line in fp:
print(line)
# 在for循环内一直输出7行
# 第一次输出:s001/66/78/89
# 第二次输出:s002/77/67/69``fp.close
#  函数的主要作用
#  重复使用:主要目的,一次封装可以任意的使用,如果变更函数则所有的使用方都会更新;
#  封装复杂代码逻辑:用一个简单的函数名,表达背后复杂的实现逻辑;
#  类一般是名词,代表一类事物,比如学生、汽车、电脑;
#  类定义了一个模板,一个类可以有多个实例对象,每个实例对象有自己的具体的属性取值;
#  类是包含数据和方法的一个打包,其中的方法可以对数据进行更新;
#  学生是一个类,小明同学和小王同学都是实例;
#  需求:用面向对象的方式解决学生成绩表问题,支持学生成绩导入,支持计算各科平均分、最高分。
#  常用思路:把名词变成类、把数据变成属性、把动词变成方法(函数)
#  学生成绩的类 这个类只有属性没有方法
class Sgrade:
# 在Python中定义类经常会用到__init__函数(方法)
# 首先需要理解的是,两个下划线开头的函数是声明该属性为私有,不能在类的外部被使用或访问。
# __init__函数(方法)的第一个参数必须为self,后续参数为自己定义。
def __init__(self, sno, yuwen, shuxue, yingyu):
"""
初始化方法
sno: 学号
yuwen: 语文成绩`shuxue: 数学成绩
yingyu: 英语成绩
"""        
self.sno = sno
self.yuwen = int(yuwen)
self.shuxue = int(shuxue)
self.yingyu = int(yingyu)
#  学生成绩表的类 这个类有属性、有方法
class SgradeTable:
# 定义方法函数:导入数据
def __init__(self):
#  列表
self.sgrade_table = []
#  载入学生成绩表文件的方法
def load_data(self, fname_sgrade_table):
#  input.txt文件需要放在项目文件夹下
#  with语句的优化作用:
with open("input.txt") as fin:
#  最简单的按照行读取的方法
#  for循环
for line in fin:
#  strip()用于移除字符串头尾指定的字符(例如空格或换行符等)。
#  split(",")则是数据中遇到","就隔开。
#  拆分字符串,通过指定分隔符将字符串进行切片,并返回分割后的字符串列表[list]
sno, yuwen, shuxue, yingyu =line.strip().split("/")
print(sno, yuwen, shuxue, yingyu)
# 在for循环内一直输出7行
# 第一次输出:s001 66 78 89
# 第二次输出:s002 77 67 69
# 每次for循环更新sgrade
sgrade = Sgrade(sno, yuwen, shuxue, yingyu)
#  append() 函数可以向列表末尾添加元素,每次for循环更新列表self.sgrade_table
self.sgrade_table.append(sgrade)
print("sgrade table size:", len(self.sgrade_table))
# 定义方法函数:计算平均分
def compute_avg_score(self):
"""
计算各科的平均分
"""
yuwen_total, shuxue_total, yingyu_total = 0,0,0
for sgrade in self.sgrade_table:
yuwen_total += sgrade.yuwen
shuxue_total += sgrade.shuxue
yingyu_total += sgrade.yingyu
count = len(self.sgrade_table)
return yuwen_total/count, shuxue_total/count, yingyu_total/count
# 定义方法函数:计算最高分
def compute_max_score(self):
"""
计算各科的最高分
"""
yuwen_max, shuxue_max, yingyu_max = 0, 0, 0
for sgrade in self.sgrade_table:
if sgrade.yuwen>yuwen_max:
yuwen_max = sgrade.yuwen
if sgrade.shuxue>shuxue_max:
shuxue_max = sgrade.shuxue
if sgrade.yingyu>yingyu_max:
yingyu_max = sgrade.yingyu
return yuwen_max, shuxue_max, yingyu_max
# 创建成绩表的实例
sgrade_table = SgradeTable()
# 加载成绩表文件
sgrade_table.load_data("input.txt")
# 打印平均分和最高分
print(sgrade_table.compute_avg_score())
#  各科平均分  输出:(63.42857142857143, 62.285714285714285, 90.0)
print(sgrade_table.compute_max_score())
#  各科最高分  输出:(100, 98, 100)

搞清楚整个项目的逻辑思维,项目写起来就会得心应手!
通过“结构”,指的是在项目中为实现其目标所做的决策。需要考虑如何充分利用Python的特性来创建清晰、高效的代码。从实际角度来看,“结构”意味着创建清晰的代码,其逻辑和依赖关系清晰明了,以及文件和文件夹在文件系统中的组织方式。

最后这里免费分享给大家一份Python学习资料,包含视频、源码。课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
编程资料、学习路线图、源代码、软件安装包等!

看下方图片哦(掉落)↓↓↓

Python所有方向的学习路线图,清楚各个方向要学什么东西
100多节Python课程视频,涵盖必备基础、爬虫和数据分析
100多个Python实战案例,学习不再是只会理论
华为出品独家Python漫画教程,手机也能学习
历年互联网企业Python面试真题,复习时非常方便****

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚信科技AntDB数据库——深入了解AntDB-M元数据锁的实现(一)

锁的获取 5.1 锁的强弱 当线程已经持有的锁比新申请的锁更强时,认为已经持有了锁,无需再对申请锁类型加锁。锁的强弱指持有的锁与其他锁的不兼容集合大小,集合相同锁相同,集合更大锁更强,否则无强弱关系。通过锁的兼…

Python---多任务的介绍

1. 提问 利用现学知识能够让两个函数或者方法同时执行吗? 不能,因为之前所写的程序都是单任务的,也就是说一个函数或者方法执行完成另外一个函数或者方法才能执行,要想实现这种操作就需要使用多任务。 多任务的最大好处是充分利用CPU资源&…

后端相关随机题目记录(1)

目录 后端相关随机题目记录(1) 后端相关随机题目记录(1)Bean的类型以及作用域Bean的生命周期Mysql的底层数据结构RedisHttp和Https区别AOP在项目的应用 自定义注解?请求在spring中的一个流程Nacos与zk的区别SpringMV…

八.创建和管理表

目录 1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2. 创建和管理数据库2.2 使用数据库2.3 修改数据库 3. 创建表3.1 创建方式13.2 创建方式23.4 查看数据表结构 4. 修改表4.1 追加一个列4.2 修改一个列4.3 重命名一个列4.4 删除一个列 5. 重命名…

Linux - 非root用户使用systemctl管理服务

文章目录 方式一 (推荐)1. 编辑sudoers文件:2. 设置服务文件权限:3. 启动和停止服务: 方式二1. 查看可用服务:2. 选择要配置的服务:3. 创建自定义服务文件:4. 重新加载systemd管理的…

Java 图片文件上传下载处理

Java 图片文件上传下载处理 下载 做这玩意给我恶心坏了 下载 直接访问上传的路径就可以下载图片了。但是我们往往会包一层接口,以流的方式读取 url 的内容然后返回给前端,这么做的优点是: 内网域名转外网域名,做业务校验并且让用…

【C++】new 和 delete

目录 一 引言 二 new 三 delete 四 new和delete操作自定义类型 五 operator new与operator delete函数 六 new和delete的实现原理 1 内置类型 2 自定义类型 1 new的原理 2 delete的原理 3 new T[N]的原理 4 delete[]的原理 七 定位new表达式(placement-new) 八 …

【Android Studio】各个版本下载地址

下载地址: https://developer.android.com/studio/archive?hlzh-cn

HashMap扩容机制详解

目录 1. 扩容的触发条件 2. 扩容的具体步骤 2.1 计算新的容量 2.2 创建新的桶数组 2.3 将元素重新分配到新的桶数组中 2.4 更新容量和阈值 3. 与并发性能的关系 4. 扩容的性能优化 5. 总结 HashMap是Java中常用的数据结构之一,用于存储键值对。在HashMap内…

系列十、存储引擎

一、存储引擎 1.1、概述 大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。 比如,对于舰载机、直升机、火箭来说,它们都有各自的引擎,引擎是它们最为核心的组件。…

RHEL8_Linux_Ansible常用模块的使用

本章主要介绍Ansible中最常见模块的使用 shell模块文件管理模块软件包管理模块服务管理模块磁盘管理模块用户管理模块防火墙管理模块 ansible的基本用法如下。 ansible 机器名 -m 模块x -a "模块的参数" 对被管理机器执行不同的操作,只需要调用不同的模块…

Pipelined-ADC设计一:序言

现在是2023年12月18日,准备开新帖,设计一个 流水线型 模数转换器( Pipelined-ADC )。记录帖,后续会放在咸鱼。同步记录,谨防盗用。 初定指标:12位50Mhz,采用2.5bit每级结构&#xff…

Goland如何进行Debug断点调试

1. 进入编辑 2. 进行编辑 3. 调试运行 将鼠标移到按钮上,即显示其功能与快捷键 4. 常用调试快捷键 按键说明F7单步执行(进入方法)F8单步执行(不进入方法)F9继续执行

如何实现TensorFlow自定义算子?

在上一篇文章中 Embedding压缩之基于二进制码的Hash Embedding,提供了二进制码的tensorflow算子源码,那就顺便来讲下tensorflow自定义算子的完整实现过程。 前言 制作过程基于tensorflow官方的custom-op仓库以及官网教程,并且在Ubuntu和Mac…

算法:单链表反转

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、问题描述 二、栈解法Stack 三、三指针法 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、问题描述 有个单链表,现…

【Qt之Quick模块】1. 概述及Quick应用程序创建流程

概述 Qt的Quick模块是用于创建现代化、动态和响应式用户界面的工具集。它是基于QML(Qt Meta-Object Language)和JavaScript的。 QML是一种声明性的语言,用于描述用户界面的结构和行为。它使用层叠样式表(CSS)的语法来…

创建型模式之简单工厂模式

一、概述 (1)简单工厂模式并不是一个标准的设计模式,但是它太常用了,简单而又神奇 (2)在简单工厂模式中用于创建实例的方法通常是静态方法,因此又被称为静态工厂方法模式 (3)要点:如果需要什么,只需传入一个正确的参…

鞋帽箱包品牌网站作用如何

鞋帽箱包是市场中很常见的产品,同时需求度又很高,是人们生活所需,除了个别高端品牌外,其它多数产品价格一般都比较低,因此很少有人会在意品牌,只要质量、价格、舒适度、美观好即可。 然而对企业来讲&#…

滑动窗口(一)

滑动窗口 什么是滑动窗口算法?通俗的来讲就是 “同向双指针” ,当一组数据的规律含有单调性的时候,就可以使用下面这套逻辑来优化暴力解法。 当两个指针同向移动的时候,类似于一个窗口在滑动。使用于在连续序列里找特殊的子串、…

计算机网络基础——网线认识与制作,线缆类型、线序、端接标准及注意事项

一、引言 网线制作是网络基础知识中不可或缺的。网络传输过程中,网线的质量和制作方法都会直接影响传输的速度和稳定性。本文将详细介绍网线制作的基础知识、线缆类型、线序、端接标准及注意事项。希望通过本文,读者能够更好地了解和掌握网线制作的方法…