《Python编程从入门到实践》6-9章总结
作者 Eric Matthes 著, 袁国忠 译
中国工信出版集团,人民邮电出版社
章节内容
- 字典
- 用户输入+while循环
- 函数
- 类
ch6 字典
定义
- {},键值对
使用字典
alien_0={'color':'green','points':5}
- 添加
- 删除:del
遍历字典
for key,value in user_0.items():
print(key)
print(value)
- 排序: sorted
- .keys()
- .values()
嵌套字典
- 字典 in 列表
alien_0={'color':'green','points':5}
alien_1={'color':'red','points':50}
alien_2={'color':'yellow','points':10}
aliens = [alien_0,alien_1,alien_2]
for alien in aliens:
print(alien)
列表 in 字典
字典 in 字典
不推荐这种方式,可以考虑 字典in列表 进行使用
ch7 用户输入和while循环
input vs raw_input()
- input("hint by words")
- int() # enter number
- 求余%
while
- 退出条件 while condition
- break
- continue
- ctrl+c
千万注意循环跳出条件,单元测试的主要问题点
while 处理列表和字典
- for vs while
- for 会预制循环条件,不应修改循环对象
- while 用于调整循环遍历对象时的循环处理
while 删除指定元素
- []
pets = ['dog','cat,'dog','goldfish','cat','rabbit']
while 'cat' in pets:
pets.remove('cat')
ch8 函数
def functionname(var):
code_body
functionname(in_var)
参数
- 形参
- 实参
实参就是形参的取值,多数人不区分两者
参数传递
- 位置实参
注意传递顺序
- 关键字实参
传递时指明形参与实参的对应
- 默认值
- 形参未赋值时的默认值
- 默认值要往后放,不能前面有默认值,而后面没有,顺序赋值
返回值
- return
- 返回字典
入参为列表
- 类似于C的数组、指针
- 需要禁止修改入参,将列表用切片方式传入副本
- 主要考虑点是效率:效率会因为内存使用而增加时间成本
- 入参为元组,可实现可变参数的输入(量的变化)
- 位置实参与任意实参结合
即位置实参与元组参数的结合,注意默认顺序赋值的原因,需要将变参(任意实参)放在最后一个形参
- 任意数量的关键字实参
def fun(invar1,**invar2)
引入模块
函数存储在模块
存储为a.py
新的b.py中调用模块a
import a
import module_name
module_name.function_name()
from module_name import function_name
from module_name import fun1, fun2, fun3
- as 别名
import module_name as newmodulename
- 导入所有:from module_name import *
函数编写指南
- 小写+下划线,避免大写
- 形参等号两边不要留空格
- 相邻函数的定义,隔两空行
ch9 类 class
关键词: 面向对象,实例
创建和使用类
命名类首字母大写
全部小写的,是函数和变量
__init__()
if __name__ == '__main__':
#测试使用
- 注意self的使用,外部使用类时,self参数相当于自动隐藏
使用类
class Car():
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
long_name = str(self.year)+' ' + self.make + ' ' + self.model
return long_name.title()
#%%
if __name__ == '__main__':
my_new_car = Car('audi','a4',2016)
print(my_new_car.get_descriptive_name())
- 可以设置方法来操作属性值
- 但是要注意到:有权限访问到程序的人,都可以直接访问属性值并进行修改。因此,需要注意细节,控制好访问权限
继承
- super.init
- 父类、子类需在一个文件内
- import 也是可以引入的,后文中有专门的类导入
import BookRC as bc
class EECar(bc.Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
if __name__=="__main__":
neweecar = EECar('ford','yibo',2014)
print(neweecar.get_descriptive_name())
- 重写父类的方法名
同名重写即可,根据函数作用域即可实现子类使用新的方法,不影响父类的同名方法
- 实例作为属性
需要递进.进行属性访问
类的导入
from module_file_name import Class_name
# 关于用户定义的类、函数,尽量定义清晰,准确定义与引用
- 导入类与导入模块的函数一样
标准库
python给出的标准库,通常而言,标准的库肯定比自己写的效率更好一点
不要自己造轮子,所有程序的轮子,大部分就存在于标准库
编码风格
- 类名:驼峰命名法,首字母大写,无下划线
- 模块、实例:小写英文+下划线
- 类中一个空行分隔方法
- 模块中,两个空行分隔类