《Python编程 从入门到实践》学习笔记整理2:基础知识篇(下)7-11章

第7章 用户输入和while循环(结合编写交互式程序)

7.1 函数input()的工作原理

message=input(“清晰易懂的提示”)
暂停程序运行,等待用户输入,返回字符串(可用int()等转换)
*结合while循环可大量填充字典等数据结构

7.2 while循环简介

while 指定条件:
不断运行直至不满足指定条件;需避免死循环
若要求满足多个条件才可继续运行,可定义一个布尔变量(“标志”),判断是否处于活动状态
break语句:直接退出for/while循环
continue语句:忽略余下代码,返回循环开头,判断是否继续

7.3 使用while循环来处理列表和字典(收集、存储并组织大量输入)

for循环中不应修改列表,while循环可遍历+修改

  • 结合pop()移动列表元素
  • 结合remove()删除所有指定值
  • 结合input()使用用户输入填充字典

第8章 函数

函数:带名字的代码块,可提高代码效率,更易维护和排除故障,并可在不同程序中重用

8.1 定义函数

定义def 函数名(形参):
调用函数名(实参)
*使用描述性函数名,增加可读性

8.2 传递实参

(1)位置实参:实参形参顺序相同
(2)关键字实参:无需考虑顺序,传递名称-值对,如type=“dog”
形参可指定默认值,优先级低于显式提供的实参;有默认值的形参需放在最后列出
默认值设置为空字符串时,可将该参数视为可选值,从而让函数简化处理不同情形
提供的实参个数或类型不符合要求时,会引发错误

8.3 返回值return(简化主程序)

可返回任何类型的值,包括列表和字典

8.4 传递列表

永久性修改,高效处理大量数据;传递[:]副本可禁止修改,但会降低效率,慎用
*每个函数只应负责一项具体工作,有助于将复杂任务划分为一系列步骤

8.5 传递任意数量的实参

*形参名:创建一个空元组,接收任意数量实参值
**形参名:创建一个空字典,接收任意数量实参键-值对
两者均需放在最后,封装余下的实参

8.6 将函数存储在模块(独立文件)中

导入整个模块(句点表示法调用):

  • import 模块名 (as 别名)

导入特定函数(直接调用):

  • from 模块名 import 函数名 (as 别名)

导入模块中所有函数(不推荐):

  • from 模块名 import *

8.7 函数编写指南

描述性名称;只用小写字母和下划线;编写文档字符串;默认值和关键字的=两边无需空格
代码顺序:(程序注释+)import语句+主体代码

第9章 类

面向对象编程:编写类,定义通用行为,再基于类创建对象(实例化)

9.1 创建和使用类

# 类名称首字母大写
# 实例名首字母小写
class Dog():
'''类的说明'''
	
	# 方法:类中的函数
	# 属性:类中以self为前缀的变量
	# __init__特殊方法,实例化时自动运行;__默认方法前后均有两个下划线__
	# self是指向实例本身的引用,自动传递,让实例访问类中的属性和方法(句点表示法)
	def __init__(self, name):
	    self.name = name
	
	def other_method(self):

# 创建实例
my_dog = Dog(“a”)
# 访问属性,无括号
my_dog.name
# 调用方法,有括号
my_dog.other_method()

9.2 使用类和实例

属性必须指定初始值(0或空值也可,和变量一个道理):
(1)实例化时传递实参赋值,__init __()括号里需包含相应形参
(2)在类的内部指定默认值,__init __()括号里无需包含相应形参,直接self.attr=value即可
修改属性的值:直接访问修改;编写更新属性的方法修改

9.3 继承

子类=父类(超类)+新的属性和方法,与父类同文件且父类在先

class 父类名():
class 其他类():
class 子类名(父类名):
	def __init__(self,形参):
		# super()将父类与子类关联起来
	    super().__init__(形参)
		self.新属性=初始值
		# 将实例用作属性,便于将大类拆分为多个协同工作的小类
		self.other_attri=其他类()
	
	def 新方法(self):
	
	# 重写方法
	def 父类同名方法(self):

