教程

1、python大小写敏感
如果字符串里面有很多字符都需要转义,就需要加很多\\,为了简化,Python还允许用r\’\’表示\’\’内部的字符串默认不转义

>>> print \'\\\\\\t\\\\\'
\\       \\
>>> print r\'\\\\\\t\\\\\'
\\\\\\t\\\\

如果字符串内部有很多换行,用\\n写在一行里不好阅读,为了简化,Python允许用\’\’\’…\’\’\’的格式表示多行内容

>>> print \'\'\'line1
... line2
... line3\'\'\'
line1
line2
line3

注意:.py文件里输入中文,然后在解析器执行文件,发现报错。

解决办法:在文件头部加上#coding:utf-8

如果设置为gbk则不行,原因很简单,我用的编辑器的编码为utf-8,所以我保存的文件自动为utf-8,如果文件的头部设置为gbk编码的话,那么解析器去解析时用gbk解析,所以会报错。

3、python 有序集合(list)

如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素

>>> classmates[-1]
\'Tracy

*另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改

循环是让计算机做重复任务的有效的方法,有些时候,如果代码写得有问题,会让程序陷入“死循环”,也就是永远循环下去。这时可以用Ctrl+C退出程序,或者强制结束Python进程。

4、空函数
如果想定义一个什么事也不做的空函数,可以用pass语句:

def nop():
    pass

空函数可以作为占位符,此时不定义,可以在以后定义。比如我们可以这样使用它:

if a>12:
    pass

5、定义一个函数

import math
def move(x,y,step,radius):
    x1 = x + step * math.cos(radius)
    y1 = y - step * math.sin(radius)
    return x1,y1

print move(2,3,4,20)

总结:定义函数时,需要确定函数名和参数个数;

如果有必要,可以先对参数的数据类型做检查;

函数体内部可以用return随时返回函数结果;

函数执行完毕也没有return语句时,自动return None。

函数可以同时返回多个值,但其实就是一个tuple。

定义默认参数要牢记一点:默认参数必须指向不变对象!

4、尾递归
调用函数本身,但是return的返回值不包含表达式。这么做可以防止递归层数过多,出现堆栈溢出的情况。因为常规递归会逐层添加栈帧,直到最后一个栈帧释放后才开始释放。而尾指针相当于把常规的递归反过来,增加一层递归的同时释放前一个递归指针,所以能够始终保持只有一个栈帧在使用中。

常规递归

def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)

尾递归

def fact(n):
    return fact_iter(1, 1, n)

def fact_iter(product, count, max):
    if count > max:
        return product
    return fact_iter(product * count, count + 1, max)