【廖雪峰课程笔记】之初识Python

第1章 Python变量与数据类型

1-1 Python中的基础数据类型


一、整数
  • Python可以处理任意大小的整数,包括整整数、负整数,表示方法与数学中的表示方法一样。
二、浮点数
  • 浮点数,即小数,可以用科学记数法和数学写法表示;
  • 整数和浮点数在计算机内部的存储方式是不同的,整数运算永远是精确的,浮点数运算则可能会有四舍五入的误差。
三、字符串
  • 以 ‘ ’ 或 “ ” 括起来的任意文本。切记: ‘ ’ 和 “ ” 只是字符串的一种表示方式,并不是字符串的一部分。
四、布尔值
  • 一个布尔值只有 True 或 False (注意:大小写),Python中可以直接使用 True 和 False 表示布尔值,也可以通过布尔运算计算出来;
  • 布尔运算有3个运算符:and or not。
五、空值
  • 空值是Python中的一个特殊字符,用 None 表示,切记:None 与0的含义不一样。

1-2 Python之Print语句


  • print 输出指定的内容;
  • 多个字符串时用逗号(,)隔开,可以连成一串输出,print 打印时遇到逗号会输出一个空格;
  • print 可以打印数值或数值运算。

1-3 Python的注释


  • 注释是用来说明代码作用的,程序运行时,python 解释器会直接忽略掉注释;
  • Python 的注释是以 “ # ” 开头,一直到行尾的文字;
  • 注释的用途:不需要但又不想删除的代码,可以通过注释暂时屏蔽。

1-4 Python中什么是变量


  • 计算机程序中的变量,不仅可以是数值,也可以是任意的数据类型;
  • Python中,变量是用一个变量名表示,变量名必须是大小写英文、数字和下划线(_)的组合,且不能以数字开头,区分大小写
  • Python中,等号(=)是赋值语句,可以将任意类型的数据赋值给变量,同一变量可以反复赋值,而且可以是不同类型的变量;
  • 变量类型不固定的语言是动态语言,如python;静态语言是指在定义变量时必须指定变量类型的语言,如java;和静态语言相比,动态语言更加灵活。

1-5 Python中定义字符串


  • 当字符串本身包含了‘ ’时,可以用“ ”括起来表示;当字符串本身包含了“ ”时,可以用‘ ’括号括起来表示;
  • 当字符串本身包含了‘ ’“ ”时,需要对字符串中的特殊字符进行转义,Python中使用\进行转义,在‘ ’“ ”前面插入\表示该字符为普通字符;
  • 转义字符不计入字符串的内容中,常见的需要转义的字符:\n表示换行、\t表示一个制表符、\\表示字符串\本身。

1-6 Python中raw字符串与多行字符串


  • 如果一个字符串中包含了多个需要转义的字符,对每一个都加转义符会很麻烦,通过在字符串前面加 r 表示这是一个raw字符串,里面的特殊字符就不需要转义了;
  • r ‘…’ 表示法,不能表示多行字符串,也不能表示包含‘ ’“ ”的字符串;
  • ‘“.....”’表示法,可以表示多行字符串,也是一个 raw 字符串,可以表示上述说的情况。

1-7 Python中Unicode字符串


  • 计算机只能处理数值,若要处理文本,需要先将文本转换为数字才能处理。0-255用来表示大小写英文字母、数字和特殊符号,被称为ASCII编码;
  • 中国制定了GB2312用来将中文编码进去,且不能和ASCII编码冲突,类似的日本、韩国也存在类似的问题,为了统一所有文字的编码,Unicode编码应运而生;
  • Python的诞生比ASCII编码要早,所以最早的Python仅支持ASCII编码,后来添加了支持Unicode编码,以Unicode编码的字符用u‘…’表示,不加 u 则中文无法正常显示;
  • Unicode字符串除了多了一个u以外,与普通字符串没有区别,转义字符和多行表示法仍然有效;
  • 在Python环境中,若出现了UnicodeDecodeError是因为.py文件保存的格式有问题,可以在代码的第一行添加注释# -*- coding: utf-8 -*- 目的是告诉Python解释器用UTF-8编码解读源码。

