美文网首页
#Python读书会总结#

#Python读书会总结#

作者: DrBear_smile | 来源:发表于2017-12-28 17:02 被阅读0次

    《Python编程从入门到实践》总结

    作者 Eric Matthes 著, 袁国忠 译

    中国工信出版集团,人民邮电出版社

    起步

    • 基本属性:跨平台,脚本语言
    • 认识python2与python3,其升级的意义与普通软件不一样,有点类似于windows的framework, 不同版本可以并存,处理不同问题各有优势。后续应该需要深入Python的应用,才能体会。本书建议使用py3
    • 跨平台部署,windows, linux, osx[苹果]
    • 32,64 应该只是影响性能
    • 编辑器:文本编辑器即可,本文推荐Geany,安装后并没有显著优势。小组中用anaconda,相对而言在win环境更方便。借助anaconda,可以方便地配置python在各种需求下的packege.

    变量

    • 注意保留字,变量与函数名杜绝有重复使用的现象
    • 报错信息:学会使用traceback,一般会提示的地方可能是上下文,所以不要只看到报错的一个位置

    字符串

    单引号、双引号;三引号是注释内容

    • 连接字符串:+,即完成字符串拼接计算
    • 特殊字符:\t 制表符 \n 换行等
    • 去除空格:rstrip
    • 字符串使用过程中,单、双引号的合理使用

    数字

    • 四则运算
    • 浮点运算:注意与整数的混合运算
    • 字符与数字的混合运算,需要注意str()变换

    注释

    • 行注释#
    • 块注释'''

    列表

    • 数字列表:向量,矩阵
    • 字符列表:字典[后面章节有专门的字典,这里表达的不是后面的字典类型,逻辑意义]
    • 0是起点|和C语言类似,区别于matlab等
    • 元素修改

    append(),del(),pop(),remove()

    • 排序

    sort(),sorted(), reverse(),

    操作列表

    • 遍历:for, while
    • 代码缩进:美观,代码级别,尤其是判断与循环涉及的小代码段
    • 代码中的冒号,引出后面的代码段
    • 切片:选取列表的某一段
    • 元组 vs 列表

    参数值等不可修改元素的列表,定义成元组

    • 代码格式注意

    缩进

    行的长度:80字符
    空行

    if语句

    条件判断

    • 条件测试:字符串比较,数字比较
    • 多条件,布尔表达式

    if
    if-else
    if-elif-else
    elif*n

    • else子句通常可省略

    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给出的标准库,通常而言,标准的库肯定比自己写的效率更好一点

    不要自己造轮子,所有程序的轮子,大部分就存在于标准库

    Python Module of the Week

    编码风格

    • 类名:驼峰命名法,首字母大写,无下划线
    • 模块、实例:小写英文+下划线
    • 类中一个空行分隔方法
    • 模块中,两个空行分隔类
    • 先导入标准库模块,空行隔开后导入用户自定义模块

    文件

    新建文件

    • with|自动关闭,调试期间建议用with,调试通过后再修订为open\close文件操作对
    • open,close
    • 文件路径
      • 相对路径

    windows里面用\,linux使用/

    写入文件

    • open带参数,open(filename, 'w')|{'w','r','a','r+'}
    • write()|不带换行符
    • py只能读出字符串,也只能写入字符串

    异常

    • try-except

    ZeroDivisionError

    • try-except-else

    FileNotFoundError

    异常抛出的程序段可以让程序在记录完异常后继续处理问题

    • pass

    只要有外部因素:文件、输入、网络,就会有可能造成异常发生,注意编程时考虑到

    分析文本

    • split()

    存储数据

    json
    
    json.dump(var,fobj)
    
    json.load(fobj)
    

    测试

    相关模块

    • 单元测试
    • 测试用例
    import unittest
    class FunTestCase(unittest.TestCase):
        def test_case1(self):
            self.assertEqual(fun_return_value, target_value)
        
        def test_case2(self):
            self.assertEqual(fun_return_value, target_value)
    
    
    unittest.main()        
    

    测试类

    • unittest Module

    对所有test_开头的函数自动运行进行测试

    方法 用途
    assertEqual(a,b) 核实a==b
    assertNotEqual(a,b) 核实a!=b
    assertTrue(x) 核实x为True
    assertFalse(x) 核实x为False
    assertIn(item,list) 核实item in list
    assertNotIn(item,list) 核实item not in list
    • setUp()

    好处是可以一个实例(用例),做多个方法的测试

    相关文章

      网友评论

          本文标题:#Python读书会总结#

          本文链接:https://www.haomeiwen.com/subject/miuvgxtx.html