作者: Jim Wang 公众号: 巴博萨船长

遇见相似的问题,首先要试着问自己要学习编程,如果你没有找到答案,那我这里有个答案,试着告诉自己:我学习编程,因为编程是艺术。 “Programmierung ist Kunst”。

无论当初或者此刻是抱着什么样的初衷和心态。那么在你开始行动的这一刻,你就在接触一个新的世界。编程确实能算是一种艺术,因为它极具创造性。你书写的每一个代码,就是在创造着你自己的世界。因为Create a world out of nothing at all。 编程的实质确实学习一门外语。这是一种和机器也就是PC的一共交互语言。也就是你要通过代码,让计算机处理你让它处理的事情,或者禁止它处理你不希望它处理的事情。

在学校里学习计算机知识,我们会被要求学习和了解计算机的硬件架构(什么冯·诺伊曼结构 什是 哈弗结构),基本属性(比如寻址方式,寄存器组织,指令集什么的),去懂得什么是计算机的硬件。但现代的编程,准确说一些高等的编程语言,与这个些基础知识的关系已经很弱化了。 但是如果你能够掌握这些基础知识,绝对会有益于你在以后学习各种编程知识。

Python 就是上文所说的高等的编程语言。是一种面向对象,直译式的编程语言。Python 的语法明晰简洁。能够快速准确的完成日常的工作任务。Python具有垃圾回收回收机制,也就是你不需要手动去管理内存。也不需要担心内存溢出的问题。

Python通过解释器来解释代码或成为脚本。解释器的代码是由C语言编写完成。并由软件基金会管理和维护。你可以启动Python的终端,一行一行地运行代码,所谓的交互式或者用解释器运行自己的Python模块。也可以通过一些工具讲代码转化为脱离Python解释器,如同EXE的可执行程序。

Python支持各种程序设计策略,经典的函数式编程,比较现代的面对对象程序设计,也支持命令式的程序设计,或者一些不常见的观点导向编程(施乐帕阿尔托研究所开发的AspectJ),和泛型程序设计(在.NET 和Java 会遇到)。后三者我也是只知道名字,因为没有在实际应用中遇到相关的内容。

模块脚本,在日常的交流中常常会用脚本来替代模块,因为Python确实可以粗略弟分类为脚本语言(script language)。 但是事实是,Python又能完成一些大规模的软件开发工作。比较经典和初衷的例如:BitTorrent 和Google 都有使用它。Python 应该被称为 “高级动态编程语言”。对于 “动态” 的理解。文末会做补充说明。

Python 作为编程语言具有很强的“粘”性。 开发者可以通过例如C/C++,或者Cpython来对原有的语言核心进行补充或者扩展。说它具有粘性,是因为解释器可以被集成到各种程序与语言内。可以举出的例子有,比如Google的 Google App Engine (开发与托管网络应用程序平台)。核心代码是C++,然后用Python等语言来调用核心代码的相应模块。你可以理解Google的开发原则是:能用Python就不用C++。我觉的原因就是 “懒”,在性能无太大差别的情况下,谁都想让自己的工作简单化。

学习Python,就要明白Python “优雅”, “明确” 和 “简单” 的设计哲学,和“用一种方法,准确地说用唯一的方法做一件事” 的开发哲学。当在设计过程中遇到多重选择的问题,那就选择一个简单又没有歧义的语法。 Python现在比较流行的是3.0和2.7两个版本,但需要注意的是3.0与2.X并不完全兼容。

Python通常会用在Web开发,例如使用Django作为Web框架来开发自己的网站。或者开发GUI这里会用到wxpython (目前工作的一大部分于此有关)和PyQt。 如果要进行科学计算,Python与Maple 和Matlab相比一点也不逊色。可以通过Numpy, Scipy和Matplotlib(用于画图)。

有人曾经在百度知道里提问:为什么说Python是一门动态语音。我记得我当时的回答是:

能够在运行时修改自身程序结构的语言,就属于动态语言。那怎样才算是“运行时修改自身程序结构”捏?比如下面这几个例子都 算:在运行时给某个类增加成员函数及成员变量;在运行时改变某个类的父类;在运行时创建出某个函数.。

Python是可以实现动态类的创建类(在任意代码位置,符合正确的书写格式),或者给类增加删除属性。因为类也是对象,你可以在运行时动态的创建它们,就像其他任何对象一样。比如,你可以在函数中创建类,使用class关键字即可*。”*

举个例子:

1
2
3
4
5
6
7
8
9
def choose_class(name):
if name == 'foo':
class Foo(object):
pass
return Foo # 返回的是类,不是类的实例
else:
class Bar(object):
pass
return Bar

如果你觉得还不够,, 还不能理解什么是动态,因为你可能会觉得你仍然需要自己在运行前编写整个类的代码。由于类也是对象,所以它们必须是通过什么东西来生成的才对。当你使用class关键字时,Python解释器自动创建这个对象。但就和Python中的大多数事情一样,Python仍然提供给你手动处理的方法。内建函数中有一个名叫type的内建函数,这个内建函数古老但强大的函数, 它能够让你知道一个对象的类型是什么,就像这样:

在举个例子:

1
2
3
4
5
>>> MyShinyClass = type('MyShinyClass', (), {})  # 返回一个类对象
>>> print MyShinyClass<``class` `'__main__.MyShinyClass'
>>>> print MyShinyClass() # 创建一个该类的实例
<``__main__.MyShinyClass` `object at 0x8997cec>另附type使用方法:
#type(类名, 父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值))

今天就先写这些。 如果你有问题或者不同的见解,欢迎在留言。


版权声明:
文章首发于 Jim Wang's blog , 转载文章请务必以超链接形式标明文章出处,作者信息及本版权声明。