美文网首页
Python 2 总结

Python 2 总结

作者: siuLimTau | 来源:发表于2018-05-20 14:36 被阅读0次

    python 2 官方2020年停止维护。
    参考文献

    基础知识

    1. 现代计算机底层元件:晶体管(就是开关)
    2. 冯诺伊曼计算机体系结构


      冯诺依曼体系
    3. 编程规则
    • 编程前要深思熟虑
    • 程序要有可读性(方便自己以后看)
    1. Python简介:1989年诞生,开源,最佳实践语言
    2. 资源链接

    开始使用

    1. "Hello World!":IDLE(GUI)中输入 print "Hello World!"

    上面是Python 2.x版本写法,3.x是:print("Hello World!")

    1. 快捷键:脚本中 CTRL+ S 保存,之后F5运行
    2. 程序组成
    • 模块:import math;math.+TAB可见所有备选(如math.pi)
    • 表达式(x+5)和语句(x=5
    • 空白:换行符号(\\
    • 注释:单行(#);多行(用三引号'''上下括起来)
    1. 对象命名:字母、数字(数字不能作首字母)和下划线组合

    骆驼拼写法:thisIsAnInteger

    1. 变量创建:初次使用即创建(与Matlab类似);type()返回变量类型
    • int(整型): 6
    • float(浮点型):0.66
    • complex(复数): 2+3j
    • bool(布尔型):True(1) or False(0)
    • str(字符串):'abc' or "abc"
    • list(列表):['abc',4,3.5]
    • tuple(元组):('abc',4,3.5)
    • dict(字典):{"Adam":23,"Bob":24}
    • set(集合):set([1,3,5])
    1. 运算符:**(方幂);a+=2等价于 a=a+2
    2. 数值计算符号表示 :1/12=0 ; 1.0/12 = 0.833...
    3. 海龟绘图法
    import turtle 
    for i in range(4): 
        turtle.forward(50)
        turtle.right(90)
    

    9.帮助:help(functioName)查看函数用法;help('moduleName')查看模块用法

    控制语句

    1. 语句分组通过缩进进行标识
    2. 可使用关系链:0<=a<=5
    3. 可多重赋值:a,b,c = 1,2,3
    4. 可直接交换:a,b = b,a
    5. Bool 关系符
    • 非:not x
    • 与:and x
    • 或:or x
    1. if 选择
    if Bool expression: ...
    else: ...
    
    1. if 复合选择:if - elif - else
    2. for 循环:for variable in set: ...
    3. range(起始值,终值,步长)
    • range(5) = [0,1,2,3,4]
    • range(3,5) = [3,4]
    • range(1,20,4) = [1,5,9,13,17]
    1. while 循环
    while Bool expression: ...
    else: ... 
    
    1. 跳出循环
    • break: 跳出整个循环
    • continue: 跳出本次循环
    • 判断输入是否出错:变量名.isdigit(),变量是整数则为真

    程序设计策略

    1. 参与并提交
    • 针对问题做好准备,坚持,不轻易放弃
    • 找不会被中断的时间工作
    • 若效率不高,则改变策略,或稍事休息
    • 专注于问题,调整好情绪
    1. 了解,然后想象
    • 理解问题:陈述,联想已有算法,输入输出等问题
    • 问题真实化:举例,图表,尝试
    1. 编程之前先思考:拒绝“牛粪球”代码
    2. 试验:不必一次完成,多尝试
    3. 简化:问题分解,分而治之(“洋葱”法)
    4. 停下来思考
    5. 放松,休息。

    函数

    1. 为什么要使用函数 —— 函数的特点
    • 分而治之的策略
    • 抽象(封装性):只需会用,不必懂原理
    • 重用:可以反复调用
    • 共享:别人也可以调用
    • 安全性:小段的代码容易检验是否出错
    • 简化(可读性):封装过后的程序更可读
    1. 使用:先定义,后调用
    def testFunc(Num):
        return Num * 3
    
    1. main:主程序本身也可以作为函数,在Python中创建独立脚本时很有用
    def main():
        main()
    
    1. 作用域:包含某个变量的程序语句集合. 每个程序都有自己的命名空间,用来定义变量的作用域.
    • 输入已知函数名+'.'+TAB,即可查看相关的方法和变量
    • 双下划线是Python的保留属性
      • __name__:与函数相关联的名称
      • __dict__:函数的命名空间
      • __doc__:文档字符串(查询函数) ,math.pi.__doc__
    1. Python传递的是对象引用:Python的一切皆为对象,所以每个值的传递都是对象的引用. 对象在这个过程中不可复制.
    • 如果对象可变,在函数中所做的更改将反映在对象的外部作用域
    • 如果对象不可变,当更新引用时,将指向新的对象

    数据结构 1:字符串

    1. 以单引号或者双引号表示字符串
    2. 三引号:将保存所有字符的格式信息(字符串若跨行,则回车符也会保存)
    3. 非显示字符:回车:\n;制表:\t
    4. 字符串表示形式:每个字符都以数字形式(ASCII码)存储
    • ord('a') = 97
    • chr(97) = 'a'
    • 索引
    'Hello World'[1] = 'e'
    Hello World
    012345678910
    
    • 扩展索引 'Hello World'[起始位置:结束位置:步长]
    1. 分片:字符串序列要包含结束符,即每次分片时要多含一位
    • 'Hello World'[0:5] = 'Hello'
    • 'Hello World'[6:] = 'Hello World'[6:11] = 'Hello'
    • 倒数索引 'Hello World'[-1] = 'Hello World'[10] = 'd'
    • 字符串操作
      • :连接
      • *:重复
      • in:检查集合成员
    1. 函数:len(myStr),求长度;方法:myStr.upper(),转成大写
    2. 方法链:myStr.upper().find('s');查找方法:myStr.+TAB
    3. 格式化输出:print "format string % (data1,data2,..)
      例:print "%s is %d years old." % ("Bill",25)
    • %s 字符串 ;%10s,10个空格(右对齐)
    • %d 十进制整数
    • %f 浮点小数 ;%.4f,4位有效小数
    • %e 浮点指数
    1. 字符串集合是不可变的:无法通过索引赋值,必须复制所选内容.

    数据结构 2:列表和元组

    1. 什么是列表?
    • 列表是数据集类型之一,可以混合不同类型元素
    • 创建:aList = [1,2,'a',3,14]
    • 二维列表:listOfList[1][2]
    1. 列表特性
    • 列表的索引,分片和运算符与字符串基本一致
    • 列表也可用于for循环:for n in [1,3,4,7]
    • 可变性:列表对象可发生改变,可对其赋值,如 aList[0] = 1
    1. 列表方法(后缀)
    • 查找:index(),返回与x相等的第一个索引;
    • 统计:count(),统计x出现的次数;
    • 添加(末尾):append(),末尾添加元素;extend(),末尾添加集合;
    • 插入:insert(i,x),在索引i处插入x
    • 删除:pop(),删除末尾元素;remove(x),删除第一个x;
    • 排序:sort()reverse(),反向排序;
    1. 列表与字符串转换
    • result = 'I love you'.split() = ['I','love',''you]
    • newStr = ''.join(result) = 'I love you'
    1. 可变对象及其引用
    • 对引用可变对象的变量进行操作,可能会改变对象本身,或者创建一个新的对象;
    • 对引用不可变对象的变量进行操作,只会创建新的对象
    1. 拷贝(复制)在Python中就是为对象添加新的名字
      注:Python中的命名空间由名字列表和对象列表组成;
    L =[1,2,3]
    L = L + [9]  #创建了新对象
    L.append(9)  #仅改变了对象
    
    1. 列表解析:用紧凑的方式构造列表 [表达式 + for子句 + if条件]
    [i for i in range(10) if i % 2 == 0]
     >>> [0,2,4,6,8]
    
    1. 元组:myTuple = (1,2,3)
    • 元组是不可改变的列表
    • 单元素原元组:Tuple1 = (1,)
    • 为何需要元组:可为需要的地方提供不可变对象(如字典键)
    • 从列表到元组:tuple1 = tuple([6,1,3,4])

    数据结构 3:字典和集合

    1. 字典:可变的数据结构
    • 字典可看成是成对元素的列表:dict = {(button,value)}
    • 键映射到值,类似于手机通讯录
    • 键可为不同元素类型,但只能是不可改变的对象:整数,字符串或元组
    • 键的顺序不重要,关键在于键与值的关联
    • 创建:contacts = {'Sandy':'123', 'Balian':'456'}
    • 引用(利用键) contacts['Sandy']
    • 添加 contacts['Piao'] = '789'
    • 创建空字典 Dict = { }Dict = dict()
    1. 字典方法
    • 字典列表:items()
    • 键列表:keys()
    • 值列表:values()
    • 浅拷贝字典:copy()
    1. 集合:可变的数据结构
    • 集合内元素不限定类型,没有顺序
    • 集合上不能索引赋值,但有其他方法可以改变集合内的元素
    1. 集合方法
    • 交:aSet.intersection(bSet)
    • 并:union
    • 差:differenceaSet.difference(bSet) = A\B
    • 对称差(收集两个集合中不共享的元素):symmetric_difference
    • 子集和超集: A.issubset(B) = B.issubset(A) (A包含于B)
    • 添加:add(element)
    • 删除:discard(element)clear(),删除所有元素
    • 浅拷贝:copy()
    1. 再谈作用域
    • 命名空间是名称和对象的关系. 如果有多个命名空间,则可定义搜索顺序,依次在不同的命名空间中来查找某个名称. 这一过程在Python中定义为作用域.
    • 作用域搜寻规则:LEGB
      • L(Local)局部:函数内部
      • E(Eclosing)封闭:在函数中定义的函数内部
      • G(Global)全局 __main__模块:函数内使用global语句可将变量声明为全局性质
      • B(Built-in)内置 __builtins__模块
    • Python在模块中维护命名空间. 当Python解释器启动时,将自动导入__main____builtins__模块. 每个模块自带一个命名空间,用来存放模块中所有的名称和对象.
      • __main__是默认的全局模块,用来存储所有新对象.
      • __builtins__为所有程序和数据类型提供链接.
      • var.__dict__即为命名空间.
    • Python指针:使用zip创建字典
    keys = ['red', 'white', 'blues']
    values = [100,300,500]
    d = dict(zip(keys,values)) = {'blues':500, 'white':300,'red':100} 
    

    文件

    1. 文件:由字节组成的信息.
    • 文本文件:ASCII数据或其他
    • 二进制文件:word文档
    1. 读取:testFile = open('temp.txt',"r")
    • 循环逐行
    for line in testFile:
        print line
    testFile.close()
    
    • testFile.read():一次性读取,返回一个字符串
    • testFile.readline():每次读取一行. 如果之后接for循环,则for从readline结束后的位置开始. 主要用于跳过标题行.
    dataFile = open('temp2.txt',"w")
    s = 'first line'
    dataFile.write(s)
    dataFile.close()
    
    1. 创建与重写
    • 模式
    模式 操作 若文件不存在 是否覆盖
    r 只读 报错 -
    r+ 可读可写 报错
    w 只写 创建
    w+ 可读可写 创建
    a 只写 创建 否,追加写
    a+ 可读可写 创建 否,追加写
    • 通用换行格式:为解决不同操作系统下行结束符号不一致的问题
      fd = open('File.txt','rU')
    • 文件内移动(方法)
      tell:找出当前文件位置和文件开始位置之间的相对位置
      seek:将当前文件位置设为文件对象缓冲区中的新位置
    1. 关闭文件:open函数在内存中创建缓存区,将磁盘内容复制到此位置. 关闭文件,则内存缓存区的所有内容写回瓷盘,保持同步.
    2. CSV文件:是文本文件格式,有CSV拓展模块支持.
    3. OS模块(Operating System) —— Python标准模块
    • 操作系统的功能之一是维护文件的组织结构.
    • 目前操作系统将文件置于目录(Linux或OS-X)或文件夹(Windows)中.
    • 目录结构层次 —— 树
      OS-X:/punch/Python/ex1.py
      windows:c: \\punch\\python\\ex1.py
    • 若当前目录为 /punch/python/,则:
      . = 当前目录 = /punch/python/
      .. = 父目录 = /punch/
    • os模块函数
      os.getcwd():获取当前目录
      os.chdir("..."):更改目录
      os.listdir("..."):列出给定路径的节点中所有文件和目录

    类:自定义数据结构和算法

    1. 面向对象编程(OOP):Python基本算是OOP语言
    • OOP认为程序由独享组成,每个对象都可与其他对象交互.
    • 每个对象都可以:将代表此对象的值集合起来;执行该对象的动作.
    • 对象特点:属性(如颜色);针对自己的命令作出反应(如输出)
    • OOP特性
      封装性:封装细节,通过接口访问;
      多态性:运算符或方法根据调用其的对象类型执行不同的操作;
      继承性:允许基于类的特点创建另一个类.
    1. 类和实例
    • 类(class)是建立新对象的模版.
    • 利用类模版创建的对象称为该类的实例(instance).
    • 类定义 class 类名(父对象):代码块 class myClass(object): pass
    • class是第三个能在命名空间建立新关联的关键字(除赋值和def)
    • 关键词 pass:表示该代码块为空.
    • 创建实例:myInstance = myClass()
    • dir(myClass)可查看类和实例包含的属性
    • 修改属性(点标记): myClass.classAttribute = 'hello'
    • Python对象作用域规则:先实例,然后类.
    1. 对象方法:定义类对象操作的函数称为方法
    • 自定义方法:即在类内部定义函数
    class myClass (object):
        def myMethod (self,param1)
            print "hello %s"  % (param1)
            self.instanceAttribute = param1
    myInstance = myClass()
    myInstance.myMethod('world')
    
    1. 融入Python类模型:Python保留了一些方法(开始和结束都是双下划线)
      __init__:初始化
      __str__:字符串方法,常用于输出
    2. Python的OOP细节
    • OOP的公有与私有:编程世界的三种角色(用户,程序员,类设计者)
      • 程序员只知道类的接口
      • 类设计者需要控制和保护类的内部结构,而不是类提供的方法
      • 私有属性(方法,变量)只提供给类设计者
    • 使用双下划线表示私有
      • Python中所有的方法和实例,类设计者和程序员都能访问;
      • 当属性用双下划线作为前缀时,不要试图修改它!
    • Python的宗旨是“我们都是成年人”: 类设计者若表示什么是私有的,程序员不要试图修改.
    • Python可修改实例:不同于其他OOP语言.

    异常处理

    1. 错误
    myStr = int(raw_input("number:"))
    number: a
    >>> ValueError
    

    当程序运行出错时,Python先搜索程序员提供的相应错误处理程序. 如果找到,则将控制权交给这些代码;否则,Python会停止运行.

    1. 基本的错误处理:try-except语句
    try:
        dividend = float(raw_input("dividend: "))
        divisor = float(raw_input("divisor: "))
        result = dividend / divisor
    except ZeroDivisionError:
        print "Divided by 0 error"
    except ValueError:
        print "Value Error"
    print "Continue"
    

    注:先看try代码块,无错误则跳过所有except;有错,则停止在出错行,寻找相应except语句,执行并跳过其他except;找不到则停止运行并报错.

    1. except后的错误名是Python给定的. 起始发现错误最简单的方法就是故意产生错误,然后查看Python给出的错误名称.
    2. 两种处理错误的方式
    • LBYL:三思而后行(新手)
    if not isinstance(s,str) or not s.isdigit:
        return None
    elif len(s) > 10:
        return None
    else:
        return int(str)
    
    • EAFP:要求宽恕
    try:
        return int(str)
    except (TypeError,ValueError,OverFlowError):
        return None
    
    1. try-except复合语句
    try:...
    except:...
    else: #try代码块不出错,则执行此代码块,并继续
    finally: #在try-except(-else)结束后要绝对执行的代码块
    
    1. 应用
    • 检查输入:反复输入,直至正确.
    while True:
        try:
            alueStr = raw_input("Input integer:")
            alueInt = int(valueStr)
            break
        except ValueError:
            print "Bad input"
    
    • 检查文件打开
    while True:
        try:
            fileName = raw_input("Open a file:")
            open(fileName,"r")
        break
        except IOError:
            print "Bad file name"
    
    • raise exceptionName :可主动引发异常
    • 自定义异常:Python中的异常是类. 创建异常,就是产生现有异常的子类.
    class NewException(Exception): 
        pass
    

    相关文章

      网友评论

          本文标题:Python 2 总结

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