1-8 Python中整数与浮点数


  • Python支持整数与浮点数的四则运算,和数学四则运算一致,可以使用括号嵌套;
  • 不同点:Python3中除法运算结果永远是浮点数、浮点数运算结果仍是浮点数,但是浮点数与整数的混合运算结果为浮点数
  • Python一定要区分整数运算和浮点数运算的原因:整数运算的结果永远是精确的,而浮点数运算的结果不一定是准确的,因为计算机内存再大也无法精确表示出无限循环小数;
  • Python提供了一个求余数的运算%可以计算余数。

1-9 Python中布尔类型


  • 布尔运算在计算机中用来做条件判断,根据计算结果为 True 或 False 自动执行后续的代码;
  • 在Python中,布尔运算可以与其他数据类型做 and \ or \ not 运算;
  • Python将 0 、空字符串 ‘ ’ 、None均看作是 False ,将其它数值和非空字符串均看作是 True ;
  • and 和 or 运算时的短路原则:Python解释器在做布尔运算时,只要能提前确定计算结果,则不再执行后续代码,直接返回结果。

第2章 List 和 Tuple 数据类型

2-1 Python创建list


  • list是一种数学意义上的有序集合,用[ ]表示,可以随时添加和删除其中的元素;
  • Python是一种动态语言,list中的元素并不要求都是同一种数据类型,可以包含各种类型的数据,也可以是空的。

2-2 Python按照索引访问list


  • 索引即元素在list中的位置,list的索引是从第0位开始的,第二个元素是第1位,以此类推;
  • 注意:使用索引时,千万不能越界,否则会报错。通常使用切片来访问元素,即list[索引值]。

2-3 Python之倒序访问list


  • 倒序访问时,最后一位元素的索引是从-1开始的,倒数第二位是-2,以此类推,切记:使用倒序索引时不能越界。

2-4 Python之list添加新元素


  • 方法一:list.append():总是将元素追加至list尾部;
  • 方法二:list.insert(index, name):将指定的元素name添加至指定索引index的位置,该索引之后的元素自动向后移动。

2-5 Python之list删除元素


  • list.pop():默认总是删除list中最后一个元素,当需要删除指定索引的元素时,用list.pop(index)来指定索引;
  • pop()的结果是返回本次删除的元素,同时list中的指定元素会被删除。

2-6 Python之替换list元素


  • 对list中的元素进行更新,通过切片的方法对list的索引进行赋值,即可实现新元素代替原来元素,list元素个数保持不变。

2-7 Python之创建Tuple


  • Tuple是一种有序的集合,用( )表示,和list类似,但Tuple一旦创建后,不可修改;
  • 访问Tuple的方法和list一样通过索引切片即可,但不能赋值成别的元素,更没有append()/pop()/insert()等函数。

2-8 Python之单元素Tuple


  • Tuple和list一样,可以包含任意个元素,空Tuple用Tuple()表示;
  • ( )既可以表示tuple,也可以作为括号表示运算时的优先级,单个元素时会被Python解释器认为是元素,而非tuple;
  • 因为使用( )表示Tuple存在歧义,Python规定:单元素tuple时需要在元素后加一个逗号 “,” 。多元素tuple时可以不加;

2-9 Python之可变Tuple


  • Tuple的不可变是指其元素指向不变,即指向了元素 a 就不能指向元素 b ,指向了list1就不能再指向list2;
  • 当Tuple中的所有元素本身是不可变时,Tuple是不可变的;当可变元素如list作为Tuple的元素时,list中的元素是可变的,可以变相地实现Tuple可变。

第3章 条件判断和循环

3-1 Python之if语句


  • if 语句用于控制程序的执行,"判断条件"成立时,则执行后面的语句,执行内容可以多行,以缩进来区分同一范围;
  • if后接表达式,用冒号(:)表示代码块开始,Python代码的缩紧规则:具有相同缩进的代码视为代码块,缩进时的习惯:4个空格键,不要用Tab键、不要Tab键与空格混用;

