分享

Python零基础入门之函数、类、模块详解!此篇包你掌握!

 jingxin95 2019-03-21

python代码组织架构

  • 对于小型代码,实现功能即可
  • 对于大中型代码,则需要进行代码封装,以方便重用和团队协作
Python零基础入门之函数、类、模块详解!此篇包你掌握!

私信小编001 获取进阶教程,全套哦!

本节主要介绍函数、类、模块

一、函数

我们已经使用了许多内建的函数,比如len、range、split等都是函数

是能重用的程序段,给一块代码起一个名字,然后在其它地方使用函数名字重复调用这块代码。

  • 函数的主要作用
  1. 重复使用:主要目的,一次封装可以任意的使用,如果变更函数则所有的使用方都会更新;
  2. 封装复杂代码逻辑:用一个简单的函数名,表达背后复杂的实现逻辑;
  • 函数的定义形式

def functionname(parameters):
"""
函数注释
"""
function_suite
return [expression]
  • 函数参数

正常情况下定义的参数需要按顺序传对应的参数;

参数可以设置默认值,调用时不用传这些参数的值;

关键字参数,可以用name=value的形式调用函数,并且顺序可以换;

传不可变对象string、tuple,数据不能被改变;传可变对象list、dict、set,数据可以被改变。

  • 函数返回值

可以用return返回函数的计算结果;

可以用逗号分隔返回多个值,调用时拆包获取各值;

  • 函数内变量的作用域

函数中定义的变量在函数外是不能使用的;

函数外面的变量是全局变量,可以读取,但是如果要更改,需要先用global关键字修饰;

  • lambda函数

称为匿名函数,函数的定义直接使用,不用起名字;

又称为一句话函数、逻辑简单到一行代码就能表达逻辑;

用于一些简单的、不会重复多次调用的情景;


定义形式:
lambda 参数:操作(参数)
定义举例:sum = lambda x,y: x+y
调用举例:sum(1,2)

使用场景:

既然逻辑能够在一行完成,那直接写逻辑即可,为什么要写成一个函数?

因为有些python的有些高级函数,比如list.sort、sorted、map、reduce等,它们的调用需要传一个函数作为参数传入。

二、类

类一般是名词,代表一类事物,比如学生、汽车、电脑;

类定义了一个模板,一个类可以有多个实例对象,每个实例对象有自己的具体的属性取值;

类是包含数据和方法的一个打包,其中的方法可以对数据进行更新;

猫是一个类,hellokity 是一个实例;

学生是一个类,小明同学和小王同学都是实例;

  • 定义方式:

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
  • 使用方法:

# 创建类的实例
# 会调用类的初始化函数__init__,不用传self
s1 = Student('xiaoming', 20)
s2 = Student('xiaowang', 25)
# 访问类的属性
print(Student.total_cnt)
# 访问实例的属性
print(s1.name, s1.age)
# 调用实例的方法
s1.set_grade(100)
  • 实例演示:

需求:用面向对象的方式解决学生成绩表问题,支持学生成绩导入,支持计算各科平均分最高分。

常用思路:把名词变成类、把数据变成属性、把动词变成方法(函数)

Python零基础入门之函数、类、模块详解!此篇包你掌握!

创建两个类:
类1:学生成绩表 SgradeTable---需求文档中的名词
属性:
学生成绩表:list(Sgrade)---需求文档中的数据
方法:
导入成绩表文件-----需求文档中的动词
计算各科的平均分---需求文档中的动词
计算各科的最高分---需求文档中的动词
类2:学生成绩 Sgrade---需求文档中的名词
属性:
学号------需求文档中的数据
语文成绩---需求文档中的数据
数学成绩---需求文档中的数据
英语成绩---需求文档中的数据

1、打开pycharm新建工程
2、打开工程,new->python package--calss_2
3、new->filte--input.txt
4、复制粘贴数据
Python零基础入门之函数、类、模块详解!此篇包你掌握!

5、new->python file--sgrade_test.py
----------------------------------------------------
class Sgrade:
"""
学生成绩
"""
def __init__(self, sno, yuwen, shuxue, yingyu):
"""
初始化方法
:param sno: 学号
:param yuwen: 语文成绩
:param shuxue: 数学成绩
:param 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):
"""
载入成绩表文件
:param fname_sgrade_table: 成绩表文件名
:return:
"""
with open("input.txt") as fin:
for line in fin:
line = line.strip()
sno, yuwen, shuxue, yingyu = line.split(" ")
sgrade = Sgrade(sno, yuwen, shuxue, yingyu)
self.sgrade_table.append(sgrade)
print("sgrade table size:", len(self.sgrade_table))
# 定义方法函数:计算平均分
def compute_avg_score(self):
"""
计算各科的平均分
:return:
"""
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):
"""
计算各科的最高分
:return:
"""
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())
print(sgrade_table.compute_max_score())

右击选择 run sgrage_test.py即可看到程序执行结果:


sgrade table size: 36
(65.86111111111111, 74.86111111111111, 80.83333333333333)
(88, 98, 99)

三、模块

  • 包package和模块module

包package是一个目录,里面包含__init__.py和模块;

模块module是文件,以.py为后缀名,包含类、函数、语句;

包和模块都是为了更好的对代码进行组织,实现可重用和可维护;

包的__init__.py用于区分普通目录,包可以多级嵌套;

  • 引入模块

import module1, module2
from pkg1.pkg2 import module
from pkg1.pkg2.module import function/class

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约