Python 基础(二)

迭代

一个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')

  

posted @ 2016-06-01 15:12  yangyang1234.com  阅读(174)  评论(0编辑  收藏  举报