3-2 Python之if-else语句


  • 利用if......else语句,可以根据条件表达式的值为True或False,分别执行if代码块,或else代码块,else后面要紧跟冒号(:)
  • 大于号(>)和小于号(<)在没有括号的情况下会比andor优先判断。

3-3 Python之for循环


  • for循环:重复执行语句,依次将集合序列中的元素逐个取出,并赋值给指定的变量;
  • for……else循环:和普通的for循环一样,else语句会在代码正常执行完后执行,而非因break中断跳出。

3-4 Python之while循环


  • while循环:在给定的判断条件为true 时执行循环体,否则退出循环体;
  • while……else循环,是在判断条件为False时执行else代码语句;
  • while循环的判断条件总为真时,会无限执行下去,变成死循环,因此要注意while循环的退出条件;

3-5 Python之循环控制语句


  • break语句:终止for循环或while循环,并且跳出整个循环,即使循环条件没有False或序列还没被完全循环完;
  • continue语句:跳出for循环或while循环本次的循环,即跳过当前循环剩下的代码语句,继续进行下一轮循环;
  • pass语句:空语句,不做任何事情,用做占位语句保持程序结构的完整性,通常用在定义类时使用。

3-6 Python之多重循环


  • Python语言中,允许一个循环中嵌套另外一个循环,如for循环中嵌套for循环、while循环中嵌套for循环。

第4章 Dict和Set数据类型

4-1 Python之什么是dict


  • dict:一种键值对组成的无序集合,即索引(key)和对应值(value),用花括号{ }表示,键与值之间用冒号(:)连接,一个key:value算一个元素,元素之间用逗号(,)连接;
  • dict的元素是通过key进行存取,而非list的索引存取,所以dict的key必须是唯一的,但是value不必唯一。

4-2 Python之访问dict


  • dict通过切片的方法:d[key]来访问dict的元素,和list的方法类似,只要key存在则返回对应的value,若不存在则报错KeyError;
  • 若避免出现KeyError的情况,可以通过if进行判断,也可以通过dict自带的方法,dict.get(key)进行访问dict,若key不存在则返回None。

4-3 Python中dict的特点


  • 特点一:查找速度快,无论dict有10个元素还是10万个,速度都一样,而list是随着元素个数的增多而逐渐下降。对应的缺点:占用内存多,浪费资源;
  • 特点二:存储的元素key:value是无序的,打印输出的顺序和创建的顺序不一定一样,不同的机器打印出来的顺序也可能不一样;
  • 特点三:作为key的元素必须是不可变的,list不能作为key,最常用的是字符串。

4-4 Python之更新dict


  • dict[key] = value可以将指定的元素添加到dict,若已存在相同的key值,则替换原有的元素;
  • dict.clear():删除dict中的所有元素;
  • dict.update(dict1):将dict1添加到dict中;
  • dict.pop(key):删除dict中指定key的元素,并返回该key对应的value;
  • dict.popitem():随机删除dict中的一个元素(键值对),一般为末尾,并返回删除的键值对。

4-5 Python之遍历dict


  • dict和list一样,都是序列,通过for循环或while循环可以遍历其中的元素;
  • dict.keys():以列表形式返回dict所有的键组成的可迭代对象,dict通过对key的遍历可以在循环体内返回对应的value;
  • dict.values():以列表的形式,返回dict所有的值组成的可迭代对象;
  • dict.items():以列表的形式,返回由key与value组成的Tuple构成的可迭代对象。
  • 字典的keys()函数和items()函数,返回的均是视图对象,支持集合的交、并、差等运算,但是values()函数不支持。

4-6 Python中什么是set


  • set:无序不重复的数据集合,类似于dict的key,基本功能:关系测试、删除重复元素;
  • 创建set:调用set()并传入一个list,set([list]),其打印形式类似list,但结果无序;
  • 当传入set()的list中存在重复元素时,set()的结果会自动忽略掉重复的元素;
  • 不支持切片和索引;
  • 支持一系列标准操作:并集(|)、交集(&)、差集(-)、对称差集(^)

4-7 Python之访问set


  • 由于set中的元素是无序的,无法通过索引来访问,访问set中的元素实际上就是判断一个元素是否在set中;
  • 在进行元素判断时,特别注意要区分英文字母的大小写;

4-8 Python之set的特点


  • 特点:set的内部结构和dict很像,运算速度快、set的元素和dict的key类似,必须是不变对象、set的元素是无序存储;
  • 用途:判断用户输入的星期/月份是否是合法的,通过提前设定的set集合,通过一步判断即可快速实现。

4-9 Python之遍历set


  • set是一个集合,遍历set和遍历list类似,都可以通过for循环实现,其结果的顺序和set中元素的顺序很可能不同,不同机器上的运行结果很可能也不同。

4-10 Python之更新set


  • 更新set元素:把新的元素添加到set 中、把已有元素从set中删除;
  • set.add(name):将新元素name添加到set中,若set 中已存在name,则无法添加进去,但是不会报错;
  • set.remove(name):将指定元素name从set 中删除,若set中不存在name,则会报错,需要提前做判断。

第5章 函数

5-1 Python之什么是函数


  • 抽象是数学中最常见的概念,借助抽象我们不必关注底层的具体计算过程,直接在更高的层次上思考问题,写计算机程序也一样,函数就是最基本的一种代码抽象。Python不仅能轻松灵活地定义函数,本身也内置了很多有用的函数,可以调用;
  • 函数:指组织好的,可重复使用的,用来实现单一或相关功能的代码段。函数能提高应用的模块性和代码的重复利用率。

5-2 Python之调用函数


  • 调用函数,需要知道函数的名称和参数,可以在交互命令行通过help(name)查看函数的信息;
  • 调用函数时:1)若传入的参数数量不对,会报TypeError错误,并给出信息:该函数需要几个参数,却提供了几个参数;2)若传入的参数类型不能被函数接受,也会报TypeError错误,并给出信息:是错误的参数类型;

5-3 Python之编写函数


  • 定义一个函数,使用def语句,依次写出函数名、括号、括号中的参数、冒号,然后在缩进块中编写函数体,return语句用来退出函数,选择性地向调用方返回一个表达式或数值;
  • 函数体内部的语句在执行时,一旦执行到return语句,函数就执行完毕,并返回结果;若没有return语句,函数执行完毕后会返回None。

5-4 Python函数之返回多个值


  • Python函数返回多个值,其实是返回一个Tuple,在语法上,返回tuple可以省略括号写起来方便,多个变量可以同时接受一个tuple,按位置赋给对应的值。

5-5 Python之递归函数


  • 若一个函数在内部调用了该函数本身,则称为递归函数。其优点:定义简单、逻辑清晰,理论上所有的递归函数都可以写成循环函数;
  • 使用递归函数要防止栈溢出。计算机中,函数调用是通过栈(stack)这种数据结果实现的,每进入一个函数调用,栈会加一层栈帧,每当函数返回栈就会减少一帧,由于栈的大小不是无限循环,递归调用的次数过多时会导致栈溢出。

5-6 Python之定义默认参数


  • 调用函数时,可以使用的正式参数类型:必需参数、关键字参数、默认参数、可变参数;
  • 必需参数:以正确的顺序传入参数,调用时和声明时必须一致;
  • 关键字参数:函数调用使用关键字参数来确定转入的参数值;
  • 默认参数:默认参数的作用是简化函数调用(定义时默认设置,调用时不用传参),只能定义在必需参数的后面;

5-7 Python之定义可变参数


  • 若让一个函数可以接受任意个参数,可以定义一个可变参数,用星号(*) + 变量名表示,该变量会存入所有未命名的参数,Python会将转入的一组参数封装成一个tuple专递给该可变参数,函数调用没有指定参数时,该变量是空tuple。

第6章 切片

6-1 Python之切片操作


  • Python提供了切片(slice)功能,用来简化取指定索引范围的操作,通常用来对list和tuple进行提取元素;
  • list[0:n]表示从索引0开始取,直到索引n为止,但是不包括索引n,当第一个索引是0时,可以简写:list[:n]
  • list[n:]表示从索引n开始取,取之后所有的元素;
  • list[:]表示从头到尾取出所有元素,实际上相当于复制出了一个新list;
  • list[m:n:s]表示从索引m开始,到索引n(不包含)结束,步长间隔为s;
  • 取多个元素时,切片右边界值n表示索引为n(不包含),返回的是索引为n-1的元素,因为索引是从0开始,所以返回的是序列中第n个元素;
  • 取单个元素时,切片值n表示索引为n,因为索引是从0开始,所以返回的是序列中第n+1位元素。

