[537]成长会Coding小组第一周Python学习笔记
上周我们开启了Coding小组的Python学习活动。这是我们的第一周学习笔记,由小龙整理汇总。目前的节奏是每天10页Python核心编程,然后辅以相关的练习。周末线上总结讨论。以后你在ScalersTalk公众号,不仅仅能看到英语学习的进度,也能看到代码学习的进度。我们会把这件事情持续下去,用Python玩出更多的花样。如果你想来,可以加入成长会,和我们一起刷刷刷。
Day01 Page32-42 (第二章 2.1-2.9)
1、语句和表达式
语句:由关键字组成的解释器可执行的命令
表达式:数字运算符构成的算术表达式或者函数调用
2、Python中未指定返回值的函数会自动返回None(数据类型NoneType),等价于NULL
3、print "变量"时,调用的该变量的str()函数,在交互式解释器中直接使用"变量名"查看时,调用的该变量的repr()函数,前者对用户友好,后者对解释器友好
4、下划线(_)在交互式解释器中表示最后一个表达式的值
>>> myString = 'Hello World!'
>>> myString
'Hello World!'
>>> _
Hello World!
5、百分号(%):字符串格式运算符,可实现字符串替换,有%d,%f,%s
>>> print 'str is %d, %s, %.2f' % (4, "adb", 0.1)
str is 4, adb, 0.10
6、符号>>:重定向输出
(1)重定向到标准错误输出
import sys
print >> sys.stderr, 'Fatal error: invalid input!'
'Fatal error: invalid input!'
(2)重定向到日志文件
logfile = open('/tmp/mylog.txt', 'a')
print >> logfile, 'Fatal error: invalid input!'
logfile.close()
7、raw_input()提示输入,以字符串形式输入,如果需要使用数字,需要用int()进行转换。会剔除掉输入中尾部的换行字符。
8、通过内建函数 help(对象) 来获取该对象的相关信息
9、注释
(1)单行注释:以井号(#)开始
(2)文档注释:模块、类和函数起始处的字符串,可通过对象的 __doc__ 属性来查看
>>>def foo():
"This is a doc string."
return True
>>>foo.__doc__
'This is a doc string.'
10、运算符
(1)除法
a、在py2.7中 '/' 默认也是地板除,解决方法:
from __future__ import division
b、地板除 '//'
(2)乘方(**)
(3)逻辑运算符(优先级从高到低):not、and、or (栗子:1 or 1 and 0)
11、变量
字母、数字及下划线(_)组成,数字不能打头,大小写敏感
动态类型,无需事前声明变量类型
12、数字
布尔型 True会被当成 1,False会被当成 0
长整型仅受限于用户计算机虚拟内存的大小,可以用于大整数的密码学运算。
13、字符串
定义:引号(单引号、双引号、三引号)之间的字符集合
运算:加号(+)表连接、星号(*)表重复、切片运算符[start : end [: step]]
索引规则:第一个字符的索引为0,最后一个字符索引为 -1
14、列表和元组
列表用中括号([…])包裹,元组用小括号((…))包裹
列表的元素值和个数可以改变,元组不可以
15、字典:映射数据类型,由键值对构成,用大括号({…})包裹
Day02 Page43-56 (第二章2.10-2.19)
1、Python中通过缩进对齐来表达代码逻辑(推荐使用4个空格,避免使用制表符)
2、if语句语法:
if expression1:
if_suite
elif expression2:
elif_suite
else:
else_suite
3、while循环语法:
while expression:
while_suite
4、print语句默认会在结尾处加换行符,所以在循环中,都会换行输出;只要在语句最后加个逗号(,),就可以在同行输出(元素间会自动添加空格)
5、既循环索引又循环元素:
for index,elem in enumerate(list):
print index,elem
6、列表解析
sqdEvens = [x ** 2 for x in range(8) if not x % 2]
7、打开文件
handle = open(file_name, access_mode = 'r'),默认方式为'r'只读,还有'w'只写、'a'追加、'b'二进制访问、'+'读写
8、异常
(1)句式:
try:
try_suite
except Error,e:
print "error: ",e
(2)手动抛出异常:raise IOError
9、函数
(1)Python是通过引用来调用对象的,故函数内对参数的改变会影响原始可变对象的值
(2)默认参数:
def foo(debug=True):
function_suite
10、类
(1)、__init__()方法是对象实例创建后自动执行的初始化方法
(2)、self 是类实例自身的引用
(3)、self.__class__.__name__:实例化该对象的类的名字
(4)、创建实例
>>>foo1 = FooClass()
11、模块
模块是一种组织形式,它可以包含可执行代码、函数和类或者这些东西的组合
sys模块中sys.stdout.write()方法不会自动在字符串后加换行符
>>>import sys
>>>sys.stdout.write('Hello World!\n')
Hello World!
12、实用的函数
Day03 Page60-73 (第三章 3.1-3.4)
1、特殊字符
反斜杠(\)继续上一行
分号(;)将俩个语句连在一行(这行不能开始新的代码块)
2、使用闭合操作符(小括号、中括号、花括号)时单一语句可以跨多行
3、Python的赋值语句不会返回值(Java会有返回值),但是可以链式赋值,也可以多元赋值
4、内建:built-in是 __builtins__ 模块的成员,该模块由解释器自动导入
5、专用下划线标识符
_xxx 弱内部使用标识,执行 from module import * 时不会导入该变量
__xxx__ 系统定义名字
__xxx 私有变量名
6、模块结构和布局
# (1) 起始行(Unix) (能够仅输入脚本名字来执行脚本)
(如果包涵中文,需加 #coding:utf-8)
# (2) 模块文档(通过 module.__doc__ 访问)
# (3) 模块导入 (函数内部的模块导入代码不会被执行, 除非该函数正在执行)
# (4) 变量定义 (此处定义的为全局变量,请尽量使用局部变量)
# (5) 类定义 (当模块被导入时 class 语句会被执行, 类也会被定义)
# (6) 函数定义 (当模块被导入时 def 语句会被执行, 函数也都会被定义好)
# (7) 主程序(无论这个模块是被别的模块导入还是作为脚本直接执行,都会执行这部分代码)
注:
通常只有主程序模块中有大量的顶级可执行代码,所有其它被导入的模块只应该有很少的顶级执行代码,所有的功能代码都应该封装在函数或类当中
7、__name__:如果模块被导入__name__的值为模块名;如果模块被直接执行__name__的值为'__main__'
Day04 Page74-83 (第三章 3.5-3.6)
1、引用计数:当创建对象时,为该对象创建了一个引用计数,当引用计数为0时,该对象会被垃圾回收
解释器通过引用计数器记录使用中的对象各有多少引用
引用计数增加:对象被创建、另外的别名被创建、作为参数传递给函数(新的本地引用)、成为容器对象的一个元素
引用计数减少:一个本地引用离开了其作用范围、对象的别名被显示的销毁、对象的一个别名被其他对象赋值、对象从一个窗口对象中移除、窗口对象本身被销毁
2、将经常用到的模块属性替换成本地引用
3、os.path.exists()如果用绝对路径,检查对应名字是否存在;如果是文件名,用于检查当前路径下的文件是否存在。
4、相关材料
Python风格指南 https://www.python.org/dev/peps/pep-0008/
Python快速参考http://infohost.nmt.edu/tcc/help/pubs/python/web/
《Python核心编程》第二版源码 https://github.com/Gexos/Core-Python-Programming-2nd-Edition-Examples-and-Source-Code
调试器pdb
记录器logging
性能测试器profile,hotshot, cProfile
5、os.linesep在win下是\r\n,在unix下是\n
Day05 Page87-98 (第四章 4.1-4.5)
1、对象
Python的所有资源采用对象的方式进行管理。对象有三个属性,ID,类型和值。
ID,采用id()可以看到内存地址
类型,采用type()可以看到类型
值,对象表示的数据项。其值是否可以更改被称为可变性(Mutabilty)
对象的属性用句点(.)标记来访问
2、标准类型
整型、布尔型、长整型、浮点型、复数型、字符串、列表、元组和字典
3、其他内建类型
类型、NoneType对象(None)、文件、集合/固定集合、函数/方法、模块和类
所有类型对象的类型都是type
类就是类型,实例是对应类型的对象
所有标准对象均可用于布尔测试,同类型能比较大小。值为零或者空的对象,其测试值均为False。
5、内部类型
代码、帧、跟踪记录、切片、省略、Xrange
代码对象:编译过的源代码片断,可以被exec命令或者eval()执行,是函数的一个属性
eval(str):将字符串str当成有效的表达式来求值并返回计算结果
帧对象:程序运行时所需要知道的所有信息,每次函数调用会产生一个新的帧
跟踪记录对象:抛出异常时的信息记录,主要是跟踪栈信息,如果有异常处理程序,则可以访问处理。
切片对象:语法为sequence[start: end : step]或利用内建函数slice()
If start<end then step>0; if start>end then step<0
省略对象名字为Ellipsis,bool值为True
Xrange对象:通过xrange()创建,节省内存或超大数据集
6、对象值的比较
数值按大小比较,字符串按序列值比较,支持多个比较操作,顺序从左到右
7、判断是否是同一个对象 is 或 is not
a is b <==> id(a) == id(b)
7、Python会对小整数(-5,256)和短字符串进行缓存
补充Page99-114 (第四章 4.6-4.9):
1、对象的打印。每个对象可以实现一个可打印的字符串表示,如果是不易显示的对象,通常的形式是:<object_something_or_another>
2、isinstance(obj,(int,str)):判断对象是否是某类型的实例,返回Boolean
3、decimal模块中的Decimals可以解决浮点数精度问题
这些你看上去可能会觉得很枯燥,但是也正是这些你眼中的枯燥,构建了一个领域的基石。
本文作者Scalers,游走在口译世界的IT从业者。微信公众号ScalersTalk,网站ScalersTalk.com
ScalersTalk成长会回复“VIP”查看.口译100小时训练计划群C 456036104