本文约定
字符串举例xxx,变量举例VariableName。
保存与运行
在保留xxx.py窗口情况下,点击“运行->运行模块“,可以打开PythonShell并且运行程序;若点击”运行->PythonShell程序“,可以打开PythonShell程序但不自动运行代码。
运算符
逻辑运算符
加 | + | 除 | / |
减 | - | 求余 | % |
乘 | * | 赋值(加标签) | = |
注意除/与分数相似,而靠左的\是反斜杠。x%2的结果即为用x除以2所得到的余数。
赋值
每个变量在使用前都必须赋值,变量赋值后该变量才会被创建。一次新的赋值将创建一个新的变量,即使变量的名称相同,但变量的标识不同。
x=1
print id(x) #id(...)是id函数,用来输出变量的标识,结果如11229424,为美不标识,便于变量的维护和管理
x=2
print id(x) #结果如11229412,和上面的不同,不是同一个变量
pirint y #报错,因为y没有赋值,Python将认为该变量不存在,所以报错
变量同时赋值,可以如此给多个变量赋值
a=(1,2,3)
(x,y,z)=a
print "x=",x #得到:x=1
print "y=",y #得到:y=2
print "z=",z #得到:z=3
运算顺序
括号最优,其次乘除再加减,同级从左到右。
条件运算符
等于 | == | 不等于 | != |
大于 | > | 大于等于 | >= |
小于 | < | 小于等于 | <= |
变量
命名
可用字母、数字或下划线_,开头不能是数字。
全局变量
通常命名的时候在变量名前加下划线“_”以区分,如“_a”。在使用的时候,在其前加global保留字,如“global _a”。
变量类型
复数类型用j,如“c=7+8j”。
字符串
表示
用来显示消息的文字,可含字、数字和符号,用”xxx”双引号创建或’xxx’单引号创建,开始第一个为单引号则不管中间是否有双引号也是找单引号结尾,双引号也如此。多行字符串用一对三个单引号且中间用回车分隔来表示。若内含单双引号,则可以使用三个单引号总引用,里面照写单双引号,或者使用反斜杠\,在里面要使用单引号和双引号的地方,在其前加\,如\’表示单引号和\”表示双引号。
‘’’xxx
xxxxxxxx’’’
中间嵌入值
用%s占位符表示要嵌入的值的位置。
myscore=1000
message=’I scored %s points’
print(message % myscore)
或者print(message % 1000)
嵌入多个值
替换的值用括号括起,值的排放顺序等于字符串中被引用的顺序。
nums=’What did the number %s say to the number %s?’
print(nums % (0,8))
乘法
打印空格。
spaces=’ ‘*25 #25个空格
print(‘%s 12 Butts’ % spaces)
或者print(1000 * ‘snift’)
得到连续的1000个sniftsniftsnift…语句分隔
Python不需要使用分号做语句结尾,但是使用了也不会有错。在Python中可使用分号作为同一行语句分隔,如
x=1;y=1;z=1
Python同样支持多行写一条语句,使用'\'作为换行符。如
sql="select id,name \
from dept \
where name='A'"
print aql
或者
sql="selece id,name * "\
"from dept * "\
"where name = 'A'"
print sql
所得到的结果都为
select id,name from dept where name='A'
列表
方括号[]中输入列表中的位置,即索引位置。
wizard_list=[‘xxx’,’xxx’,’xxx’]
# [0] [1] [2]
print(wizard_list)
得到和上面的定义完全一样,机油中括号、单引号和逗号。print(wizark_list[2])
得到对应[2]位置的’xxx’,注意索引从0开始。print(wizark_list[2:5])
得到索引为2、3、4对应的,注意不包含索引为5的。混放
numbers_and_strings=[‘Why’,’was’,6,’afriard of ’,7,’because’,7,8,9]
print(numbers_and_strings)
得到和定义的一样。进一步:numbers=[1,2,3,4]
strings=[‘I’,’xxx’]
mylist=[nubers,strings]
print(mylist)
得到:[[1,2,3,4],[‘I’,’xxx’]]添加
添加一个元素到列表最后。
wizard_list.append(‘xxx’)
删除
del wizard_list[5]
得到删除wizard_list中索引为5的,后面的补上。注意连续删除时需要先删除后面的再删除前面的:del xx[8]
del xx[7]
del xx[6]
算术
只有加法+和乘法*。
加法
list1=[1,2,3,4]
list2=[‘I’,’xxx’]
print(list1+list2)
或者
list3=[list1,list2]
print(list3)
乘法
print(list1*3)
得到:[1,2,3,4,1,2,3,4,1,2,3,4]。注意,直接加元素是错的,如list1+50是错的。
元组
一个使用括号的列表,元组一旦创建就不能再改动,如替换某索引元素。
fibs=(0,1,1,2,3)
字典
dict,映射map。字典中的每个元素都有一个键key和对应的值value组成,像数据库一样,例如人为键,他们所喜爱的运动为值。定义的时候冒号把每个键和值分开,每个键和值都分别用单引号括起来,两键间逗号相隔,注意字典中所有元素都用大括号{}括起来,这样就可以得到映射表。
favorite_sports={‘Ralph Williams’:’Football’,
‘Michael Tippett’:’Basketball’,
‘Edward Elgar’:’Baseball’}
print(favorite_sports[‘Rebecca Clarke’])
删除
以键为引。
del favour_sports[‘Ethel Snyth’]
替换
以键为引。favourite_sports[‘Ralxxx’]=’Ice Hockey’
运算
无加+等运算。
语法
if-elif-else
if作为关键字,后跟一个条件和一个冒号,冒号后代码行必须放到一个语句块中,代码块中每一行前都有四个空格(其他会报错,使用空格输入,不用Tab键),要确保对于同一个代码块中每行都用同样的数量空格缩进。若新起的一行并用了比前一行多的空格,则开始了一个新的代码块,这代码块是前一个代码块的一部分。
line of code |
|
|
block1 |
line of code |
|
|
|
line of code |
|
|
|
line of code |
|
block2 |
|
line of code |
|
||
line of code |
block3 |
||
line of code |
|||
line of code |
|||
line of code |
|
||
line of code |
|
||
line of code |
|
|
|
line of code |
|
|
|
line of code |
block4 |
|
|
line of code |
|
||
line of code |
|
|
|
line of code |
|
|
|
line of code |
block5 |
|
|
line of code |
|
if age==12;
print(“xxx”)
elif age==10 or age==11:
print(“xxx”)
elif age>=13 and age<=100
print(“xxx”)
else:
print(“xxx”)
n 空None不等于0,是空值是空状态。用户输入的是以字符串的形式存储,不是数字,如10,可以进行字符数字转换int(xx)注意xx必须是一个整数,否则会报错,如果有小数可以用float(xxx),转换成字符用str(xxx)。myval=None
for循环
可以直接对列表作用。wizard_list=[‘spider legs’,’xxx’]
for I in wizard_list:
print(i)
得到spider legs
xxx
while循环
可创建“半永久”循环。while True:
lots of code here
if some_value==True:
break
注释
中文注释
如果需要在代码中使用中文注释,必须在Python文件的最前面加上如下代码注释进行说明
# -* - coding:UTF -8 -* -
跨平台注释
如果需要使Python程序运行在windows以外的平台,需要在Python文件的最前面加上如下注释说明
#! /usr/bin/python
类和对象
class
创建最大一类。
class Things:
pass
对于要创建的一类,只看其父类。子类继承父类则可用父类函数。
class Inanimate(Things):
def this_is_a_class_function():
print(‘xxx’)
def this_is_a_class_function_too(self)
self.父类函数()
somethings=Inanimate()
something.this_is_a_class_function()
初始化对象
__init__()左右各两条连续无间隔下划线。class Giraffes:
def __init__(self.spots):
self.giraffe_spots=spots #参数spots设置给self参数的一个叫giraffe_spots的对象变量(也是它的属性)
ozwarld=Giraffes(100)
print(ozwarld.giraffes_spots)
得到:100。init函数也需要吧self当第一参数。self是用来从类中的一个函数调用类中(还有父类中)的另一个函数。错误
l Syntax语法;escaping转义,如反斜杠\;property属性;object对象;instance实例。
l EOL:end-of-line行结尾,碰到行结尾但没找到结束字符串的引号。
l 一年365天52周。
l ValueError:所用的值不恰当。
函数
由名字、参数和函数体组成。
def testfunc(fname,lname):
print(‘hello %s’ % (fname,lname))
testfunc(‘mary’,’smith’)
startswith()
举例:跳过以b开头的元素。my_items=[‘apple’,’aardvark’,’banana’,’badger’,’clementine’]
for item in my_items:
if item.startswith(‘b’):
continue
print(item)
得到apple
aardvark
clementine
print()
打印
字符串
print(“xxx”)
变量
print(VariableName)
打印一空行
print()
range()
创建一个数字列表,范围从起始数字开始到结束数字之前,但实际上没有创建,只是返回一个“迭代器”。print(list(range(10,20)))
得到:[10,11,12,…,19]。或者for x in range(0,5):
print(‘hello %s’ % x)
缺省步长为1,含步长表示range(开始,结束(不含自身),步长)。abs()
取绝对值。bool()
布尔类型,只有一个参数,返回该参数的真假。
数值
0返回假False,其他为真True。
字符串
除没有值的字符串None空字符串返回False以外,其他为True。
列表、元组和字典
除空的[]以外返回False,其他返回True。
举例:判断一个值是否被设置。
year=input(‘xxx’)
if not bool(year.rstrip()) #输入值为空时执行PS:rstrip把字符串结尾空格和回车键删除
print(‘xxx’)
dir()
可用于任何东西,如字符串、数字、函数、模块、对象、类。dir([‘a’,’short’,’list’])
或者dir(1)
若加字符串变量dir(popcorn)则得到字符串str类做提供的函数。然后help(popcorn.upper)查看对应的描述。upper(…)
s.upper->str
其中省略号…意味着upper是str类内的函数并且无参数,而->意味着返回一个字符串str。eval()
估值,把用户的输入转换成Python表达式,返回一个值。exel()
比eval复杂可执行多语句,甚至是小程序。len()
字符串返回字符串实际可读字符个数,含空格。
列表或元组
返回其中元素的个数。
字典
返回元素个数,元素以键计算。
举例:在循环中的利用
fruit=[‘apple’,’banana’]
length=len(fruit)
for x in range(0,length)
print(‘xxx’)
max()和min()
求最大、最小值,可对数字列表使用,由逗号或空格分隔的字符串也可。numbers=[5,4,10,30,22]
print(max(numbers))
得到:30。strings=’s,t,r,I,n,g,S,T,R,I,N,G’
print(max(strings))
得到:t。注意:字母按字母表的顺序排列,且小写字母排在大写字母后。sum()
求和。float()
转换为浮点型,如12.0。
int()
求整,去掉小数点后的内容,如包含有浮点数的字符串转为整数直接用int()会报错,应用float()。str()
转换为字符串。open()
打开文件
Window
test_file=open(‘C:\\test.txt’)注意第一个反斜杠是标注后一个为单纯的反斜杠。
OSX
test_file=open(‘/users/sarahwinters/test.txt’)。
Ubuntu
test_file=open(‘/home/Jacob/test.txt’)。text=test_file.read()
print(text)
write()
test_file=open(‘C:\\myfile.txt’,’w’) #第二参数w为写入而不是读取
test_file.write(‘xxx’)
test_file.close() ###################!!!!!!#######################关闭文件
参数
具名参数
和普通参数一样,只是它不是按照函数所提供的参数顺序来决定哪一个参数获得哪一个值(第一个参数得到第一个值,第二个参数得到第二个值,第三个参数得到第三个值等等),明确地定义值的名字,所以可以写成任何顺序。当不是总要给每个参数都赋值时,具名参数可只为我们想给它赋值的参数提供值。
def person(width,height):
print(‘I am %s feet wide, %s feet high’ % (width,height))
person(4,3)
或者(用具名参数)
person(height=3,width=4)
模块
引入模块import xxx注意在Ubuntu中可能会出错,需在Ubuntu软件中心搜索python_tk安装Tkinter_Writing Tk Applications with Pythonturtle
海龟画图。开始总是头朝右的,如果我们创建一个和现在对象同名的变量则旧的对象不一定消失
import turtle
t=turtle.Pen()
turtle.Pen()
创建空白画布t=turtle.Pen()应当会看到一个空白的方块(画布),中间有个箭头。若海龟窗口出现在PythonShell程序窗口后面,当把鼠标挪到海龟窗口上时,光标变成了沙漏,这可能你不是通过桌面上的图标来启动Shell程序(如是Windows或苹果),你点击的是Windows开始菜单中IDLE(Python图形界面),或者IDLE安装有问题。尝试退出并用桌面图标来重启Shell程序。如果还不行,尝试用Python控制台而不是Shell程序。Windows中,开始->所有程序,然后再Python3.2组中点击Python(commandline),若在Ubuntu中,从应用菜单中打开中断程序并输入python
各类移动函数
t.forwoard() #向前,参数像素,如50
t.left() #向左转,参数单位度,范围0-360度
t.right() #向右转,参数单位度,范围0-360度
t.backward() #向后,参数像素,如50
t.up() #提起画笔,停止作画
t.down() #画笔纸面触碰,开始作画
t.reset()
擦除画布:清除画布并把就爱你头放回开始位置
t.clear()
清除画布:清除屏幕,箭头仍在原位置
t.color(R,G,B)
改变画笔颜色,R、G、B对应红、绿、蓝,每个值范围为0-1,其中黑为(0,0,0),白为(1,1,1),金为(0.9,0.75,0)
t.begin_fill()和t.end_fill()
给画布上一个区域填色
t.circle()
参数为圆的半径画圆,单位像素
t.setheading()
让箭头面向指定方向
t.goto()
t.goto(-250,250)
举例:可选择轮廓还是填充的方形def mysquare(size,filled):
if filled==True:
t.begin_fill()
for x in range(1,5):
t.forward(size)
t.left(90)
if filled==True:
t.end_fill()
mysqure(50,True)
mysqure(50,False)
tkinter
高级图形,创建完整的应用程序
def hello():
print(‘hello there’)
from tkinter import *
tk=TK() #创建一个基本窗口,其上可以甚至用来画图的画布
btn=Button(tk,text=”click me”,command=hello) #tk为在那里做按钮,第二参数是按钮上面的文字
btn.pack() #显示按钮
注意别忘记先关闭之前创建的窗口
canvas()
创建一个画图用的画布,需要给画布的宽度和高度,像素为单位
canvas=Canvas(tk,width=500,height=500)
canvas.pack()
canvas.create_line()
画线,单位像素,座标决定了像素横向(从左到右)的距离和纵向(从上到下)的距离canvas.create_line(0,0,500,500)
得到:1 #一个标志
canvas.create_rectangle()
画长方形和方形,给定每个角的座标,左上角和右下角,这些座标是参照画布左边和顶边的距离,第五个参数可填颜色值,金色’#ffd800’,其中#代表十六进制数,其占位符为%x
canvas.create_rectangle (10,10,50,50)
print(‘%02x’ % 15) #得到的数字至少有两位
得到:0f
colorchooser.askcolor()
直接打会显示一个颜色选择器,按确定后得到一个元组,包含另一个元组,其中有三个数字(红绿蓝的量分别为0-255)索引为[1]和一个字符串(三个数字的十六进制版本)索引为[2]
canvas.create_arc()
画圆弧,参数依次是包含圆弧的矩形左上角x座标,y座标,右下角x座标,y座标,extent指定圆弧角度,逆时针旋转,注意的是,画360度收圆的时候要用359代替,否则tkinter会把360当成0度,什么都不会画出来
canvas.create_arc(10,10,200,100,extent=180,style=ARC)
canvas.create_polygon()
画多边形,要给每个点座标
canvas.create_polygon(10,10,100,10,100,110,fill=””,outline=”black”) #画三角形
canvas.create_text()
显示文字,只需要给两个座标,文字x和y的位置,还有一个具名参数来接受要显示的文字,当然还有很多参数
canvas.create_text(150,100,text=’There once was a man from Toulouse’,’fill=’red’,font(‘Times’,30))
canvas.create_image()
显示图片,注意只能装入GIF图片,要显示其他要用其他模块(http://www.pythonware.com/products/pil/)
my_image=PhotoImage(file=’c:\\test.gif’) #把图片装入到变量中
canvas.create_image(0,0,anchor=NW,image=myimage) #显示图片,(0,0)为显示图片的位置,anchor=NW(northwest西北方)让函数使用左上角作为画图起始点,否则缺省则用图片的中心作起始点,image指向装入的图片
canvas.create_polygon()
创建基本动画。注意不同画布间操作要关闭画布
canvas.create_polygon(10,10,10,60,50,35) #屏幕会打印一个数字,这是多边形的id,用来指向这个形状
for x in range(0,60)
canvas.move(1,5,0) #把任意画好的对象移动到把x和y座标增加给定值的位置,此处把ID为1的对象横移5个像素,纵移0个像素,如果反方向移,参数可为-5
tk.update() #强制屏幕更新重画
time.sleep(0.05) #休息二十分之一秒0.05秒
让对象对操作有反应
消息绑定,消息是在程序运行中发生的事件,tkinter会监视这些事件然后做出反应。要开始处理事件,即让Python在事件发生是做些事情,首先要创建一个函数,告诉tkinter将某个特定函数绑到或者说关联到某个特定事件上时就完成绑定,tkinter会自动调用这个函数来处理事件。
from tkinter import *
tk=Tk()
canvas=Canvas(tk,width=400,height=400)
canvas.pack()
canvas.create_polygon(10,10,10,60,50,35)
def movertriangle(event): #只接受一个参数event,tkinter用它来给函数传递关于时间的信息
if event.keysym==’Up’: #keysym是key symbol键符号,是一个字符串,包含了实际按键的值
canvas.move(1,0,-3)
elif event.keysym==’Down’:
canvas.move(1,0,3)
elif event.keysym==’Left’:
canvas.move(1,-3,0)
else:
canvas.move(1,3,0)
canvas.bind_all(‘<KeyPress-Return>’,movetriangle) #该函数是告诉tkinter当特定时间发生时应该调用这个函数,第一个参数说明监视什么时间,这里是按下回车键,当KeyPress发生则调用movetriangle函数
这里还有
canvas.bind_all(‘<KeyPress-Up>’,movetriangle)
canvas.bind_all(‘<KeyPress-Down>’,movetriangle)
canvas.bind_all(‘<KeyPress-Left>’,movetriangle)
canvas.bind_all(‘<KeyPress-Right>’,movetriangle)
注意,create_xxx等总会返回一个IDcanvas.itemconfig()
改变对象属性
canvas.itemconfig(对象ID,fill=’blue’) #填充颜色改为蓝色
canvas.itemconfig(对象ID,outline=’red’) #改轮廓线颜色
time
时间
import time
time()
调用所返回的数字实际上是自1970年1月1日00:00:00以来的秒数
举例:计算耗时
t1=time.time()
lots of code
t2=time.time()
则所用时间为t2-t1,单位为秒time.asctime()
作为一个字符串返回当前的日期和时间,以日期的元组为参数,转换时间,以可读形式返回当前的日期和时间
举例:带参使用t=(2007,5,27,10,30,48,6,0,0) #参数从左到右依次是年,月,日,时,分,秒,星期几,一年中的第几天(这用0作为占位符),是否为夏令时时间(0表不是,1表是)。这是一个含日期和时间的数据元组
print(time.asctime(t))
time.localtime()
把当前的日期和时间作为一个对象返回
print(time.localtime())
得到:
time.struct_time(tm_year=2020,tm_mon=2,tm_mday=23,tm_hour=22,tm_min=18,tm_sec=39,tm_wday=0,tm_yday=73,tm_isdst=0)
继续
t=time.localtime()
year=t[0]
month=t[1]
print(year)
得到:2020
print(month)
得到:2。注意对应位置
time.sleep()
单位秒
sys
输入值
import sys
sys.stdin.readline()
其中stdin是standard input缩写,即标准输入,从对象读取,能读取从键盘输入的一行文本知道用户按回车键readline用来读取来自键盘的一行文本输入,直到按回车键位置
v=sys.stdin.readline(x) #x为从头读得前x个含空格的字符
print(v)
注意imput和readline的区别在readlin可用一个参数来指定读取多少个字符sys.exit()
选Yes则关闭,如报错则需修改IDLE
sys.stdout.write()
stdout是standard output标准输出的缩写,可向Shell程序或控制台写入对象,与print相似,但stdout是一个文件对象
sys.stdout.write(‘xxx’) #当write结束时,返回它所写入的字符个数
sys.version
获得Python的版本信息
print(sys.version)
copy
复制,可复制复杂类
import copy
copy.copy()
浅拷贝,只拷贝祝对象list对象,并没有拷贝其中的每个对象
harry=Animal(‘hippogriff’,6,’pink’)
harriet=copy.copy(harry)
print(harry.species)
得到:hippogriffprint(harriet.species)
得到:hippogriffcarrie=Animal(‘chimera’,4,’green polka dots’)
billy=Animal(‘bogill’,0,’paisley’)
my_animals=[harry,carrie,billy]
more_animals=copy.copy(my_animals)
print(more_animals[0].species)
得到:hippogriffprint(more_animals[1].species)
得到:chimera
my_animals[0].species=’ghoul’
print(my_animals[0].species)
得到:ghoul
print(more_animals[0].species)
得到:ghoul
sally=Animal(‘sphinx’,4,’sand’)
my_animals.append(sally)
print(len(my_animals))
得到:4print(len(more_animals))
得到:3copy.deepcopy()
深拷贝,新列表内为所有对象的拷贝
more_animals=copy.deepcopy(my_animals)
my_animals[0].species=’wyrm’
print(my_animals[0].species)
得到:wyrm
print(more_animals[0].species)
得到:ghoulkeyword
import keyword
keyword.iskeyword()
判断该字符串是否为Python关键词
keyword.kwlist
查看关键词列表
print(keyword.iskeyword(‘if’))
得到:Trueprint(keyword.kwlist)
得到:
[‘False’,…,’xxx’] #关键词列表
random
获得随机数
import random
random.randint(A,B)
A和B之间随机得到一个整数
random.choice()
列表中随机选一个元素
random.shuffle()
列表洗牌,打乱
desserts=[‘ice cream’,’pancakes’,…]
print(random.choice(desserts))
得到:随意的其中一个random.shuffle(desserts)
pirnt(desserts)
得到:顺序不同的列表random.randrange(x)
传入一个数字x,会返回一个在0和这个数字之间的随机整数,但不包含x
举例:猜数字游戏
num=random.randint(1,100)
while True:
print(‘Guass a number between 1 and 100’)
guess=input()
i=int(guess)
if i==num:
print(‘You guessed right’)
break
elif i<num
print(‘Try higher’)
elif i>num
print(‘Try lower’)
pickle
腌菜,把Python对象转换成可方便写入到文件和从文件读取的形式
import pickle
写入open(‘save.dat’,’wb’) #以二进制模式写入
pickle.dump(数据,已打开文件)
save_file.close()
读取open(‘save.dat’,’rb’) #读取二进制模式文件
pickle.load(文件句柄)
save_file.close()
注意二进制文件:纯文本文件中只可以包含人们可读的字符。图像、音乐文件、电影,还有序列化(被packle过)的Python对象中的信息并不总是对认可读的
关键词
as
缩短名字
import i_am_a_python_module_that_is_not_very_useful as notuseful
assert
断言,用于声明一段代码必须为真,是另一种捕获代码中的错误和问题的方式
mynumber=10
assert mynumber<5
结果:因为它为10并不小于5,所以Python显示错误信息,称为断言错误class
定义一种类型的对象。类可以有一个__init__函数,用于执行这个类的对象被创建时所需要执行的所有任务
class Car:
def __init__(self,color):
self.color=color
car1=Car(‘red’)
car2=Car(‘blue’)
print(car1.color)
得到:redprint(car2.color)
得到:blue
def
定义函数
def minutes(years):
return years*365*24*60
minutes(10)
得到:5256000except
捕获代码中的问题
finally
确保有错误发生时,某段代码一定执行,通常是清理工作
from
只引入某类自己,然后直接使用它,如不用turtel直接用Pen
from turtle import Pen
t=Pen()
如果某个模块中有很多函数想用,又不想在使用他们时使用模块名字,则用星号*引入模块中的所有东西from time import *
print(localtime())而不再是print(t.localtime())
global
全局变量
in
判断某元素是否在一个元素集中的表达式里
if 1 in [1,2,3,4]:
或者
if ‘pants’ in clothing_list:
is
判断是否相等
lambda
创建匿名或说是内嵌函数
not
取反
x=True
print(not x)
得到:False
或者
if ‘pants’ not in clothing_list:
pass
暂时为空,正常跳过
raise
产生一个错误
try
以except和finally结束
with
与try和finally相似,创建一个和对象相关的语句块
yield
和return近似,但他用于一类特殊的对象,叫“生成器”(generator)。生成器在使用过程中创建值(也就是在需要的时候创建值),range函数的行为就像一个生成器
本博客相关博文链接
[1]Python 2.7.6 配置 OpenCV 2.4.9方法:http://blog.csdn.net/liaoqix/article/details/46518039
[2]Visual Studio 2013 配置 OpenCV 2.4.9 方法:http://blog.csdn.net/liaoqix/article/details/45315971
[3]Python实现冒泡排序算法:http://blog.csdn.net/liaoqix/article/details/46692027