C程序员一周入门python(一)

来源:互联网 发布:淘宝模特基本动作 编辑:程序博客网 时间:2024/05/21 17:11

由于要开发一个爬虫,调查得知用python比较方便,所以学习一下如雷贯耳的Python

参考文献:
《官方文档tutorial.pdf python3.5.4》
《Web Scraping with Python,Ryan Mitchell》

背景:
有较好Linux C基础

前三天阅读tutorial,并记录以下要点。

Python相对C语言有以下特点:
- 1、 提供了高效的上层数据结构应对复杂的世界
Python中一切都是对象
对象分成两类一类是immutable(string/tuple)一类是mutable(list/dictionary/set)
其中string由“”和’’表示,两者基本一样。
其中tuple由()表示
其中list由[]表示,支持嵌套。
其中dictionary由{key:value,…},有些语言也叫关联数组,要求key唯一
其中set由{}表示,可以用来做membership check和消除重复记录
然后,string、tuple和list又派生自sequence可以做indexing和slicing
这些对象还支持类似SQL语句的comprehension操作
- 2、 代码分块方式
Python的代码分块方式是缩进
- 3、 面向对象
面向对象应该是和C语言,语言层面最大的差异。相对C++,python也有很大的自身特点。感觉python就是简单有效的那种。
正如上文提到,python中一切都是对象,python中赋值并不拷贝数据,它们只是将名字和对象联系起来。对象只有一个,但是在多个作用域下,多个名字可以和同一个对象绑定。为了更好的理解OOP还要理解namespace这个概念。一个namespace是名字到对象的映射(目前用dictionary实现),比如built-in名字属于一个namespace;global names属于一个namespace;一个函数中的local name属于一个namespace; 一个对象的属性属于一个namespace。不同namespace下面的name没有任何关系。Namespace在不同时刻创建,有不同的生存期。作用域是和namespace相对应的。参考9.2.1中可以更好的理解。

def scope_test():    def do_local():        spam = "local spam"    def do_nonlocal():        nonlocal spam        spam = "nonlocal spam"    def do_global():        global spam        spam = "global spam"    spam = "test spam"    do_local()    print("After local assignment:", spam)    do_nonlocal()    print("After nonlocal assignment:", spam)    do_global()    print("After global assignment:", spam)scope_test()print("In global scope:", spam)

结果:
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam

另外,值得注意的是,类对象支持两种操作,一种是属性引用,一种是实例化。而实例对象只支持属性引用,包括数据属性和方法属性。这里面要注意区分实例对象和类对象。
- 4、 解释语言
Python是解释语言,不用编译执行,因此可以更快的在命令行模式下验证。
- 5、 变量声明方式
Python的变量声明方式是,不用正式定义,直接使用就隐含定义。因此在不同namespace中切换的时候要用global nonlocal等关键词重新声明。
- 6、 各种库
Python提供各种开源库,功能强大。
- 7、 异常处理
这是Python相对C的另一大特性,在语言层面本身提供关于异常处理的关键字,这给程序的调试提供了很大的方便,不用像C一样繁琐的写异常处理。样例如下:

def divide(x, y):    try:        result = x / y        except ZeroDivisionError:            print("division by zero!")        else:            print("result is", result)        finally:            print("executing finally clause")