记不住……

忘了谁说过记忆力是第一智力,看来私的第一智力还很不够。

豆瓣Python小组上某人说从开始学Python到形成生产力只用了一周时间。虽然私以前没有接触过C血统的语言(甚至可以说没有深入编程)因而也并未奢望能够在一周内形成生产力,但遗忘的程度却很让人有些无法接受……

学的时候由于记不清成堆的标准库用法,只能跳过。打算复习一下之前的文本读取写入和pickle为编写一个程序的菜单做准备,却发现印象已经变得模糊,多次被对语法的思考打算思路;此外,随意练习的时候竟发现自己忘了字典的items方法,于是深切感受到记忆力不足之痛苦……

有道是:

坐对文编[1]几番思

心绪纷乱谁人知

但盼仕佳大神[2]在

过目拾遗不觉失

[1]文编:文本编辑器。据考证作者本人当时使用Vim。

[2]仕嘉大神:私高中时某过目不忘之同学,此后转走,班级遂少巨星一枚。

Python在私PC上之怪现象

最近私在学Python,算是刚刚起步,水平不佳,不好意思写些什么。所以常上CSDN但多半都是潜水,并非犯懒,力不足尔。昨日终于注册了自己的CSDN帐号,可惜那里面“发展方向”里貌似没有单独的Python选项,于是选了个数据库相关。上面的学习笔记怎么办呢?大概可以拿这篇网志凑数。

以上属于胡扯,下面进入正题。Python……按说是跨平台的,用Java的宣传语就是“一次编写,到处运行”(当然原文用的是“编译”,Python有些不同,暂且不提),私也是看到这一点才毅然决定选它的。Unix/Unix-Like是本命平台,自然没问题。但我在Win里却遭遇了点麻烦,到今天简直可以说是抓狂的地步……难道真的也跟Java讽刺者说的似的:“一次编写,到处调试”?

首先是解释运行的问题,这里就有一怪现象(并且不写读取、写入类代码根本看不出来)。如果是双击.py脚本直接运行(这大概是官方想让用户使用的方法),程序就默认在本地编译运行,这也就意味着“当前目录”(即sys.argv的第一个目录)就是脚本所在的目录,此时如果执行没有指定目录的写入或读取命令就会在当前目录写入或从当前目录读取,这是没有问题的。可是如果在终端里键入脚本所在的位置来运行,它的默认目录就会莫名其妙地变为C:user(用户名)。于是乎问题来了,私在第一次运行的时候发现整个程序一点毛病没有,但就是找不到文件跑哪去了。后来在win下搜索才总算把它找到。(说来也怪,我在Win7下往C盘里拷个东西它都提示要我提升权限,在python下竟然神不知鬼不觉直接写进去了,说不定这是个漏洞)

路径不统一。有两个解决方案:

其一是手动指定一个特定路径,私认为此是下下策。首先,除了当前目录以外在任何目录创建文件都是一种不太绿色的行为(所以小朋友们记住,绿坝最不绿色)。其次,虽然Python有一个内建的mkdir函数,可是它只能创建“指定的那个”目录,换句话说如果那个目录的根目录不存在就直接报错。所以如果想创建一个藏匿比较深的目录的话就得逐层检验,存在的跳过,不存在的创建。怎么检验呢?私想到的办法是把每级目录写进一个list里,再写个循环逐个调用这list每个元素。不是不行,但是是个很让人痛苦的活。

方法二是以后干脆就直接运行,不再用终端。可是要是直接运行的话一旦代码执行完毕窗口就自动关闭,所以很多程序运行起来就会看到一个终端一闪而过消失无踪,再运行又一闪而过,再运行……所以私现在甭管啥程序都在最后来一行input()把它卡住好能看到屏幕的显示……

在IDLE(Python的默认IDE)里运行可以解决这两个问题,不过又引入一个更令人无语的悲剧——今天用的时候发现Shell根本打不开,每次按F5执行都程序无响应,只能强制关闭,修复重装都不管事,现在问题依然存在……

