Skip to content

Latest commit

 

History

History
265 lines (245 loc) · 8.75 KB

File metadata and controls

265 lines (245 loc) · 8.75 KB

1 愉快地开始

1.1 获得python

本书所用 Python3.4.3(32bits)

1.2 从IDLE启动Python

1.3 #注释

1.4 print(str + str)

1.5 print(str * 3)

2 设计小游戏

2.1 Run Module

IDLE建议:输入pr TAB。

2.2 缩进

判断、循环语句很重视缩进。

2.3 BIF

Built-in Function,内置函数。例如print(),input()。 Python的变量不需要事先声明,直接给一个合法的名字赋值,这个变量就生成了。 在IDLE中输入dir(__builtins__)可以看到Python提供的内置函数列表。 help()这个BIF可以用于显示BIF的功能描述。 每节课对应的课后作业需要在鱼C论坛完成。

3 基础知识

3.1 变量

3.2 字符串

3.3 原始字符串 r

3.4 长字符串

print(""" ... ... """)

3.5 改进游戏

3.6 条件分支if...else...

3.7 while循环

3.8 引入外援 import模块

import random
a = random.randint(1,10)

3.9 数据类型

3.9.1 整型

3.9.2 浮点型

3.9.3 布尔类型

3.9.4 类型转换

3.9.5 获得类型信息

  • type()
  • isinstance()

3.10 常用操作符

3.10.1 算术操作符

  • / 正常除法
  • // 地板除法(向下取整)

3.10.2 优先级问题

  • ** 优先级运算

3.10.3 比较操作符

3.10.4 逻辑操作符

3<4<5

4 分支与循环

4.4 用缩进避免“悬挂else”

4.5 条件表达式(三元操作符)

small = x if x<y else y

4.6 断言

assert 3<4

4.7 while循环语句

4.8 for循环语句

自动调用迭代器的next()方法

4.9 range([start=0]stop[,step=1])

for i in range(1,10,2):print(i)

4.10 break语句

终止当前循环,跳出循环体。

4.11 continue语句

终止本轮循环,测试循环条件,开始下一轮循环。

5 列表、元组、字符串

5.1 列表:打了激素的数组

5.1.1 创建列表

可以创建一个鱼龙混杂的列表。

5.1.2 向列表添加元素

  • append():将一个元素添加至列表末尾
  • extend():使用一个列表来扩展另一个列表
  • insert(元素,位置)

5.1.3 从列表中获取元素

  • 元素位置对调:a[1],a[4] = a[4],a[1]

5.1.4 从列表删除元素

  • remove():根据内容
  • del:根据位置。也可以删除整个列表。
  • pop():删除最后一个元素。也可以加索引参数。

5.1.5 列表分片slice

a[3:9] 列表分片就是建立原列表的一个拷贝。

5.1.6 列表分片的进阶玩法

三元、步长:list[0:9:2]

5.1.7 常用操作符

  • 比大小。
  • +连接,*复制。
  • in、not in。

5.1.8 列表的小伙伴们dir(list)

  • count():返回次数。count(sub[,start[,end]])
  • index():返回位置。
  • reverse():将列表翻转。
  • sort():默认从小到大排序。sort(func,key,reverse)。

5.1.9 关于分片“拷贝”概念的补充

list2 = list1[:] list3 = list1 2是复制,独立;3是引用,附属。

5.2 元组:戴上枷锁的列表

元组无法直接改变单个元素。

5.2.1 创建和访问一个元组

tuple1 = (1,3,2,4,6) #圆括号
tuple2 = tuple1[:]
temp = 1,2,3 #逗号是关键
type(temp)
8 * (2,)

5.2.2 更新和删除元组

temp = temp[:2]+temp[3:]
del temp

5.3 字符串

“通过拼接旧字符串的各个部分得到新字符串”的方式并不是真正意义上的改变原始字符串,只是将变量指向了新的字符串(旧的字符串失去变量的引用,会被Python的垃圾回收机制释放掉)。

5.3.1 各种内置方法

  • casefold():转为小写字符。
  • count()。
  • find()、index():返回位置。找不到时前者返回-1,后者抛出异常。
  • join():以字符串作为分隔符插入到另一字符串所有字符之间。
  • split():拆分字符串。
  • replace(old,new[,count]):替换。

5.3.2 格式化

  1. format():"{0} love {1},{a} hate {b}".format("I","You",a="He",b="She")
  2. 格式化操作符:'%#X' % 100
  3. 转义字符及含义。

5.4 序列

  • list()、tuple()、str():把一个可迭代对象转换为列表/元组/字符串。
  • len():返回长度。
  • max()/min():返回序列最大/小值,要保证序列或参数的数据类型统一。
  • sum():返回总和。sum(iterable[,start])
  • sorted():sort()实现列表原地排序,sorted()返回一个排序后的新列表。
  • reverse():区别同上。返回一个迭代器对象。
  • enumerate():生成由二元组构成的一个迭代对象。
  • zip():返回由各个可迭代参数共同组成的元组。