6-2 Python之倒序切片


  • Python的切片提供了倒序切片,list最后一个元素的索引是 -1,倒序切片方法和正序除了索引不用,用法完全一样;
  • list[-n:-m]表示从索引-n开始取,直到索引到为-m为止,但是不包括索引为-m,当-n后所有元素都取完时,可以简写:list[-n:];
  • list[:-n]表示从最开始取,直到索引为-n为止,但是不包含-n;
  • 取多个元素时,切片右边界为-n表示索引为-n(不包含),返回的是序列中倒数第-(n+1)个元素
  • 取单个元素时,切片值为-n表示索引为-n,返回的是序列中倒数第n个元素;

6-3 Python之字符串切片


  • 字符串’xxx’和Unicode字符串u‘xxx’也可以看作是一个list,每个字符是一个元素,也可以进行切片操作,操作结果仍是字符串。

第7章 迭代

7-1 Python之什么是迭代


  • 集合是指包含一组元素的数据结构,如:有序集合list/tuple/str/unicode、无序集合set/dict;
  • 迭代(iteration)操作:对于一个集合,无论是否有序,通过for循环都可以依次取出集合的每个元素。

7-2 Python之索引迭代


  • 在Python中,迭代永远是取元素本身,而非元素的索引;
  • enumerate():将可遍历的数据对象(如list/tuple/str)组合为一个由索引及对应元素组成的tuple;
  • 索引迭代,并非真的按照索引进行访问,而是由enumerate函数把每个元素变成Tuple(index,element),再进行for循环,遍历出索引及元素本身;
  • enumerate(sequence, [start=0])函数的默认参数start可以指定起始索引的值为0或1。

7-3 Python之迭代dict的value


  • dict对象本身是可迭代对象,但每次迭代的是dict的key,通过dict.value()方法可以将dict的所有value组成一个list进行迭代;
  • dict.itervalues()dict.value()的迭代效果一样,区别:后者是新生成了list,而前者不作转换,所以更省内存;
  • 迭代是一种抽象的操作,任何可迭代对象都可以进行for循环,我们不关心内部是如何迭代的,它不对迭代对象内部的数据有任何要求。

7-4 Python之迭代dict的key和value


  • dict.items():以列表的形式返回由dict的key和value组成的Tuple。items()函数配合for循环即可遍历dict的key和value。

第8章 推导式

8-1 Python 之推导式


  • 推导式comprehensions(又称解析式),是Python的一种独有特性;
  • 推导式是从一个数据序列构建另一个新的数据序列的结构体;
  • 在Pyhton2和3中,都支持推导式,有3种类型:1)列表(list)推导式;2)字典(dict)推导式;3)集合(set)推导式。

8-2 列表推导式


  • 使用中括号[]生成列表,for循环 + if判断,当if判断结果为True时,把循环的当前元素进行表达式运算,添加到列表中;
  • 示例:[x * x for x in range(1, 11) if x % 2 == 0] = [4, 16, 36, 64, 100]
  • 多层推导式:使用for循环嵌套生成列表,示例:[m + n for m in 'ABC' for n in '123’] = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3’]
  • 将中括号替换成小括号,得到一个生成器generator

8-3 字典推导式


  • 字典推导和列表推导使用方法是类似的,需要将中括号该改成大括号
  • 示例:dict1 = {"xz":12, "sm":34},{k:v for k, v in dict1.items() if v % 3 == 0} —> {'xz': 12}
  • 该方法可以快速更换dict的key和values

8-4 集合推导式


  • 集合推导和列表推导的使用方法是类似的,需要将中括号该改成大括号
  • 示例:{x**2 for x in [1, 1, 2]} —> {1, 4}

你可能感兴趣的:(【廖雪峰课程笔记】之初识Python)