今天打开了久违的教材,学用pickle函数。写出来之后挺高兴地运行,结果提示“’module’没有’dump’这个属性”(原话是英文,记不住了)。嗯,没关系,第一次写难免出错,于是检查一遍,似乎没问题。再查一遍,还是没问题。私有点怀疑是更新版本之后函数变了,于是上官网查documentation(相当晦涩的文档),发现用法完全相同。最后一怒之下把教材里的例子直接复制进去,结果PC不依不饶还是这句,私就彻底愤怒了,看到这行字的一瞬间就把鼠标当惊堂木狂拍……

由于PC通常是不会出错的,于是休息过后私打算新建个文件重写一遍,结果居然解释通过。找不到病根,私就又把教材的实例复制进去,又通过了……此时私彻底无奈。

推荐两个Python指导资料吧……

其实私一直很想推荐了,不过出于种种原因一直也没说。今天说一下吧……

这两个都是关于Python语言的教材(或者叫指导?),得先介绍一下Python。

Python是一种简单易用的解释型高级语言(也可以被粗略地分类为“脚本语言”)。所谓解释型,简单说就是无需事先生成二进制码,而是在运行时由其他语言“解释”成二进制码,再交由计算机执行。不同的平台上解释器可能不同,但是程序的源代码是相同的,因此只要带好源代码就可以在装有Python解释器的任何一个平台(包括Windows、Unix、类Unix以及很多私从未听过的平台)上面运行,同时由于解释器帮您承担了硬件调配工作,您可以专注于程序本身而不是如何管理内存等等操作。当然坏处也是显而易见的:执行效率肯定不如能精确控制内存和核心的C血统语言。

Python3.x发布之后由于有许多关键性的修正,不再与之前的版本兼容。所以目前2.x、3.x都有人使用,并且相对来说2.x可能用的人更多。不过如果您是新手,建议还是学习3.x,从此之后可以和编码的困扰永别了,对私这样的懒人真是一大福音。

说了这么久,终于到正题了……

首先是《非程序员 Python 编程概念》(对应python3.x)。地址在这里:

http://code.google.com/p/hashao/wiki/ChinesePythonTutor

这是迄今为止私见过的最简洁最好玩的Python教程。文风幽默、比喻精当、内容扼要。内容非常短,私以为快的话大概几十分钟就可以看完,但却介绍了Python大部分功能的基本用法(当然各种内置函数(Function)和方法(Method)是不可能在这么短的文章中解释清楚的),非常适合从未接触Python语言的人来一个概览。

比如里面有一段话:

“在Python里,次序是从0开始数的,开始是0,然后是1,2,3,4,5,所以上面的列表 alist的第一个内容,可以用alist[0]来提取,第二个用alist[1]来提取。就像年龄一样,一生下来是零岁,一年以后才是一岁,不是中国传统那样,生下来就一岁,那是虚岁。蟒蛇语言他只认准确的东西,不玩儿虚的。”

是不是很好玩?

当然,既然叫做“非程序员编程概念”,就是说只能让您理解主要概念,因而即使您看完了全文还并不能真正很好地编程(当然如果您就写个等差数列求和那是绰绰有余了),所以在文章的末尾,作者还推荐了一些教材,都是好书(并且好多都是中文版),深入学习很有好处。

不过私个人还是要推荐下一本书……

下一本,是Python界大名鼎鼎的《A Byte of Python》,官方网站在这里:

http://www.swaroopch.com/notes/Python

写这本书的是个印度人,叫Swaroop,那个SwaroopCH是他的官方网站,他还有一本书叫做《A byte of Vim》,是教Vim编辑器的。

《A Byte of Python》中文名为《简明Python教程》,有对应python2.x和3.x的版本(均可在官网找到),不过for 3.x的是没有中文版的(至少私没有找到)。其实中文版必要性并不太大,因为这本书的语言非常简洁(虽然一点也不幽默),用的语法也很简单,最多就是几个单词(术语)不容易认,稍微查查字典就可以了(而且您英文不认识的话翻译成中文还真未必明白,因为很多是术语)。大概看官们有知道私E文水平的,私这家底都能看,您还担心什么呢?