6 函数

6.1 乐高积木

6.1.1 创建和调用函数

  • def

6.1.2 函数的参数

6.1.3 函数的返回值

6.2 灵活即强大

6.2.1 形参和实参

6.2.2 函数文档

6.2.3 关键字参数

在传入实参时指定形参的变量名。

6.2.4 默认参数

6.2.5 收集(可变)参数

用于不确定多个参数。 参数前加上星号“*”打包。 多个参数时需要使用关键字参数。 参数为列表a时需要在前面加星号“*”解包。 **收集方式将参数打包成字典。

6.3 我的地盘

6.3.1 函数和过程

Python只有函数,没有过程。所有的函数都有返回值。

6.3.2 再谈返回值

Python可以动态确定函数返回类型。

6.3.3 函数变量的作用域

函数外边无法访问到函数内部的局部变量。 在函数中可以访问全局变量,但不好修改,因为会再在函数内部新建其同名局部变量。

6.4 内嵌函数和闭包

6.4.1 global关键字:在函数内部修改全局变量

6.4.2 内嵌函数

君上之君,非我之君。

6.4.3 闭包

如果在一个内部函数里,对在外部作用域(非全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。 可用nonlocal破之。

6.5 lambda表达式

创建匿名函数。简单方便临时。方便filter()、map()之类的BIF。

g = lambda x,y:x+y
g(3,4)
  • filter(func or none,iterable):过滤。
  • map():映射。返回加工后的新序列。

6.6 递归:阶乘、斐波那契、汉诺塔

7 字典和集合

7.1 字典:当索引不好用时

与哈希(hash)、关系数组是一个概念。 字典是Python中唯一的映射类型。

7.1.1 创建和访问字典

a = dict(one=1,two=2,three=3)
b = {'one':1 , 'two':2 , 'three':3}
c = dict(zip(['one','two','three'],[1,2,3]))
d = dict([('one',1),('two',2),('three',3)]) #dict(元组或列表)
e = dict({'one':1 , 'two':2 , 'three':3})

7.1.2 各种内置方法

  • fromkeys():创建新字典。
  • keys()/values()/items():访问字典中的键/值/项(键与值)。
  • get()/setdefault():前者找不到时返回none,可设定默认返回值。后者找不到时自动添加。
  • in/not in 操作符。
  • clear():清空字典。赋值为空字典有风险:原字典并未被清空,只重定向至新字典。
  • copy():复制字典。独立。
  • pop()/popitem():删除项并显示。前者弹出对应键的值,后者弹出一个项。
  • update():添加项。 **打包解包。

7.2 集合

用大括号但没有映射关系。同样无序。会自动把重复元素清理掉。 因为无序,所以列表转集合再转列表时会乱序。

7.2.2 访问集合

  • 不能像序列一样用下标,只能用迭代。
  • in/not in。
  • add()/remove():添加元素。删除已知元素。

7.2.3 不可变集合

frozenset():像元组一样不能随意增加或删除元素。

8 永久存储

8.1 文件

8.1.1 打开文件

open(file , mode='r' , buffering=-1 , encoding=None , errors=None , newline=None , closefd=True , opener=None) f = open("record.txt")

8.1.2 文件对象的方法

8.1.3 文件的关闭

close()。

8.1.4 文件的读取和定位

  • read()/readline()
  • tell()
  • seek()
  • list()

8.1.5 文件的写入

w是重写,a是追加。

8.1.6 一个任务

8.2 文件系统

import os

  • getcwd():返回当前目录。
  • chdir(path):改变当前目录。
  • listdir(path='.'):当前目录下的文件和文件夹。
  • mkdir(path):创建新文件夹。
  • makedirs(path):创建多层目录。
  • remove(path)/rmdir(path)/removedirs(path):删除文件/目录/多层目录。
  • rename(old , new)
  • system(command)
  • walk(top):遍历。
  • path模块。
  • basename(path)/dirname(path):获取文件/路径名。
  • join(path1[,path2[,...]]):合并路径与文件名
  • split(path)/splitext(path):前者分割路径与文件名,后者分割文件与扩展名。
  • getsize(file):获取文件尺寸,单位Byte。
  • getatime(file)/getctime(file)/getmtime(file):获取文件的最近访问、创建、修改时间。单位浮点型秒数,可用time模块的gmtime()/localtime()换算。

8.3 pickle

可以容易地将列表、字典这类复杂数据类型存储为文件。 几乎可以把所有的Python对象转化为二进制的形式存放。pickling/unpickling。