*类可以模拟实物,建模方法无对错之分,只有效率高低之分

9.4 导入类(存储在模块中,与导入函数类似):

导入整个模块(句点表示法调用):

  • import 模块名 (as 别名)

导入特定类(直接调用):

  • from 模块名 import 类名1(,类名2,……)

导入模块中所有类(不推荐):

  • from 模块名 import *

9.5 Python标准库:一组模块

如:
collections.OrderedDict:记录键-值对添加顺序(使用OrderedDict()调用,而非花括号)
random模块:生成随机数
math数学模块

9.6 类编码风格

类名:OrderedDict(驼峰命名法)
实例名/模块名:ordered_dict
函数、类、模块均需文档字符串
先import标准库模块,再空行+自定义模块

第10章 文件和异常

10.1 从文件中读取数据(返回字符串)

# 使用任何文件前均需打开
# 使用with可在无需访问后自动关闭文件,比手动open()+close()方便
# open()返回的对象仅在with代码块内可用
# filename=当前目录下的文件名/相对or绝对文件路径(Windows系统需使用r+反斜杠\)
# 当字符串较长或较复杂时,往往先将其存储在一个变量中,再将变量传递给函数
with open(filename) as f: 
	data = f.read().rstrip() # read()返回包含全部内容的字符串,且末尾有空行
	for line in f: # for循环逐行读取
	lines = f.readlines() # 逐行读取并存入列表

10.2 写入文件(字符串格式)

# mode包括:r读取,w写入,a附加,r+读写,省略=默认只读
with open(filename, mode) as f: 
    f.write(data) # 需手动添加换行符\n等设置格式

10.3 异常(一种管理错误的特殊的类)

使用try-except(-else)代码块处理

try:
    # 可能引发异常的代码
except 异常名:
    # 处理异常的代码
    # 或直接pass(什么也不做;或充当占位符,留待之后编写)
else:
    # try没问题后才能执行的代码

异常:ZeroDivisionError、FileNotFoundError等等
优点:使程序免于崩溃,能够继续运行,更健壮;控制与用户分享错误信息的程度

10.4 存储数据(json模块)

JSON(JavaScript Object Notation),在编程语言间通用
存储:json.dump(data,f_obj)
读取:json.load(f_obj)
*重构:将代码划分为一系列完成具体工作的函数,简化代码结构,使代码更清晰易懂、易维护扩展

第11章 测试代码(unittest模块)

11.1 测试函数

单元测试:核实函数某一个方面没问题
测试用例:一组单元测试,核实函数各种情形下没问题;全覆盖很难,一般针对重要行为编写测试即可

import unittest
from 模块名 import 需测试的函数名

class 最好与测试函数相关且包含Test的类名(unittest.TestCase):
    # 必须test_开头,方法才将自动调用;长没事,描述清楚即可
	def test_测试内容(self): 
	    a = 需测试的函数()
	    # 断言方法之一
	    self.assertEqual(实际值a,期望值b)

# 运行测试
unittest.main()

输出结果
(1)句点/E/F=通过一个测试/测试引发错误/测试导致断言失败
(2)OK(FAILED)=(未)通过所有测试

11.2 测试类

测试类与测试函数类似,测试的是类中方法的行为

6种断言方法

  • assertEqual(a,b)、assertNotEqual(a,b)
  • assertTrue(x)、assertFalse(x)
  • assertIn(item,list)、assertNotIn(item,list)

测试类需要在每个测试方法中创建实例;使用setUp()可只创建一次,并在所有方法中使用;Python先运行setUp(),再运行test_打头方法

def setUp(self):
    # 可一次性创建一系列实例并设置属性
	self.实例名=()
	self.属性名=value
发布了4 篇原创文章 · 获赞 0 · 访问量 111

猜你喜欢

转载自blog.csdn.net/qq_33440285/article/details/104560528
今日推荐