argparse

读完Python官方教程modules一章之后,我以为我可以开始写script了。然而我不知道怎么给script传参数。同事写的例子里面,是拿了一个config module把参数从另一个文件里读出来。可是我想何必呢,处理命令行参数的技能总是要的,我很惊讶基本教程里没有。搜索了一下才知道,argparse是后来进入canon的module。

argparse的官方教程的时候我很糊涂。介绍了positional argment之后介绍了optional argument,然后就没了。难道positional argument对应的不是named argument吗?我搜了一会儿才发现,官方虽然把optional argument都当作named argument来操作,甚至可以加一个required=true的限制,但是在打印帮助的时候required=true的参数还是打印在了optional argument里

我们到底有没有理解错Python设计者的原意啊。。。(大概不是为在命令行调用设计的,我经验太少不知道script语言除了命令行调用还可以怎么用。Python号称可以和别的程序语言结合用很灵活的。

随想

今天终于有点空继续写powershell工具。最初接触powershell的时候,我以为就是Windows模仿Unix的一个东西。实际上powershell里目前感受到最大的不同是数据类型比较规范,shell里面变量都可以是字符串,因此比较低层。powershell比较高层一些,也意味着要多理解一些它的内部逻辑才行。

下午花了不少时间把上次写到一半的东西拾起来。上次终于写出了正则表达式表示的分隔符。因为分隔符有可能用到在数据里,所以我希望能有个escape character。在股沟里键入”powershell regular expression”,不能给我官方手册。这也是MSDN讨厌的地方。(实际上,我应该用PS自己的help,不过还不会用。)千转百回终于找到了上次参考的文档,赶紧存下来。看了这个文档,终于重新弄明白了自己上次写的代码。发现了一个漏洞——补上。漏洞本身的逻辑也很简单。但是容易漏掉。所以这些都不靠聪明,而是靠强迫症。

实际上,数据用到分隔符的可能性是非常非常小的。不过我还是纵容了一下自己的强迫症。

学一个新的东西真是不容易。我一直觉得,只要给我官方文档,和一个可以尝试的环境,那么什么都能学会。MSDN是我见过的最难懂的官方文档了。

写代码的能力,除了一般的计算机sense,其它的我觉得有这么几点:

1)要会尝试、很快地尝试。尝试是迭代知识的必要手段。特别是对我这样的强迫症,如果不尝试,我总是要怀疑之前的想法中有没有靠不住的地方。要很快地尝试,这样思路就不会打断

2)要善于meta化,来理解程序语言的设计思想,或者来理解机器的执行。

1)和2)要很快地交替,meta化了之后,往往会萌生新的问题、怀疑、理论,这就要继续尝试、根据尝试结果来修正或者reinforce理解。

另外,必不可缺的是股沟。有股沟、维基,有官方文档、可以尝试的环境。好了,我可以撬动地球。

当然,我一直觉得我很不够聪明的。前一阵读到网上关注的一个人的说法

好像发现一个通用的评估标准:事情复杂到什么程度你开始自我欺骗,就决定了你是什么层次的人。心理比智商还重要。有人知道我在说什么鬼话吗?

这个人有歧视女性的倾向(但人是开明的,我相信如果他遇到真正智慧的女人他会识别的),然而除此之外他的很多观点我很同意,也很独到。

强迫症永远不允许我自我欺骗。但是有时候我有逃避困难的倾向。

用新学的语言写小程序,一开始总觉得困难重重。跟着一个好的tutorial来学是客服最初困难的好方法。但是学一点点就要自己尝试。即使试会了教程里面的例子,实际要用的时候,还是有很多困难:设计的时候:这几个并到一个function里可以吗?用的时候会不会有问题?实施的时候又要被各种实际抛错影响。好在到达一定程度之后,一切会变得简单、效率百倍。以至于舍不得停下来。今天太晚了就回家了,但是到家后我还在写日记想这些。。。