您的位置:首页 > 编程语言 > Python开发

python之一(简明python教程新旧版勘误)

2014-04-27 14:35 477 查看
写在前面:作为一个非科班出身的“程序媛”已经好多天都没写过代码了,本科时候学过的那些C/C++也从来没有没有真正掌握过,因此开始进行每天编程一小时活动。虽然每天一小时时间不是很长,但我相信“不积跬步无以至千里”,坚持这项活动不为别的,只是想真正去投入一件事情。

从本科学习C/C++的经历来看,用这两门语言去做点事情,真是太困难了,好多代码都要自己写,根据网上很多老程序员的推荐,决定先从很好上手的python开始学起。目前是第一阶段,学习python的语法,使用《简明python教程》作为学习资料。《简明python教程》写的很简洁,很好上手,但是该教程是基于python
2.x的好像,对于python 3.x很多函数都已经不适用了。从开始“每天编程一小时”到今天共五天,已经学习到了错误处理部分了。

下一步学习计划:基本掌握python语法之后,开始学习《统计思维:程序员数学之概率统计》,这本书是基于python介绍了统计基本知识的程序员数学教程,刚好可以弥补一下之前概率论没好好学的遗憾。在完成阅读并根据本书要求编写代码之后通读一遍python
3.4.0的documentation,主要是想看看之前学习的部分有没有什么遗漏的地方。再之后可能就去学一些python网络编程,或者是gui方面的知识了吧,不过这都是后话了。

《简明python教程》旧版本部分在新版本上的编程语法问题:

旧版:print 'Hello World'

新版:print('Hello world')
在windows下运行python脚本时,原文给出的代码为:
<span style="font-family:KaiTi_GB2312;font-size:18px;">python yourcode.py</span>
实际用的时候是不需要加上上面代码的python的,直接给出脚本文件地址就好了
旧版:
<span style="font-family:KaiTi_GB2312;font-size:18px;">print 'Hello',
print 'world'</span>
以上代码输出结果是打印出来的'Helloworld'在同一行显示,但是在新版里面这样已经行不通了。
<span style="font-family:KaiTi_GB2312;font-size:18px;">print('Hello',end='')
print('world')</span>
以上为新版代码,end=''单引号中可以加入不同内容,作为连接两个字符串的部分,例如:
<span style="font-family:KaiTi_GB2312;font-size:18px;">print('Hello',end=' ')
print('world')</span>
打印结果为'Hello
world'注意中间的空格。
本书第十章“解决问题——编写一个Python脚本”给出了一个备份打包文件夹的例子,其中作者直接使用'zip'的命令行进行打包的,但是在我的机器(window
8 pro)上这样做会提示没有这个命令。我查了一些windows下不使用第三方程序命令行打包的资料,国外网站上给出了解决方案:
<span style="font-family:KaiTi_GB2312;font-size:18px;">set FILETOZIP=c:\ue_english.txt

set TEMPDIR=C:\temp738
rmdir %TEMPDIR%
mkdir %TEMPDIR%
copy %FILETOZIP% %TEMPDIR%

echo Set objArgs = WScript.Arguments > _zipIt.vbs
echo InputFolder = objArgs(0) >> _zipIt.vbs
echo ZipFile = objArgs(1) >> _zipIt.vbs
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs
echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
echo wScript.Sleep 2000 >> _zipIt.vbs

CScript  _zipIt.vbs  %TEMPDIR%  C:\someArchive.zip

pause</span>
我试了一下,会提示没有_zipIt.vbs命令。详细信息请见:这里
《简明Python教程》中给出了读取文件的方式:
<span style="font-family:KaiTi_GB2312;font-size:18px;">f = file('poem.txt', 'w') # open for 'w'riting</span>
但新版中应该是没有file这个函数了,所以用一下方式读取或写入文件:
<span style="font-family:KaiTi_GB2312;font-size:18px;">f = open('poem.txt', 'w') # open for 'w'riting
f = open('poem.txt', 'r') # open for 'r'ading</span>

第十二章存储器部分给出了文档序列化方式,使用的module pickle,原文说明了有两种模块,一种是pure python,另一种为c实现的,c的速度更快,需要引入的moduel为cPickle,但新版中统一了两个模块的使用方式为:
<span style="font-family:KaiTi_GB2312;font-size:18px;">import pickle</span>
使用下面方式会报错:
<span style="font-family:KaiTi_GB2312;font-size:18px;">import cPickle</span>

第十二章介绍的序列化方式使用了函数dump,但是在运行的时候会报错:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="background-color: rgb(255, 255, 0);">import cPickle as p</span>
#import pickle as p
shoplistfile = 'shoplist.data'
# the name of the file where we will store the object
shoplist = ['apple', 'mango', 'carrot']
# Write to the file
<span style="background-color: rgb(255, 255, 0);">f = file(shoplistfile, 'w')</span>
p.dump(shoplist, f) # dump the object to a file
f.close()
del shoplist # remove the shoplist
# Read back from the storage
<span style="background-color: rgb(255, 255, 0);">f = file(shoplistfile)</span>
storedlist = p.load(f)
print storedlist</span>
有问题的代码已经高亮标出,正确的写法如下:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="background-color: rgb(255, 255, 0);">import pickle as p</span>
#import pickle as p
shoplistfile = 'shoplist.data'
# the name of the file where we will store the object
shoplist = ['apple', 'mango', 'carrot']
# Write to the file
<span style="background-color: rgb(255, 255, 0);">f = file(shoplistfile, 'wb')</span>
p.dump(shoplist, f) # dump the object to a file
f.close()
del shoplist # remove the shoplist
# Read back from the storage
<span style="background-color: rgb(255, 255, 0);">f = file(shoplistfile, 'rb')</span>
storedlist = p.load(f)
print storedlist</span>
也就是说在dump和load的时候要以二进制的形式读写。

我目前遇到的一些比较重要的问题也就是以上几点了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: