《Python基础教程》第1~5章 学习笔记

Python 1-5章

tags: Python Learning Note


第1章 基础知识

  • 1.2 交互式解释器
  • 1.4 数字和表达式
      整数除法:1/2=0(可使用`from __future__ import division`或者附加`-Qnew`执行)  
    • 1.4.1 长整型数(将在大数后面加L)
    • 1.4.2 十六进制和八进制(用开头确定:0xAF(175),010(8)
  • 1.5 变量(直接用=赋值)
  • 1.7 获取用户输入input("")等)
  • 1.9 模块
      `from 模块 import 函数`
      可以用变量引用函数(`foo=math.sqrt`)
    • 1.9.1 cmath和复数cmath.sqrt支持复数)
  • 1.10 保存并执行程序
    • 1.10.3 注释(用#)
  • 1.11 字符串
    • 1.11.1 单引号字符串和转义引号
      单双引号没区别。
       转移在前面加上\。
    • 1.11.2 拼接字符串(可用+拼接)
    • 1.11.3 字符串表示,str和repr
      str可以转换值为字符串。
      repr,以Python表达式形式表示值。
      可以比较str(10000L)和repr(10000L)。
      反引号效果跟repr一样,但是不推荐使用,因为3以上不支持。
    • 1.11.4 input和rawinpm的比较
      input会假设用户输入的是合法的Python表达式(与repr相反)。
      row_input会把所有的输入当初原始数据(row_data)。
        如: 对于`name = input("name:")`,只能输入"hcbbt",而直接hcbbt不带双引号会报错。
    • 1.11.5 长字符串、原始字符串和Unicode
      长字符串:如果字符串要跨多行,可以用三个引号'''(or""")代替普通引号。
      这里和用\加回车跨行的区别是,用\加回车输出会把各个行凑一行,而三个引号则一样跨行。
      原始字符串:在引号前面加上r可以使用原始字符串,字符串里面无法再转移。
        这里比较麻烦的是处理字符串里面的引号,里面的引号前面加上\后输出的原始字符串也会有\的,这里可以用单双括号混合用来绕开这个问题。另外注意原始串最后面不能是\,否则识别不了。
      Unicode字符串:在字符串前使用u前缀。

第2章 列表和元组

  • 2.1 序列概览
      列表和元组的主要区别在于,列表可以修改,元组则不能。  
      一般来说,在几乎所有的情况下列表都可以替代元组。(例外情况:使用元组作为字典的键。)
  • 2.2 通用序列操作
    • 2.2.1 索引
      序列中的所有元素都是有编号的--从0开始递增。这些元素可以通过编号分别访问。
        字符串就是一个由字符组成的序列。  
      字符串字面值能够直接使用索引,如'Hello'[1] = 'e'
      如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。
        索引可以为负数。
    • 2.2.2 分片
      第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。
      可显式设置步长(不能为0)。
    • 2.2.3 序列相加(使用加号。)
      两种相同类型的序列才能进行连接操作。
    • 2.2.4.乘法(重复n次)
      空列表:[],空值:None。 初始化:[None] * 10
    • 2.2.5 成员资格(关键字in,返回值True/False)
    • 2.2.6 长度、最小值和最大值
      len(nums)
      max(nums)
      min(nums)
    • 2.3 列表:Python的“苦力”
    • 2.3.1 list函数
      string->list: list(str)
      list->string: ''.join(somelist)
    • 2.3.2 基本的列表操作
      元素赋值:用下标赋值。
      删除元素:del names[2]
      分片赋值:可以使用与原序列不等长的序列将分片替换。长插短,短插长都可以。
        如:name = list('Perl')     name[1:]=list('ython'),此时''.join(name)='Python'  
      也可以通过分片删除元素:name[1:2] = [],'y'就被删掉了。
    • 2.3.3 列表方法
      对象.方法(参数)
      append:在列表后追加新对象。
      count:统计某个元素在列表中出现的次数。
      extend:可以在列表的末尾一次性追加另一个序列中的多个值。(修改了前面的列表)(a.append(b)等价于分片赋值a[len(a):] = b
      index:从列表中找出某个值第一个匹配项的索引位置。(不存在会引发异常)
      insert:用于将对象插入到列表中。a.insert(3,'test')在下标为3的位置插入'test'。
      pop:会移除列表中的一个元素(默认是最后一个),并且返回该元素的值。
      remove:移除列表中某个值的第一个匹配项。(第一次出现的值)
      reverse:将列表中的元素反向存放。(不会返回列表,而是返回迭代器。可使用list(reserved(x))返回列表)
      sort:用于在原位置对列表进行排序。(返回了空值)(可用sorted()函数返回列表)

      关于sort高级排序**:
      内建函数cmp(x,y)在x < y时返回负数,在x > y时返回正数,如果x = y则返回0。
      sort默认用的是cmp,我们可以直接写比较函数并调用。如a.sort(cmp2)
      sort方法有另外两个可选的参数--键函数key(如key=len)和布尔值reverse(True即反向,False正向,默认False)。

    • 2.4 元组:不可变序列
      元组和字符串都不能修改。
      空元组可以用没有包含内容的两个圆括号来表示。
    • 2.4.1 tuple函数
      以一个序列或字符串作为参数并把它转换为元组。
    • 2.4.2 基本元组操作(除了无法修改之外和列表差不多)
    • 2.4.3 那么,意义何在
      元组可以在映射(和集合的成员)中当作键使用--而列表则不行。

第3章 使用字符串

  • 3.1 基本字符串操作
    除了不可修改和列表一样。
  • 3.2 字符串格式化:精简版
    用包含转换说明符的字符串+%+元组或字典实现。如:"Hello, %s. %s enough for ya?" % ('world', 'Hot')。(如果用列表会被当成一个值)

    如果要在格式化字符串里包含百分号,那么必须使用%%。

    模版字符串,需要from string import   Template。关键字为$,Template,方法为substitute。(同样如果要输出$就要使用$$了。)(还可以使用字典的映射键设置关键字)
        如:Template('Hello, $x. ${y}t enough for ya?').substitute(x='world', y='Ho')
  • 3.3 字符串格式化:完整版(跟c等其他语言的转换说明符一样,不想多说)
    • 3.3.1 简单转换
    • 3.3.2 字段宽度和精度(可以用%*s,后面元组里面加上数值表示*位置的数)
    • 3.3.3 符号、对齐和0填充%a10s,a为0表示0填充,-表示左对齐,+为标出正负(+0))
  • 3.4 字符串方法 字符串常量(import string):string.digits/ letters/ ascii_letters/ lowercase/ uppercase/ printable/ punctuation
    • 3.4.1 find(查找第一个匹配子串,没有找到返回-1,可以提供起点和终点)
    • 3.4.2 join'+'.join(['1','2','3']))(队列中添加元素(注意:需要添加的队列元素都必须是字符串))
    • 3.4.3 lower(返回字符串的小写字母版)(title方法和string.capwords:单词首字母大写)
    • 3.4.4 replace(所有匹配项均被替换)
    • 3.4.5 split(将字符串分隔成序列,与join相反)
    • 3.4.6 strip(返回去除两侧空格的字符串)(可指定去除字符串,参数为所有要去除的字符组成的字符串)
    • 3.4.7 translate(同时替换多个字符,得先制作转换表。如:a='Hello,world' t=a.maketrans('l','a') a.translate(t))

第4章 字典:当索引不好用时

    字典是python中唯一内建的映射类型。字典中的值并没有特殊的顺序。
  • 4.2 创建和使用字典
    phonebook={'A':'1111', 'B':'2222', 'C':'3333'}
    • 4.2.1 dict函数
        dict是一个类型。  
      通过其他字典或(键,值)序列来建立字典:
          items = [('A','1111'),('B','2222')]    pb = dict(items)
      或者直接用关键字参数创建:
          pb = dict(A='1111', B='2222')
    • 4.2.2 基本字典操作
      len(d):长度
      d[k]:取键k的值
      d[k]=b:赋值(关联)
      del d[k]:删除项
      k in d:检查键
         键类型是不可变类型  
    • 4.2.3 字典的格式化字符串
        "AAA's phone number is %(AAA)s." % phonebook
    • 4.2.4 字典方法
      clear:清除字典中所有的项目。
      copy:返回一个具有相同键值对的新字典。
            这是浅复制,值是相同的,不是副本复制!  
            用`deepcopy`可以实现深复制(`from copy import deepcopy`)
      fromkeys :使用给定的键建立新的字典,每个键默认对应的值为None(可以自己提供默认值)。 get:更宽松的访问字典项的方法,字典中不存在的项会返回None(可以自己提供默认值)。
      has_key:检查字典中是否含有给出的键。(3.0没有此函数)
      items:将所有的字典项以列表方式返回,返回时没有特殊的顺序。(iteritems返回迭代器)
      keys:将键以列表方式返回,iterkeys同iteritems。
      pop:弹出对应值并删去该项。
      popitem:随机弹出项。(因为没有顺序)
      setdefault:和get差不多,如果键不存在会更新字典。
      update:利用一个字典项更新另外一个字典。
      values:以列表的形式返回字典中的值。(可重复)(itervalues返回迭代器)

第5章 条件、循环和其他语句

  • 5.1 print和import的更多信息
    • 5.1.1 使用逗号输出(多个表达式,多句不换行)(打印元组要在外层加())
    • 5.1.2 把某件事作为另一件事导入
      import 模块:把模块中的函数导入当前的语义表(as 别名)
      from 模块 import 函数1,函数2...:直接导入命名
      from 模块 import *:导入所有除了以下划线_开头的命名。
  • 5.2 赋值魔法
    • 5.2.1 序列解包x,y,z=1,2,3分别复制,x,y=y,x交换值,x,y,z=(1,2,3)序列赋值)(3.0可以用星号运算符收集多余元素)
    • 5.2.2 链式赋值(将同一个值赋给多个变量的捷径。)
    • 5.2.3 增量赋值(-=+=*=\/=...)
  • 5.3 语句块:缩排的乐趣(4个空格缩进,冒号表示语句块开始)
  • 5.4 条件和条件语句
    • 5.4.1 这就是布尔变量的作用
      标准值Flase和None、所有类型的数字0(浮点型、长整型和其他类型等)、空序列(如空字符串、元组和列表)以及空字典都为假。其他解释为真。(使用bol()函数转换)
    • 5.4.2 条件执行和if语句(和其他语言一样,不想多说)
    • 5.4.6 更复杂的条件
      1. 0 连接比较
      2. in, not in 成员资格运算符
      3. is, not is 同一性运算符(是否同一对象)
      4. 字符串序列比较:字典序
      5. and优先级大于or
    • 5.4.7 断言(在程序中置入检查点 assert 0
  • 5.5 循环
    • 5.5.1 while循环
    • 5.5.2 for循环
         for x in lst:
              print x
      可以用range(a,b)实现[a,b)的整数序列。
        range直接创建序列(2.x下),xrange()一次只创建一个数,适合大序列。(可加步长)
    • 5.5.3 循环遍历字典元素
         for key(or value) in dictionary: pass
    • 5.5.4 一些迭代工具
      可以用zip把多个序列打包起来变成元组序列,然后就方便for了。(for x in zip(a,b):...,如果len(a)enumerate():枚举容器中的序列和值,返回为迭代器。
      reversed()返回迭代器,sorted()返回列表。
    • 5.5.5 跳出循环breakcontinue
    • 5.5.6 循环中的else子句(没调用break后执行)
  • 5.6 列表推导式——轻量级循环
          [表达式 for 变量 in 列表 if 条件](forif可以多个)
  • 5.7 三人行
    • 5.7.1 什么都没发生pass
    • 5.7.2 使用del删除(不仅会移除一个对象的引用,还会移除那个名字本身)
    • 5.7.3 使用exec和eval执行和求值字符串
      exec:执行里面的字符串,可以增加作用域scope。(如g = {} exec "a=1" in g等效于exec("a=1", g))(可以指定多个作用域)
      eval:用于“求值“,会返回值。

本文已用马克飞象重新排版,然后再从evernote复制处理的。
衷心感谢马克飞象和evernote的支持。



你可能感兴趣的:(=====学习笔记=====,+Python学习)