这本书同样是指导性质的书(而非参考性质,这点很重要),不过里面讲的可就系统多了,私以为完全可以作教材使用(相比之下Python的官方Tutorial倒是晦涩不少)。当您阅读完全书之后,最后一个任务是编写一个文本地址簿程序,如果您很快想到用什么方法并且最终实现的话,基本可以说您就掌握了Python的基础技巧。不过正如文中所说,这是“起步阶段的结束”,未来的路还很长,活到老学到老,大概……

嗯,先写这么多吧。有意者无聊者都可以去看看,两本书(和里面提及的参考资料)都是不错的。

信手闲话:Python的函数/kubuntu10.10和KDE4.5/文本编辑器

信手闲话:Python的函数/kubuntu10.10和KDE4.5/文本编辑器

函数……果然是高级的玩意。高中时候就不太玩得好抽象函数的变换,没想到这一悲剧竟然延续到了编程上面(请忽略私的偷换概念)。

比如私搞不懂为什么python的函数不允许给第一个变量赋默认值,搞不懂keyword-only parameter的作用,搞不懂parameter和arguement的区别,等等……

于是乎……果然还是有不少要学的东西。

/

在虚拟机里装了kubuntu10.10 alpha2,默认环境KDE4.5。很多很好的改变,比如托盘展开被Windows带坏了,比如多了个Webkit浏览器(虽然兼容性远不如Google Chrome),再比如多了个默认输入法配置程序(虽然是个GTK程序),都让kubuntu用起来轻松多了。

/

私在用Vim写这个。不过其实真正用来写网志的编辑器是Emacs。Emacs几乎能称得上是一个小型操作系统,功能真的很多,并且居然支持“超文本咖啡壶控制协议”(顺带一提,这是个IETF的恶作剧,另外其中定义的一个错误叫做“我是茶壶”,参见这里)。只可惜弄来弄去都学不会那里面的一些热键,最后还是只能暂时用着Vim,有时间私会再去学的。

KDE下有个文本编辑器叫做kate,也是很不错的,至少它的图形界面(菜单和图形化的设置界面)是做得最到位的。真希望kate能和Vim的特性合起来。 #这里私补充一下,新版本(KDE4.2以后)的kate有一个Vi input mode,可以用Vi(Vim)的方式进行编写。可惜的是kate没有windows版,所以目前似乎只能Vim一条路走到黑了。

/

后记:貌似这几天都是每日一志的样子呢。记得“编程随想”大神最初创立网志原因之一就是为了逼自己写点东西,私的现状和他颇为相似。不过不知私会不会和他一样最终让自己写东西变得容易些……

如果Vim用IKJL或者WSAD控制上下左右……

……是不是就舒爽很多呢?

最近学Vim,老是分不清J和K哪个是上哪个是下。如果能把HJKL四个键用好的确能够提高效率,不过现在我选上选下的时候都需要考虑一下,有时还经常按错,让人有些无奈。

个人认为其实设计上把“H”键作为“左”并不是一个特别好的设计。键盘的常规指法是双手食指分别对着F和J键,如果要按H键,右手食指需要向左跨过一个键。大家可能也有体会,手指的前后运动要比左右运动容易很多,况且中指很长,向上按到I键非常容易;更重要的是I和J一个在上一个在下,不必费神去记住哪个是上哪个是下——当然Vim的前身Vi释出之时键盘上还没有方向键,不过方向对应的话或许更容易记住。

当然I键在Vim中默认已经被占用了(转换为插入模式),但该热键还有替代热键A和S(也许还有别的,但我还没发现),这两个键使用也相当方便,所以应该还是可行的。

关于WSAD……玩游戏的人肯定会乐意使用这个,不过大概最初的开发者是左手系的(和我一样,我很激动),所以四个键都被占了,而且d键作用很大也很明晰,不宜变动,所以……这纯粹是个想法而已。

最后……Vim有没有内嵌终端啊?找了好久都没找到……

Vim小巧强大,Python简洁明晰,应该是一对好搭档,而且又都博大精深。确实应该好好研究一下……