迭代
一个for语句就能实现简单的迭代,但是对于一些复杂的迭代,一此函数非常有用。
1.并行迭代
程序可以同时迭代两个序列,比如有下面两个列表:
names = ['king','ken','jack'] ages = [18,20,22]
如果想打印名字和对应的年龄,可以像下面这样做:
for x in names: for y in ages: if names.index(x) == ages.index(y): print('%s is %s years old'%(x,y)) >>>king is 18 years old ken is 20 years old jack is 22 years old
也可以这样:
for i in range(len(names)): print('%s is %s years old' %(names[i],ages[i]))
而内建的zip函数也可以用来并行迭代,它会将两个序列压缩在一起,返回一个元组的列表,然后我们可以循环中解包元组,而且zip可以用于不等长的序列,当最短序列用完时,循环就停止。
for name,age in zip(names,ages): print('%s is %s years old' %(name,age))
2.编号迭代
有时候相要迭代序列中的对象,同时又要获得当前对象的索引,可以用内建函数 enumerate.
li = ['a','b','c','d'] for x,y in enumerate(li): print(x,y) >>>0 a 1 b 2 c 3 d
Python内建函数
1. abs(x)
abs()函数返回数字(可为普通型、长整型或浮点型)的绝对值。例如:
>>> abs(-10) 10
2. chr(i)
chr()函数返回与ASCII码i相匹配的一个单一字符串,如下例所示:
>>> print (chr(72)+chr(101)+chr(108)*2+chr(111)) Hello
3. input([prompt])
input()函数提供用户输入。
>>> name = input('input your name:') input your name:yang
4. list(sequence)
list()函数返回以列表。该列表的项及顺序与sequence参数的项及顺序相同,如下例所示:
>>> str = 'abcdefg' >>> list(str) ['a', 'b', 'c', 'd', 'e', 'f', 'g']
5. min(s)
当仅给定一个参数时,min()函数返回序列s的最小值。如:
>>> li = [1,2,3,4,5,6,7] >>> min(li) 1
6.ord(c)
该函数返回由一个字符c组成的字符串的ASCII码值或Unicode数字码。ord()函数是chr()函数的反函数
>>> ord('a') 97 #97是a在ASCII表中的数字码
7.chr(s)
该函数返回由一个ASCII码值对应的数字或字符。
>>> chr(98) 'b'
利用此特性,我们可以生成随机验证码:
import random li = [] for i in range(6): x = random.randrange(0,5) if x == 2: y = random.randrange(0,9) y =str(y) li.append(y) else: z = random.randrange(65,91) z = chr(z) li.append(z) xyz = ''.join(li) print(xyz) >>>QZ23BZ
8. range(x,y)
如果你需要一个数值序列,使用内建函数range() 会很方便
print(list(range(0,10))) >>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
当然,可以让range() 的起始值定为某一个数,也可以指定一个不同的步长:
print(list(range(0,10,2))) >>>[0, 2, 4, 6, 8] print(list(range(4,10,2))) >>>[4, 6, 8]
装饰器
装饰器其实也就是一个函数,一个用来包装函数的函数,装饰器在函数声明完成的时候被调用,调用之后声明的函数被换成一个被装饰器装饰过后的函数。
装饰器的语法以@开头,接着是装饰器函数的名字、可选参数。紧跟装饰器声明的是被装饰的函数和被装饰的函数的可选参数。
def outer(f): def inter(): print('this is before') f() print('this is after') return inter @outer def f1(): print('F1') #等价于 def outer(f): def inter(): print('this is before') f() print('this is after') return inter def f1(): print('F1') f1 = outer(f1)
被装饰对象有参数:
def outer(f): def inter(x,y): print('this is before') f(x,y) print('this is after') return inter @outer def f1(x,y): print(x) print(y) f1('a','b')