一、关于python
1.创建
由荷兰人Guido van Rossum(龟叔)于1989年圣诞节为打发无聊时间所编写的编程语言。
2.python的特点
优点:优雅 明确 简单。代码量少,运行速度快。
缺点:运行速度慢、源码不能加密
3.适合/不适合的领域
适合领域:Web网站和各种网络服务、系统工具和脚本、作为“胶水”语言把其他语言开发的模块包装起来方便使用。
不适合的领域:贴近硬件的代码,例如驱动程序等(首选C)、移动开发:iOS/Android有各自的开发语言(ObjC,Swift/Java)、游戏开发:首选C/C++
4.实际应用
国外:YouTube(视频网站)、Instagram(照片墙)(社交应用)等 国内:豆瓣、搜狐邮箱等 著名的开源云计算平台openstack(国外)
广泛应用于大公司:Google、Yahoo、NASA
5. 和其它语言对比
类型 运行 速度 代码量
C 编译为机器码 非常快 非常多
Java 编译为字节码 快 多
Python 解释执行 慢 少(开发速度快 运行速度取决于数据库的操作和网络调用)
二、变量和数据类型
1.在python中能直接处理的数据类型有以下几种:
①整数
包括负整数。计算机使用二进制,所以使用16进制表示整数比较方便。16进制用0x前缀和0-9,a-f表示,例如:0xff00等。
②浮点数
浮点数就是小数,按照科学计数法表示,一个浮点数的小数点位置是可变的。对于很大或者很小的浮点数,必须用科学计数法表示,10可以用e代替,1.23*10^9就是1.23e9.0.000012可以写成1.2e-5.
③字符串
字符串是以’’或“”括起来的任意文本,如’abc’等。
④布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有True,False两种值,要么是true要么是false。在python中,可以直接用True、False表示布尔值(注意大小写),也可以通过布尔运算计算出来。
布尔值可以用and、or、not运算。
And与运算:所有结果都为true,and运算结果才是true。
Or或运算:只要有一个结果是true,or运算结果就是true。
Not非运算:单目运算符,把true变成false,false变成true。
⑤空值
空值是python里的一个特殊值,用none表示。None并不是0,因为0是有意义的,而none是一个特殊的空值。
2.print语句
Print语句即是指定输出的文字。比如‘Hello world’,用代码表示:print ‘hello world’
Print语句可以跟上多个字符串,用逗号隔开,就可以连成一串输出。Print会依次打印每个字符串,遇到逗号‘,’会输出一个空格,因此输出的字符串是拼起来的。
>>> print 'The quick brown fox', 'jumps over', 'the lazy dog'
The quick brown fox jumps over the lazy dog
Print也可以打印整数,或者计算结果。
>>> print '100 + 200 =', 100 + 200
100 + 200 = 300 #运行结果
3.注释
Python的注释以‘#’开头,后面的文字只到行尾都算注释。
4.变量
① 变量的概念基本上和代数的方程变量是一致的。在python中,变量使用一个变量名表示,变量名必须是大小写英文、数字和下划线(-)的组合,且不能用数字开头。
②等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。这种变量本身类型不固定的语言称之为动态语言,相比静态语言,动态语言更加灵活。
a = 123 # a是整数
print a
a = 'jainshu' # a变为字符串
print a
③静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。
int a = 123; // a是整数类型变量
a = "'jainshu"; // 错误:不能把字符串赋给整型变量
④变量在计算机内存中的表示。
假如写a=’ABC’,python解释器做了2件事情。
第一、在内存中创建了一个‘ABC’的字符串;
第二、在内存中创建了一个名为a的变量,并把它指向‘ABC’
5.定义字符串
字符串可以用’’和””括起来表示。
如果字符串包含””,我们可以用’ ’括起来表示。
'Learn "Python" in jianshu'
如果两个都包含,需要使用转义字符进行‘转义’,python字符串用\进行转义。
如果要表示字符串Bob said“I ‘ m OK”
由于’和”会引起歧义,因此我们在它前面插入一个\表示这是一个普通字符,不代表字符串的起始,因此这个字符串可以表示为
'Bob said \"I\'m OK\".'
注意:转义字符\ 不计入字符串的内容中。
常用的转义字符还有:
\n 表示换行
\t 表示一个制表符
\\ 表示 \ 字符本身
6.python中的raw字符串与多行字符串
如果一个字符串包含很多需要转义的字符,对每一个字符进行转义很麻烦,为了避免这种情况,我们可以在字符串前面加个前缀r,表示这是一个raw字符串,里面的字符就不需要转义了。
r'\(~_~)/ \(~_~)/'
表示多行字符串,用'''...'''表示
'''Line 1
Line 2
Line 3'''
在多行字符串前面添加r,把这个多行字符串也变成一个raw字符串
r'''Python is created by "Guido".
It is free and easy to learn.
Let's start learn Python in jianshu!'''
7.python中的unicode字符串
Python后来添加了对unicode的支持,以unicode表示的字符串用u’...’表示,比如
Print u ‘中文’
注意:不加u,中文就不能正常显示。
Unicode字符串出来多了一个u之外,同普通字符串,转义字符和多行表示法仍然有效。
转义:
u'中文\n日文\n韩文'
多行:
u'''第一行
第二行'''
raw+多行:
ur'''Python的Unicode字符串支持"中文",
"日文",
"韩文"等多种语言'''
如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释,目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++ 另存为... 并选择UTF-8格式保存。
# -*- coding: utf-8 -*-
8.python中的整数和浮点数
Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致。
和数学运算不同的地方是:python的整数运算结果仍然为整数,浮点数运算结果仍然是浮点数。整数和浮点数运算结果仍然是浮点数。
Python的整数除法即使除不尽,结果仍然为整数,余数被直接扔掉,不过python提供了一个求余的运算可以直接计算余数。如果要计算11/4的精确结果,按照“整数和浮点数混合运算的结果是浮点数”的法则,把两个数中的一个变成浮点数再运算。
11 / 4 # ==> 2
11 % 4 # ==> 3
11.0 / 4 # ==> 2.75
9.python中的布尔类型
在python中,布尔类型还可以与其他数据类型做and、or、not运算。
a = True
print a and 'a=T' or 'a=F'
计算结果是字符串‘a=T’.
这个涉及到and和or运算的一条重要法则:短路计算。
A:在计算a and b时,如果a是false,则根据与运算法则,整个结果必定是false,因此返回a;如果a是true,则整个计算结果必定取决于b,因此返回b。
B:在计算a or b时,如果a是true,则根据或运算法则,整个结果必定是true,因此返回a;如果a是false,则整个计算结果必定取决于b,因此返回b。
所以,python在做布尔运算时,只要能提前确定计算结果,它就会直接返回结果。
三、List和Tuple类型
1.创建list
List是python内置的一种数据类型,它是一种有序的集合,可以随时添加和删除元素。
List的元素是按照顺序排列的。构造list很简单,直接用 []把所有的list元素都括起来,就是一个list对象。
可以把list赋值给一个变量,可以通过变量来引用list。
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates # 打印classmates变量的内容
['Michael', 'Bob', 'Tracy']
由于python是动态语言,所有list中可以包含各种数据。一个元素也没有的就是空list。
>>> L = ['Michael', 100, True]
>>> empty_list = []
2.python按照索引访问list
由于list是一个有序集合,我们可以通过索引来获取list中的指定元素。需要特别注意的是,索引从0开始。
打印第一个就是print L[0]
当使用索引越界时候,就会报错IndexError
3. 倒序访问list
倒数第一个,可以用索引-1来表示最后一个元素。倒数第二用-2表示。注意,千万不要越界。
4. 添加新元素
List的append()方法,把新元素添加到list的末尾。
List的insert()方法,第一个参数是索引号,第二个参数是待添加的新元素。
>>> L = ['Adam', 'Lisa', 'Bart']
>>> L.insert(0, 'Paul')
>>> print L
['Paul', 'Adam', 'Lisa', 'Bart']
L.insert(0, 'Paul')的意思是,'Paul'将被添加到索引为 0 的位置上(也就是第一个),而原来索引为 0 的Adam同学,以及后面的所有同学,都自动向后移动一位。
5.从list中删除元素
List的pop()方法,总是删掉list的最后一个元素,并且它还返回这个元素。
可以使用pop()方法的索引定位元素的位置,将其进行删除。
>>> L = ['Adam', 'Lisa', 'Paul', 'Bart']
>>> L.pop(2)
'Paul'
>>> print L
['Adam', 'Lisa', 'Bart']
6.替换元素
对list中的某一个索引赋值,可以直接用新的元素来替换掉原来的元素,list中包含的元素个数不变。
将Bart替换成Paul
>>> L = ['Adam', 'Lisa', 'Bart']
>>> L[2] = 'Paul'
>>> print L
由于Bart还可以用-1做索引,所以下面的同样可以完成替换工作
L = ['Adam', 'Lisa', 'Paul']
>>> L[-1] = 'Paul'
7.python之创建tuple
Tuple翻译为“元组”,是一种有序的列表,但是tuple一旦创建完毕,就不能修改了。
Tuple用(),list用[]
Tuple没有添加和删除方法,是写死的。
获取tuple元素的方式和list的方式是一模一样的。我们可以正常使用t[0]、t[-1]等索引方式访问元素,但是不能赋值成别的元素。
8.创建单元素tuple
Tuple和list一样,可以包含0个1个和任意多个元素。
包含0个元素的tuple,也就是空tuple,用()表示。
>>> t = ()
>>> print t
()
包含一个元素的tuple
>>> t = (1)
>>> print t
1
注意:()既可以表示tuple又可以作为括号表示运算时的优先级,结果(1)被python解释器计算出结果1,导致我们得到的不是tuple而是整数1
()定义单元素的tuple有歧义,所以单元素tuple要多加一个“,”,避免歧义。多元素可加可不加。
>>> t = (1,)
>>> print t
(1,)
9.“可变”的tuple
>>> t = ('a', 'b', ['A', 'B'])
>>> L = t[2]
>>> L[0] = 'X'
>>> L[1] = 'Y'
>>> print t
('a', 'b', ['X', 'Y'])
表面上看,tuple的元素确实变了,但是变得其实不是tuple的元素,而是list的元素。Tuple一开始指向的list并没有改成别的list,所以tuple所谓的“不变”是说,tuple的每个元素,指向永远不变,即指向a就不能改成指向b,指向一个list,就不能改成指向其他对象,但指向这个list本身是可变的。
四、条件判断和循环
1.if语句
Python代码的缩进规则,具有相同缩进的代码被视为代码。
缩进严格按照python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易因为缩进而造成语法错误。
If语句后接表达式,然后用 : 表示代码块的开始。
如果在python交互环境下敲代码,还有特别留意缩进,并且退出缩进需要多敲一行回车。
>>> age = 20
>>> if age >= 18:
... print 'your age is', age
... print 'adult'
...
your age is 20
adult
2. if-else语句
两种判断条件是“非此即彼”的,因此可以使用if-else语句来将它们统一
Else后面有个 :
if age >= 18:
print 'adult'
else:
print 'teenager'
3.if-elif-else语句
Elif的意思就是else if。这一系列的条件判断会从上到下依次判断,如果某个判断为true,执行完对应的代码块,后面的条件判断就直接忽略不再执行了。
if age >= 18:
print 'adult'elif age >= 6:
print 'teenager'elif age >= 3:
print 'kid'else:
print 'baby'
4.for循环
For循环可以依次把list或者tuple中的每个元素迭代出来。
L = ['Adam', 'Lisa', 'Bart']for name in L:
print name
5.while循环
While循环不会迭代list或者tuple的元素,而是根据表达式判断循环是否结束。
N = 10
x = 0while x < N:
print x
x = x + 1
While循环每次先判断x 如果没有这一个语句,while循环在判断x sum = 0 x = 1while True: sum = sum + x x = x + 1 if x > 100: break print sum 在循环过程中,使用continue跳过后续循环代码,继续下一次循环。 L = [75, 98, 59, 81, 66, 43, 69, 85] sum = 0.0 n = 0for x in L: sum = sum + x n = n + 1 print sum / n 如果只想取x>60的话 for x in L: if x < 60: continue sum = sum + x n = n + 1 在循环内部,可以嵌套循环。 for x in ['A', 'B', 'C']: for y in ['1', '2', '3']: print x + y Dict就是通过key来查找value。花括号{}表示这是一个dict,然后按照key:value,写出来即可,最后一个key:value的逗号可以省略。由于dict也是集合,len()函数可以计算任意集合的大小。 Eg:d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> len(d) 3 注意:一个key-value算一个,因此dict大小为3. 使用d[key]的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key。只要key存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError 避免KeyError方法: ①用in操作符,判断key是否存在。如果不存在,判断为False,便不会执行print,避免错误。 if 'Paul' in d: print d['Paul'] ②使用dict本身提供的一个get方法,在key不存在的时候,返回None。 >>> print d.get('Bart') 59 >>> print d.get('Paul') None ①查找速度快。无论dict有几个元素,查找速度一样,而list查找速度会随着元素的增加而逐渐下降,但是占用内存小。缺点:dict占用内存大,浪费内容多。 ②存储的key-value序对是没有顺序的。Dict的内部是无序的,不能用dict存储有序集合。List有序。 ③作为key的元素必须不可变。 Dict是可变的,我们可以随时往dict中添加新的key-value。用赋值语句,如果key不存在,直接加入,如果key已经存在,赋值会用新的value替换原来的value。 >>> d['Paul'] = 72 Dict是一个集合,可以通过for循环遍历。由于通过key可以获取对应的value,因此在循环体内可以获取到value的值。 >>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> for key in d: ... print key ... Lisa Adam Bart Dict的作用是建立一组key和value的映射关系,dict的key是不能重复的。当我们只想获取到dict的key,目的是为了保证这个集合的元素不会重复,此时使用set。 Set持有一系列元素,同list,但set的元素不重复且无序,同dict的key。 创建set的方式是调用set()并传入一个list,list的元素将作为set的元素。set内部存储的元素是无序的。因为set不能包含重复的元素,所以当我们传入包含重复元素的list的时候,set会自动去掉重复的元素。 >>> s = set(['A', 'B', 'C', 'C']) >>> print s set(['A', 'C', 'B']) >>> len(s) 3 Set存储的是无序集合,所以访问set中的某个元素实际上就是判断这个元素是否在set中。 可以用in操作符判断。 >>> s = set(['Adam', 'Lisa', 'Bart', 'Paul']) >>> 'Bart' in s True ①判断一个元素是否在set中的速度很快。 ②任何可变对象不能放入set中。Set存储的元素必须是不变元素。 ③]Set存储的元素是没有顺序的。 应用: weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']) 再判断输入是否有效,只需要判断该字符串是否在set中: x = '???' # 用户输入的字符串if x in weekdays: print 'input ok'else: print 'input error' Set是一个集合,用for循环遍历set元素。元素的顺序和list的顺序是很可能不同的,而且在不同机器上运行的结果也可能不同。 请用for 循环遍历如下的set,打印出name: score 来。 s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)]) for x in s: print x[0] + ':', x[1] Set存储的是一组不重复的无序元素,因此更新set,一是把新的元素添加到set中,二是把已有元素从set中删除。 添加元素时,用set.add()方法,如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了。Add()可以直接添加。 >>> s = set([1, 2, 3]) >>> s.add(3) >>> print s set([1, 2, 3]) 删除set的元素,使用set的remove()方法。Remove()前需要判断,如果删除的元素不存在set中,remove()会报错。 >>> s = set([1, 2, 3]) >>> s.remove(4) Traceback (most recent call last): File " KeyError: 4 Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用。 Eg:圆的面积:s = area_of_circle(x) 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,它接收一个参数。 要知道函数的名称和参数,有以下途径: ①Python官方网站 ②在交互式命令行通过help(abs)查看函数的帮助信息 2.1绝对值函数调用。 >>> abs(-20) 20 调用函数的时候,传入参数量不对【abs(1,2)】,会报typeError的错误;如果参数类型不能被函数接受【abs(‘a’)】,也会报TypeError的错误,并且给出错误信息; 2.2比较函数cmp(x,y),需要两个参数,如果想x >>> cmp(1, 2) -1 >>> cmp(2, 1) 1 >>> cmp(3, 3) 0 2.3转换类型函数,int()函数把其他数据类型转换成证书,str()函数把其他类型扎UN哈UN成str。 >>> int(12.34) 12 >>> str(123) '123' Python中,定义一个函数要使用def语句,依次写出函数名、括号,括号中的参数和冒号;然后,在缩进块中编写函数体,函数的返回值用return语句返回。 函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此函数内部通过条件判断和循环可以实现非常复杂的逻辑。如果么有return语句,函数执行完毕后也会返回结果,只是结果为None。 注意:return None可以简写为return。 def my_abs(x): if x >= 0: return x else: return -x #math包提供了sin()和cos()函数,我们先用import引用它: import math def move(x, y, step, angle): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny Python函数返回的仍然是单一值,用print打印返回结果,原来返回值是一个tuple。 在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以python的函数返回多值其实就是返回一个tuple,但写起来更方便。 定义:在函数内部,可以调用其它函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 优点:定义简单,逻辑清晰。 理论上,所有的递归函数都可以写成循环的方式,但是循环的逻辑不如递归清晰。 注意:使用递归函数需要防止栈溢出。 函数调用是通过栈这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。 定义函数的时候,还可以有默认参数。函数的默认参数的作用是简化调用,你只需要把必须的参传进去。但是在需要时候,又可以传入额外的参数来覆盖默认参数值。 函数的参数按照从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面。 可变参数的名字前面有个*号,我们可以传入0个,1个或者多个参数给可变参数: Python解释器会把传入的一组参数组装成有个touple传递给可变参数。因此,在函数内部,直接把变量args看成一个touple就好了。 定义可变参数目的:简化调用。 def average(*args): ... 这样,在调用的时候,可以这样写: >>> average() 0 >>> average(1, 2) 1.5 >>> average(1, 2, 2, 3, 4) 2.4 对经常取指定索引范围的造作,用循环十分的复杂,此时使用python的切片(slice)操作符,简化操作。 ①]如果一个索引是0,可以省略 >>> L[:3] ['Adam', 'Lisa', 'Bart'] ②索引从1开始,取2个元素 >>> L[1:3] ['Lisa', 'Bart'] ③只用一个:表示从头到尾 >>> L[:] ['Adam', 'Lisa', 'Bart', 'Paul'] [if !supportLists]④ [endif]指定第三个参数 >>> L[::2] ['Adam', 'Bart'] 第三个参数表示每N个取一个,上面的L[::2]会每两个元素取出一个来,也就是隔一个取一个。 把list换成tuple,切片操作相同,只是切片的结果变成了tuple。 对于list,python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片。 记住倒数第一个元素的索引是-1。倒序切片包含起始索引不包含结束索引。 >>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>> L[-2:] ['Bart', 'Paul'] >>> L[:-2] ['Adam', 'Lisa'] >>> L[-3:-1] ['Lisa', 'Bart'] >>> L[-4:-1:2] ['Adam', 'Bart'] 字符串‘xxx’和Unicode字符串可以看做是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍然是字符串。 Python只需要切片一个操作就可以对字符串进行各种截取,非常简单。 >>> 'ABCDEFG'[:3] 'ABC' >>> 'ABCDEFG'[-3:] 'EFG' >>> 'ABCDEFG'[::2] 'ACEG' python中,如果给定一个list或者tuple,我们可以通过for循环来遍历这个list或touple,这种遍历我们称为迭代。 Python中,迭代是通过for..in来完成的,而很多语言c或者java,迭代list是通过下标完成的,python的for循环抽象程度要高于java的for循环。 Python的for循环不仅可以用在list或者touple上,还可以作用于其他任何可迭代对象上。迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用for循环总数可以依次取出集合的每一个元素。 注意:集合是指包含一组元素的数据结构,我们已经介绍的包括: A:有序集合:list,touple,str和unicode; B:无序集合:set C:无序集合并且有key-value对:dict 迭代永远是取出元素本身,而非元素的索引。对于有序集合,元素确实是有索引的。有时候,我们想在循环中拿到索引,方法是使用enumerate()函数,使用这个可以在for循环中同时绑定索引index和元素name。因此,迭代的每一个元素实际上是一个touple。 >>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>> for index, name in enumerate(L): ... print index, '-', name ... 0 - Adam 1 - Lisa 2 - Bart 3 - Paul 如果我们知道每个touple元素都包含两个元素,for循环又可以简写为: for index, name in enumerate(L): print index, '-', name 因此,索引迭代也不是真的按照索引访问,而是又enumerate()函数自动把每个元素变成(index,element)这样的tuple,再迭代就同时获得了索引和元素本身。 zip()函数可以把两个 list 变成一个 list: >>> zip([10, 20, 30], ['A', 'B', 'C']) [(10, 'A'), (20, 'B'), (30, 'C')] Dict对象本身就是可迭代对象,用for循环直接迭代dict,可以每次拿到dict的一个key。Dict对象有一个value()方法,这个方法把dict转换成一个包含所有value的list,这样我们迭代的就是每一个dict的value。 Dict的itervalues()方法,迭代效果同values()方法。 不同点: A:values()方法实际上把一个dict转换成了包含value的list。 B:itervalues()方法不会转换,它会在迭代过程中一次从dict中取出value,节省了生成list所需要的内存。 C:打印itervalues()返回 注意:迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。如果说一个对象可以迭代,可以直接使用for循环。 Eg:给定一个dict: d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 } 请计算所有同学的平均分 d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 } sum = 0.0 for v in d.itervalues(): sum = sum + v print sum / len(d) 在一个for循环中,能同时迭代key和value。使用dict对象的items()方法。Items()方法把dict对象转换成了半寒tuple的list,对这个list进行迭代,就可以同时获得key和value。 Items类似于iteritems(),它是在迭代过程中不断给出tuple,所以iteritems()不占用额外的内存。 Eg: 请根据dict: d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 } 打印出name : score,最后再打印出平均分 average : score。 列表生成式可以用一行语句代替循环生成list。写列表生成式时,要把生成的元素x*x放到前面,后面跟上for循环,就可以创建list。 >>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] For循环的迭代不仅可以迭代普通的list,还可以迭代dict。 字符串可以通过%进行格式化,用指定的参数替代%s。字符串join()方法可以把一个list拼接成一个字符串。 如果我们用一个函数来替换字符串的格式化代码,可以得到更清晰的代码: def generate_tr(name, score): return ' tds = [generate_tr(name, score) for name, score in d.iteritems()] 这样,只需要修改generate_tr() 函数,必要的时候把score标红。 参考代码: d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } def generate_tr(name, score): if score < 60: return '6.break退出循环
7.continue继续循环
8.多重循环
五、Dict和Set类型
1. 什么是dict
2.访问dict
3.dict的特点
4.更新dict
5.遍历dict
6.Set
7.访问set
8. set的特点
9.遍历set
10. 更新set
六、函数
1.函数
2.调用函数
shttp://docs.python.org/2/library/functions.html#abs
3. 编写函数
4. 返回多值
5. 递归函数
6. 定义默认参数
7.定义可变参数
七、切片
1.对list进行切片
2. 倒序切片
3.对字符串切片
八、迭代
1.定义:
2.索引迭代
3. 迭代dict的value
4. 迭代的key和value
九、列表生成式
1.生成列表
2. 复杂表达式
' % (name, score)%s %s
' % (name, score)%s %s
return '
tds = [generate_tr(name, score) for name, score in d.iteritems()]
print '
Name | Score |
---|---|
3.条件过滤
列表生成式的for循环后面可以加上if判断。有了if条件,只有if判断为true的时候,才把循环的当前元素添加到列表中。
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
4.多层表达式
For循环可以嵌套,因此在列表生成式中,可以用多层for循环来生成列表
对于字符串'ABC' 和 '123',可以使用两层循环,生成全排列:
>>> [m + n for m in 'ABC' for n in '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
Eg:
利用3 层for循环的列表生成式,找出对称的 3 位数。例如,121 就是对称数,因为从右到左倒过来还是 121。
print [100 * n1 + 10 * n2 + n3 for n1 in range(1, 10) for n2 in range(10) for n3 in range(10) if n1==n3]