之前接触过一点python,好久没看了,最近想重新学习一下,同时记录一下自己的学习过程,温故而知新。

初识Python

python是一门解释性编程语言,源文件是以*.py 结尾的文本文件,由Python解释器(interpreter)解释、执行,不需要编译(对用户来说)。

实际上,python解释器在执行脚本前,会先将脚本编译成字节码文件(以*.pyc结尾),然后再执行。

我们也可以通过Python自带的模块库(py_compile),手动实现这个过程,编写脚本如下:

import py_compile
py_compile.compile(r'D:\workspace\test.py')
#文件名前面的r表示:该字符串不进行转义

自己在学习过程中,语法上需要注意的点,大致罗列一下:
(1) 没有嵌套的语句都在第一列。
(2) 在交互模式下,交互解释器会自动打印表达式的结果,但是在 *.py 脚本文件中则必须使用print语句来进行输出。
(3) 在交互提示模式中,用一个空行结束复合语句。通过插入一个空行,来告诉交互式Python,多行语句已经输入完成了。(在 *.py 文件中不需要空行,空行会被忽略)
(4) 在命令行中执行脚本文件时需要使用文件的扩展名(*.py),但是在导入模块时不能使用文件扩展名。
(5) 在linux中,第一行通常是 #!/usr/bin/python,用来指定Python解释器的路径。更好的一种方法是通过 env 程序来搜索PATH环境变量中罗列出的所有目录,第一行写成 #!/usr/bin/env,这样便于移植。
(6) 通过在 *.py 文件的最后添加 input语句,可以使得双击运行该脚本时,出现的命令提示符窗口不会“一闪而过”(程序执行完成后自动退出)。

参考Head First Python第一章的实例,列表和函数的使用

- 列表(list)
列表的用法同C语言中的数组很相似,列表的功能更强大。
列表没有固定的大小和类型的约束,同一个列表可以包含不同类型的数据,可以对列表进行索引、切片、增加元素、删除元素、排序等操作。

列表的定义:

movies = ["The Holy Grail", "The Life of Brain", "The Meaning of Life"]

实例,逐行输出列表中的每项:

movies = ["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91, 
            ["Graham Chapman", ["Michael Palin", "John Cleese",
                    "Terry Gilliam", "Eric Idle", "Terry Jones"]]]

print movies

for each_item in movies:
    if isinstance(each_item, list):
        for each_item_inner in each_item:
            if isinstance(each_item_inner, list):
                for each_item_inner_deeper in each_item_inner:
                    print each_item_inner_deeper
            else:        
                print each_item_inner
    else:
        print each_item

- 函数(function)
函数的定义:

def function_name([arguments]):
    '''optional documentation string'''
    function_suite

由于列表中嵌套有子列表,如果嵌套层数过多,上面的代码结构会变的很复杂和冗余。
我们定义一个函数,将重复的代码用函数替代,并且通过递归调用,解决上面可能出现的嵌套过深的问题。

定义一个函数,递归调用,逐行输出列表中的每一项:

def print_lol(the_list):
    for each_item in the_list:
        if isinstance(each_item, list):
            print_lol(each_item)
        else:
            print each_item

通过调用print_lol()函数就可以实现逐行输出列表内容了。

上面的代码涉及到了以下内容:
- for * in * 迭代,遍历列表的用法(类似于java中的foreach用法);
- isinstance(,)判断某个特定标识符是否包含某个特定类型的数据;
- if else的语法