及时当勉励
分类:
2010-06-25 01:26:51
感谢的投递
为
非程序员准备的简洁Python语言教材,欢迎提问。
Python 的中文意思是巨蟒,大蟒蛇。
计算机语言编程的主要内容就这些:数字,文字,循环,公式,变量
幸亏有下面讲到的公式,所以很多较复杂的问题已经有了解决方法,我们只是重 复的套用别人的解决公式就可以了,不用拆得太细。
Python 语言最大的优势,就是这个语言中包含了大量解决常见问题的公式,你想干的事,基本上都有人帮你干了,你只是需要把他们组织,捆绑起来就可以了。比如下载文 件的公式,分析网页内容的公式,压缩文件的公式,处理电子邮件的公式等等。
在 计算机里,公式的术语叫“函数”或者“方法”。我们定义一个函数,就是定义一 条公式,用的时候,拿来参数a,b什么 的,套一下公式就行了。
为了程序的结构清晰,我们往往会 定义很多函数。把复杂的问题分成很多小问题,每个小问题放到一个函数 里,然后在解决复杂问题的函数里,使用这些小问题函数解决大问题。更重要的是我们可以大量的使用别人写好的函数来解决自己的问题。
函 数的作用是让程序结构清晰,而且可以在不同的地方重复套用。
换成术语,我们有:
数字 (number) | => | 数字 |
字符串 (string) | => | 文字 |
循环 (loop) | => | 循环 |
函数/方法 (function/method) | => | 公式 |
变量 (variable) | => | 变量 |
到这里,基本上编程就没什么可学得了。剩下的就是掌握各种编程语言特定的函数和循环的书写格式,再掌握了别人已 经写好的函数的用法,组合起来就得了。
最 基本的python程序:
print ("世界,你好!")存 到文件 hello.py 里,然后命令行下输入 python hello.py 就可以看到结果了。
这里就用到了 函数和字符串,在屏幕上输出一行:世界,你好!
Python 里函数的用法是:函数名(参数1, 参数2)
这 里 print 是函数;在屏幕上打印内容,"世界,你好!"是参数。
学会怎么用函数了,再学会定义函数的格式,就差不多了。
def a_b_pingfang(a, b):我 们定义一个(a+b)2的函数,def 是英语 define 的缩写,意思是定义函数,定义公式。
第 1 行就是说我们要定义一个函数名叫 a_b_pingfang 的函数,用它的时候,需要两个参 数a 和 b。尾巴上有个冒号,冒号的意思是说:“下面的一段就是公式定义了,要注意了”。
计算机编程里,* 代表乘法,/代表除法,** 代表乘方, b**2 就是 b 的二次方。
注 意: Python 是用 缩进空格 来表示段落的,冒号(:)来表示段落开始。
第 2 行先缩进4个空格,说明下面缩进4格的,都是同一段落。用来具体计算上面的定义的公式的。把 a2+2*a*b+b2 的计算结果,放到c里。
c 类似于a,b,都是表示一个变量,它可以用来存放数字,文字,甚至函数。这里它存放的是用a,b计算后得到的 结果。因为不是在函数名里,所以术语叫做“变量”,在函数名里,就叫参数了。
“变量”就是用一个单词来代表一个可以变化的量的。单词里可 以有字母,数字和下加线(_),数字不能打头。
第 3 行,把存在c里的结果,传回给函数的使用者。
return 命令的意思,就是立即结束函数的执行,把return后面的值传给调用者,可以传回多个值。
现在可以使用这个公式了,我们叫调 用函数 :
ping2 = a_b_pingfang(2, 3)ping2 里存放了 a_b_pingfang(2, 3)得到的结果,也就是上面 return c 这句,把 c 的内容,传给了外面的ping2。
把结果打印出来:
print(ping2)全 部程序是:
def a_b_pingfang(a, b):存 到 test2.py ,跑 python test2.py 就可以看到输出 25。
当 然还有循环,怎么让程序重复的做事?我们有 while(当...), for(对于...) 命令来进行循环控制。
a = 0这 个循环说,当 a < 100 的时候,把 a 增加 1,然后重复。当 a 等于100了,就结束了。
我们有 <, >, ==, <=, >=, != 来判断大于,小于,等于,小于等于,大于等于,不等于。
还有 and, or, not 来进行逻辑运算,所谓逻辑运算,就是测试已有判断之间的关系的:
a == 1 and b != 2 来测试这两个判断是否同时成立。 a == 1 or b != 2 来测试这两个判断里是否有至少一个成立。 not a == 1 来测试这个判断是否是错的。错的就是对的,对的就是错的,颠倒黑白。
我们还有 break(中断) 来打断循环,和 continue(继续) 来立刻回到循环开始,也可以用 if(是否) 命令来进行判断:
a = 0这 里 True 表示总是正确,相对的是 False 表示错误。这一段是说一直执行,因为 while 总是正确。下面在 if 处判断a是否大于等于100,如果是,那么执行 if 下的段落,这里我们打断了循环。
for 循环是利用下面介绍的的列表数据结构对列表进行循环。
下 面具体到python特殊的规定,它有几个特殊的存储数据的格式。
列 表:把很多变量存进一个列表里,叫列的意思,就因为他像列车一样,一节一 节车厢,每厢放一个变量。格式为 b, c, 1, 3, 5, '葡萄', '葡萄皮儿',可以看到,方括号里,可以放具体的数字,文字,也可以放变量,用逗号分隔。
这些内容是在固定位置上,可以通过他们的位置, 来提取:
alist = [1, 3, 5, '很傻', '葡萄', '葡萄皮儿', a, var1]在 python里,数数是从0开始数的,开始是0,然后是1,2,3,4,5,所以上面的列表 alist的第一个内容,可以用alist[0]来 提取,第二个用alist[2]来提取。
print (alist[4]) # 打印 '葡萄'
这里,我们可以介绍用 for 循环来访问这个列表里的所有内容:
for me in alist:上 面这一段,打印所有alist里的内容。
这个循环是,对于列表 alist ,从 0 开始,访问它的每一个位置,把这个位置上的值, 放到me里,然后针对不同的me值,重复执行下面段落的内容。
in 表示me在alist里,也可以用来判断: if "葡萄" in alist:
print "葡萄在alist里!"
这 个列表的内容是可以改变的,我们可以把第4个位置设为"很天真":
alist[3] = alist[3] + ' 很天真'元 组:元组就是列表,但是他的内容是不能改变的。 他的内容只能一开始就设定。但是,元组和列表之间是可以用函数互相转变的,转成列表就可以改变内容,转回元组就不能改了。
元组是用圆括号 来表示,所以叫元组嘛。
atuple = (2, 3, "老子")在 python 里,字符串也是一种特殊的元组,也就是内容不可变的字符列表。
txt = 'abcdefg'字 典:字典就像一般的字典,一个字,一个解释,再一个字,再一个解释。用大 括号表示:
adict = {1: "我是解释",前 面的字叫钥匙(key)或者索引,后面的解释,叫"值"。索引不能重复,必须是唯一的。
我们可以看到,前面的字,和后面的解释可以是数 字,文字,还可以是函数或者元组。但是前面的字,不能是列表,因为列表内容是可变的,可变的东西都不能做索引。
我们用索引来提取值,而不 是用位置:
adict[1] # "我是解释"Python 里包涵了很多别人写好的函数、方法让我们直接利用。譬如写网络程序的函数,数 学计算的函数,分析电邮文件的函数,加密的函数。
这些函 数 分门别类的放到叫“模块”的东西里。一个模块里,包括很多功能相类的函数。而具体实现上,一个模块,就是一个python的程序文件。
如 果模块还还需要细分更多层,那么每层就是一个文件目录。里面有很多做为模块的python文件。
要使用模块,我们用“进口”这个命令: import
import time这 里,我们先进口 time 模块,然后使用 time 模块里的函数 clock() ,得到当前时间,打印出来。
用个句点表示模块 time里的clock函数: 模块名.函数名
在 python 里,我们会用到很多别人写的模块,能自己少写点儿源码,尽量少写,懒不是?
其 实编程来说,类并不是必须的,但是因为很多python提供的模块,里面 的函数都是包在类里面的,所以我们需要介绍一下类。
面向对象编 程,是现在比较流行的编程模式,是个人都得用“面像对象”的思路来编程。基 本上就是把同类的函数,打包放到一个叫“类”的东西里。
这个 “类”一般上是以具体的东西为模子,譬如物种:人类,猫类;物品:家俱类,电 器类。他里面打包的函数,基本上是针对这个类进行操作的,譬如人说话,人吃饭,猫逮耗子,家居磨损。
使用类的时候,我们先具体化他,把类 变成个体。人类变成某人,猫类变成某猫,家俱变 成某家俱语法上比较怪,只好变成一件家俱。这个具体化的类,就是所谓的“对象(object) ”。然后我们就可以使用这个具体人,猫,家居的函数,针对具体的人,物进行操作了。
class RenLei:在 类的定义里,每一个函数,他的第一个参数,都是规定死的,必须是self。self代表这个对象自己。这个对像本身的变量,函数,都是通过这个自己来存取 的。
你可以管他叫wo3, you, me,用什么名字随便,但是第一位置的,就是代表对象自己。 def __init__(wo3, mingzi):
wo3.mingzi = mingzi 也 可以。
在调用类里的函数时,不用提供 self 这个参数,程序自动加入 self。我们只要提供其他参数即可。
__init__() 这个函数是特殊函数,他代表建立函数的时候,需要的使用的参数。通过类建立函数的时候,程序会自动调用 __init__()函数。
# 建立对象,提供的函数对应__init__() 函数,self 参数程序自动提供,不用我们提供。Python 里的字符串,列表,元组,字典,都是面对对象的类,所以他们本身带有很多函数可以对自己进行操作,譬如:
a = "握手 不一定 就是 友谊".split()split 是字符串的函数,他可以把字符串在给定位置分段,当我们不给他参数的时候,会在所有空白位置分割,然后返回一个列表,里面是被割裂的字符串。
结 果,a 的内容是 ["握手", "不一定", "就是", "友谊"],这是一个有4个元素的列表。
对于字符串,列 表,字典之类的操作,请熟读说明手册他们的说明,python编程,主要就靠字符串,列表和字典了。
写 一个 Python 程序,我们一般步骤是:
Python 运行,是从文件的上面往下走的,看到命令执行命令,一直到最后一行。当我们定义函数和类的时候,他们只是定义,而没有执行,所以Python 看到他们,先存起来,直到看到定义外的具体命令,才真正的执行。如果这个命令调用上面的函数,那么就把存起来的函数执行一下。
Python 里注释符号是"#"。就是说,在 # 符号后的那一行文字,都当做解释,不做为程序的命令。
print ("打酱油!") # print ("关我屁事")只 打印出 “打酱油”,剩下的,因为是在 # 后面,所以程序把他们当做注释语言自动忽略了。
完整例子: 把一个两列的文件input.txt,分割成两个文件col1.txt, col2.txt,一个文件一列。 input.txt 内容:
a1 啊阿程 序内容:
def split_file(filename): # 把文件分成两列main
() # 唯一的函数外命令,程序开始执行,调用上面的 main() 函数数。这 里,输入的文件名是写死的 input.txt ,我们可以使用模块 optparse 来通过命令行读取用户提供的文件,会更灵活些。
更 多的功能,函数,请参考python的和手册。
先熟悉:
熟悉这些,基本上编程没问题了。
是一本经典的参考书,虽然没有涵盖所有python模块的内容,但是对初学者基本够用。而且它 是一个自由文件,说俗了就是合法免费的,又有中文翻译版,难得。
也可以参考 这个中文说明。
如果需要网络编程,还要熟悉网络相关的模块。如果想 要图形界面,建议使用pygtk或者pyqt图形界面函数库,这时候,也需要熟悉面对对象编程的概念。
对于英文不好的人,建议买一本有,作为参考书,在编程的时候,边编边翻书。
Python 的中文意思是巨蟒,大蟒蛇。但是这个语言的具体出处是一个叫Monty Python的英 国电视剧。
查看: