首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python入门(四):函数、类、模块

Python入门(四):函数、类、模块

作者头像
披头
发布2019-12-26 10:06:19
5640
发布2019-12-26 10:06:19
举报
文章被收录于专栏:datartisandatartisan

python代码组织架构

  • 对于小型代码,实现功能即可
  • 对于大中型代码,则需要进行代码封装,以方便重用和团队协作

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

一、函数

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

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

  • 函数的主要作用
  1. 重复使用:主要目的,一次封装可以任意的使用,如果变更函数则所有的使用方都会更新;
  2. 封装复杂代码逻辑:用一个简单的函数名,表达背后复杂的实现逻辑;
  • 函数的定义形式
def functionname(parameters):""" 函数注释"""function_suitereturn [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__,不用传selfs1 = Student('xiaoming', 20)s2 = Student('xiaowang', 25)# 访问类的属性print(Student.total_cnt)# 访问实例的属性print(s1.name, s1.age)# 调用实例的方法s1.set_grade(100)
  • 实例演示:

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

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

创建两个类:类1:学生成绩表 SgradeTable---需求文档中的名词属性:   学生成绩表:list(Sgrade)---需求文档中的数据方法:导入成绩表文件-----需求文档中的动词计算各科的平均分---需求文档中的动词计算各科的最高分---需求文档中的动词
类2:学生成绩 Sgrade---需求文档中的名词属性:学号------需求文档中的数据语文成绩---需求文档中的数据数学成绩---需求文档中的数据英语成绩---需求文档中的数据
1、打开pycharm新建工程2、打开工程,new->python package--calss_23、new->filte--input.txt4、复制粘贴数据
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("\t")                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 modulefrom pkg1.pkg2.module import function/class
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐享数据8090 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Prowork 团队协同
ProWork 团队协同(以下简称 ProWork )是便捷高效的协同平台,为团队中的不同角色提供支持。团队成员可以通过日历、清单来规划每⽇的工作,同时管理者也可以通过统计报表随时掌握团队状况。ProWork 摒弃了僵化的流程,通过灵活轻量的任务管理体系,满足不同团队的实际情况,目前 ProWork 所有功能均可免费使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档