查看原文
其他

[537]成长会Coding小组第一周Python学习笔记

2015-06-23 Scalers ScalersTalk成长持续论

上周我们开启了Coding小组的Python学习活动。这是我们的第一周学习笔记,由小龙整理汇总。目前的节奏是每天10Python核心编程,然后辅以相关的练习。周末线上总结讨论。以后你在ScalersTalk公众号,不仅仅能看到英语学习的进度,也能看到代码学习的进度。我们会把这件事情持续下去,用Python玩出更多的花样。如果你想来,可以加入成长会,和我们一起刷刷刷。

Day01 Page32-42 (第二章 2.1-2.9)

1、语句和表达式

语句:由关键字组成的解释器可执行的命令

表达式:数字运算符构成的算术表达式或者函数调用

2Python中未指定返回值的函数会自动返回None(数据类型NoneType),等价于NULL

3print "变量"时,调用的该变量的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()

7raw_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)逻辑运算符(优先级从高到低)notandor (栗子:1 or 1 and 0

11、变量

字母、数字及下划线(_)组成,数字不能打头,大小写敏感

动态类型,无需事前声明变量类型

12、数字

布尔型 True会被当成 1False会被当成 0

长整型仅受限于用户计算机虚拟内存的大小,可以用于大整数的密码学运算。

13、字符串

定义:引号(单引号、双引号、三引号)之间的字符集合

运算:加号(+)表连接、星号(*)表重复、切片运算符[start : end [: step]]

索引规则:第一个字符的索引为0,最后一个字符索引为 -1

14、列表和元组

列表用中括号([])包裹,元组用小括号(())包裹

列表的元素值和个数可以改变,元组不可以

15、字典:映射数据类型,由键值对构成,用大括号({})包裹

Day02 Page43-56 (第二章2.10-2.19)

1Python中通过缩进对齐来表达代码逻辑(推荐使用4个空格,避免使用制表符)

2if语句语法:

if expression1:

if_suite

elif expression2:

elif_suite

else:

else_suite

3while循环语法:

while expression:

while_suite

4print语句默认会在结尾处加换行符,所以在循环中,都会换行输出;只要在语句最后加个逗号(,),就可以在同行输出(元素间会自动添加空格)

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、使用闭合操作符(小括号、中括号、花括号)时单一语句可以跨多行

3Python的赋值语句不会返回值(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、将经常用到的模块属性替换成本地引用

3os.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

省略对象名字为Ellipsisbool值为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

3decimal模块中的Decimals可以解决浮点数精度问题


这些你看上去可能会觉得很枯燥,但是也正是这些你眼中的枯燥,构建了一个领域的基石。



ScalersTalk ID:scalerstalk


本文作者Scalers,游走在口译世界的IT从业者。微信公众号ScalersTalk,网站ScalersTalk.com


ScalersTalk成长会回复“VIP”查看.口译100小时训练计划群C 456036104



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存