本篇文章是作者关于在学习了《Python学习手册》以后,分享的学习心得,在此之前,我们先给大家分享一下这本书:

《Python学习手册》学习总结

下载地址:Python学习手册第4版

之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读《Python学习手册》。 在前两章节都是对基本的信息做了概述,我们从第三章开始。

第三章 如何运行程序

import进行模块导入只能运行一次,多次运行需使用reload。

模块往往是变量名的封装,被认为是命名空间。例如:

#myfile.py
title = "test"

>import myfile
>print myfile.title
test 

替代方案是from,下面有同样的效果:

>from myfile import title
>print tittle
test

 from myfile import * 则可以把myfile所有变量全部导入(第19章内容)。

第四章 介绍Python对象类型

虽然字符串支持多种操作,但是它具有不可变性,即原字符串不能改变,只能用新字符串作为结果赋予一个变量。下面是一个试图改变原字符串的操作及报错信息:

> s="spam"
> s[0] = 'z'
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

第五章 数字

str和repr显示格式

>num = 1/3.0
>num
0.33333333333333331
>print num
333333333333

>repr(num)
'0.33333333333333331' #交互模式回显
>str(num)
'333333333333' #打印语句

浮点数运算在精确方面有缺陷。这和硬件有关,打印结果也不能完全解决。

> 0.1+0.1+0.1-0.3
5.551115123125783e-17
> print 0.1+0.1+0.1-0.3
5.55111512313e-17 

使用小数对象可以进行修正

> from decimal import Decimal
> Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3')
Decimal('0.0') 

第六章 动态类型简介

a = 3这个语句实际上执行了三个步骤:创建一个对象代表值3;如果还未创建,创建一个变量a;将变量与新的对象3连接。这时,变量a成为了对象3的一个引用,也可以看做是指针。

类型属于对象,而不是变量,这就很好理解为什么Python中同一个变量名可以作为不同类型的对象的引用了。

在这种机制下,每个对象都有一个引用计数器,当计数器为0时就被系统回收,这便是Python中对象的垃圾收集的方法了。

不同变量引用同一个数字或字符串时,对变量操作(eg.a=3 a=a+2)只是创建了一个新的对象并使它引用新对象,这也是上一章提到的字符串不能改动的原因。而对于一些类型来说,有的操作确实能改变对象,如下所示:

#situation 1
>L1=[2,3,4]
>L2=L1
>L1=24
>L2
[2,3,4]
#situation 2
L1=[2,3,4]
>L2=L1
>L2[0]=24
>L1
[24,3,4]

为了让两个变量使用不同的对象,可以拷贝对象,使用L2=L1[:]来代替L2=L1即可。对于字典则使用D.copy()方法。标准库的copy模块提供了一个对任意对象的调用方法,下面两种方式的区别暂不讨论:

import copy
X = copy.copy(Y) #表层拷贝
X = copy.deepcopy(Y) #深拷贝