python第三周学习总结
- 函数参数
- 可变参数*args
- 高阶函数
- 关键字函数
- 命名关键字
- 类与对象
- 类的装饰器
- 类之间的关系
- 继承
- pygame
- 文件流
- 文件的读写
- 步骤
- 异常处理
- 文件的读写
- json
- JSON 函数
- json.dumps
- json.loads
- encode
- decode
- 通过网络数据接口获得数据
- 过程
- JSON 函数
函数参数
可变参数*args
在函数内部,参数*args接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数
# def say_hello(*args):
高阶函数
把函数作为参数传入,这样的函数称为高阶函数
def calc(my_list, op):total = my_list[0]for index in range(1, len(my_list)):total = op(total, my_list[index])return total
def add(x, y):return x + y
def mul(x, y):return x * y
calc函数中的第二个参数也是个函数, 代表二元运算
这样calc函数就不需要跟某一种特定的二元运算耦合在一起
所以calc函数变得通用性更强, 可以由传入的第二个参数来决定执行何种运算
高内聚 低耦合 high cohesion low coupling
一个函数做好一件事, 一个类只做一件事
关键字函数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
def say_hello(**kwargs):for key in kwargs:print(key, ':', kwargs[key]) say_hello(**param)
如果希望一个字典作为参数传入,需要打两个*
say_hello(**param)
列表、元组打一个*
命名关键字
# *为分隔符
def bar():def foo(a, b, c, *, name, age):print(a + b + c)print(name, ':', age)return foox = bar()
print(x(2, 4, 1, name='GL', age=23))
类与对象
类的装饰器
属性装饰器用于类的外部通过对象访问类的内部属性
修改器用于类的外部通过对象访问类的内部属性
# 关联装饰器
@record
# 属性装饰器
@property
# 修改器
@pro_name.setter
Python没有从语言层面支持抽象类的概念
我们可以通过abc模块来制造抽象类的效果
在定义类的时候通过指定metaclass=ABCMeta可以将类声明为抽象类
抽象类是不能建立对象的 抽象类存在的意义是专门拿给其他类继承的
abc模块中还有一个包装器abstractmethod
通过这个包装器可以将方法包装为抽象方法 必须要求子类进行重写
多个子类通过重写抽象方法实现了多态
# 强制子类重写方法
# 抽象方法
@abstractmethod
静态方法
只用于类内部而不给对象使用的类内部函数不用self的参数
@staticmethod
def is_valid(a, b, c):
# classmethod传入的第一个参数相当于self
@classmethod
def is_valid(cls, a, b, c):
类之间的关系
线段上有两个点 - has - a - 关联
人使用了房子 - use - a - 依赖
学生是人 - is - a - 继承
继承
继承 - 从已有的类创建新类的过程
提供继承信息的称为父类(超类/基类)
得到继承信息的称为子类(派生类/衍生类)
通过继承我们可以将子类的重复代码抽取的父类中
之类通过继承并复用这些代码来减少重复代码的编写
# 父类
class Person(object):def __init__(self, name, age):self._age = ageself._name = name@propertydef name(self):return self._name@propertydef age(self):return self._agedef play(self):print(self.name + ' is playing')# 子类
class Teacher(Person):def __init__(self, name, age):# 父类成员初始化super().__init__(name, age)def teach(self):print(self.name + ' is teaching')# 方法重写(override) 覆盖/置换/覆写# 子类在继承父类的方法之后,对方法进行了重新实现# 给子类对象发送play消息时执行的是子类重写后的新实现def play(self):print(self.name + ' is happy playing')
pygame
创建pygame窗口应用的流程:
# 初始化
pygame.init()
# 窗口应用名称
pygame.display.set_caption('Games')
# 创建应用、赋予对象并设置窗口大小
screen = pygame.display.set_mode([640, 640])
# 窗口背景颜色填充
screen.fill([255, 255, 0])
# 刷新窗口
pygame.display.flip()running = True
# 时间响应
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 点击事件相应elif event.type == pygame.MOUSEBUTTONDOWN:pass
# 退出pygame
pygame.quit()
文件流
文件的读写
步骤
打开文件 –> 判断大小 –> 分配内存 –> 读取文件 –> 关闭文件
fs1 = open('file_addr', 'r', encoding='utf-8')content = fs.read()print(content)
fs1.close()
fs2 = open('file_addr', 'w', encoding='utf-8')# 写入方法传入参数类型为bytesfs.write(bytes(content, encoding='utf-8'))
fs2.close()
用with…as… 方法时为上下文环境,不用close
with open('file_addr', 'r', encoding='utf-8') as fs:
异常处理
异常机制 - 处理程序在运行工程中出现的意外状况的手段
因为不是所有的问题都能够在写程序调试程序的时候就能发现
用try expect来捕获异常
try:pass
except(FileNotFoundError, IOError):# except可以写多个分别用于处理不同的异常状况# 如果try中出现了状况就通过except来捕获错误对其进行对应的处理print('error!')
else:# 如果没有出状况那么可以把无风险的饭吗放到else中执行pass
finally:# 不管程序正常还是异常最后这里的代码一定会执行# 此处最适合释放外部资源
open参数:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | + | + | + | + | ||
写 | + | + | + | + | + | |
创建 | + | + | + | + | ||
覆盖 | + | + | ||||
指针在开始 | + | + | + | + | ||
指针在结尾 | + | + |
读 + + + +
写 + + + + +
创建 + + + +
覆盖 + +
指针在开始 + + + +
指针在结尾 + +
json
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。
JSON 函数
使用 JSON 函数需要导入 json 库:import json。
函数 | 描述 |
---|---|
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
encode | 将 Python 对象编码成 JSON 字符串 |
decode | 将已编码的 JSON 字符串解码为 Python 对象 |
json格式:
# json格式json1 = {'name': 'GhostLinc','age': 22,'class': 'Python1801','my_guitar': [{'brand': 'Schecter', 'style': 'Metal'},{'brand': 'Epiphone', 'style': 'Blues'}]}
json.dumps
json.dumps 用于将 Python 对象编码成 json 字符串。
语法:
#编码json 输入文件
yourdict = json.dump(json1, fp)
json.loads
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
#编码json 输入文件
newdict = json.loads(fp)
encode
Python encode() 函数用于将 Python 对象编码成 JSON 字符串。需要导入模块demjson
yourdict = demjson.encode(json1)
decode
Python 可以使用 demjson.decode() 函数解码 JSON 数据。该函数返回 Python 字段的数据类型。
newdict = demjson.decode(json1)
通过网络数据接口获得数据
大部分网络数据结构的输出格式均为json格式
过程
# 获得URL
req1 = urllib.request.Request(host + path + '?' + my_ip)
# 为获得的URL添加header
req1.add_header('Authorization', 'APPCODE ' + appcode)
# 通过URL得到html内容
resp = urllib.request.urlopen(req1)
# 读取内容
dict1 = resp.read()
# 解码成json格式
json1 = json.loads(dict1)
python第三周学习总结相关推荐
- Python第三周 学习笔记(2)
直接选择排序: 两两比较大小,找出极值(极大值或极小值)被放置在固定的位置,这个固定位置一般指的是 某一端 n个数从左至右,索引从0开始到n-1,两两依次比较,记录大值索引,此轮所有数比较完毕,将大数 ...
- 学习Python第三周总结
学习Python第三周总结 一.函数和模块 1.1 函数的定义 Python中的函数的自变量称为函数的参数,而因变量称为函数的返回值 在Python中可以使用def关键字来定义函数,命名规则跟变量 ...
- 学号 20172326 《程序设计与数据结构》第三周学习总结
学号 20172326 <程序设计与数据结构>第三周学习总结 教材学习内容总结 队列是先进先出的数据结构(FIFO)与栈不同,队列的两端可分别进行操作 first与front相同,返回首段 ...
- 20165206 2017-2018-2 《Java程序设计》第三周学习总结
20165206 2017-2018-2 <Java程序设计>第三周学习总结 教材学习内容总结 类:class是关键字,用来定义类. 类声明:例如class People. 对象的声明:类 ...
- 20155117 王震宇 2006-2007-2 《Java程序设计》第三周学习总结
20155117 王震宇 2006-2007-2 <Java程序设计>第三周学习总结 教材学习内容总结 在JAVA程序编写中,常常要用到对象(Object),要产生对象首先要定义类(Cla ...
- 2017-2018-1 20155338 《信息安全系统设计基础》 第三周学习总结
2017-2018-1 20155338 <信息安全系统设计基础>第三周学习总结 教材学习内容总结 一.三种重要的数字表示 (1)无符号数.有符号数.浮点数 无符号编码是基于传统的二进制表 ...
- 20162316刘诚昊 《程序设计与数据结构》 第三周学习总结
20162316刘诚昊 2017-2018-2 <Java程序设计>第三周学习总结 教材学习内容总结 1. 查找是在一组数据中找到指定的目标元素或判定组内不存在目标的过程,常用方法为线性查 ...
- 2018-2019 20165227《信息安全系统设计基础》第三周学习总结
2018-2019 20165227<信息安全系统设计基础>第三周学习总结 学习目标 理解逆向的概念 掌握X86汇编基础,能够阅读(反)汇编代码 了解ISA(指令集体系结构) 理解函数调用 ...
- 20155313 2016-2017-2 《Java程序设计》第三周学习总结
20155313 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 4.1 类与对象 4.1.1 定义类 书本中使用了设计衣服来定义类,一件衣服的设计Cloth ...
最新文章
- github上传流程图记录
- 139邮箱的邮件附件功能
- matlab delete、clf、cla、close、closereq删除对象
- 总结JSON.parse()报错VM71:1 Uncaught SyntaxError: Unexpected token u in JSON at position 0等之类的问题
- php箱子,webshell箱子php版本.rar
- 互动直播的视频录制与合成—支持多人离线重入
- 你的开发好帮手:下一代云原生开发工具技术
- 如何查电脑ip地址_摄像机地址不对连不上网?教你快速更改IP地址
- 【Spark】Spark kafka because consumer rebalance same group id joined different streaming
- 可视化程序设计基础(team)——采访上届大佬
- Android Revolution
- r语言必学的十个包肖凯_家长专栏语言发育迟缓儿童的家庭训练小游戏
- abaqus盾构隧道建模实例_abaqus盾构施工模拟
- 无线网和网吧服务器,网吧也无线?网吧无线网解决方案
- arduino 自平衡小车1\霍尔编码器测速(MsTime2)
- 青龙面板—-抖音极速版(2022.08.11)
- 每周分享第 45 期
- RMAN-06004 RMAN-20003
- ubuntu14.04自定义系统默认xp字体
- (转载)HCIA-GaussDB 华为认证数据库工程师
热门文章
- mpvue的使用(一)必要的开发环境
- 在这个云时代,如何选择性价比更高的云服务器
- barrier linux,Linux Barrier I/O 实现分析笔记
- JSON.parse()的正确用法
- 推荐一部美国电影---‘’决胜21点‘’O(∩_∩)O
- kafka踩坑、实践篇
- CC BY-SA 4.0 是什么?
- QT报错:“pure virtual method called; terminate called without an active exception“
- 文献阅读笔记:Smart Homes that Monitor Breathing and Heart Rate
- html5 固定背景,css 背景固定样式background-attachment属性基础