一、冒泡排序


第二种冒泡排序:

li = [89,22,63,11,43,2,47,21,1,97,73]

for a in range(len(li)-1):
    for b in range(a+1,len(li)):
        if li[a] > li[b]:
            li[a],li[b]=li[b],li[a]
print li

列出来两个序列,a是从第一个到倒数第二个,b是从第二个到倒数第一个,然后两个序列的列表值做比较,大的换位置。


二、更改配置文件

1、查询配置,原有文件中有此节点,将此节下的记录列出来

def look_setup(site):

    with open('G:\doc\setup.conf') as f:

        li=[]

        flag=False

        for line in f:

            lookline='backend %s' % site

            if line.strip() == lookline:

                flag=True

                continue

            if line.strip().startswith('backend'):

                break

            if flag and line.strip():

                li.append(line.strip())

    return li

此函数用来查询,调用此函数:

retu=look_setup('www.oldboy.org')

print retu


2、增加一行记录。

先判断节点backend是否存在,如果存在,再判断新节点是否已经存在,如果存在就不再添加,如果不存在则要添加;如果backend不存在,则把backend和记录同时添加到文件末尾。


3、删除一行记录或backend节点

先判断记录是否存在,如果存在就删除;判断backend节点是否存在,存在则删除。



三、lambda表达式

lambda表达式可以将简易的函数用一行来表示,如:

def func(name):

        return name * 2

下面一句,等同于上面两句,可以直接调用func2函数。

func2=lambda name:name *2


func2=lambda **x:x

a={'wang':24,'zhi':42}
print func2(**a)


lambda用来处理简单逻辑,自动return.


四、内置函数之序列操作系列

1、map 对序列中的每个元素进行操作,最终返回一个新的序列

wKioL1ZRo8mQR44DAACrrHMspIA852.png

>>> a=(14,35,63)

>>> print map(lambda x:x+50,a)

[64, 85, 113]

##a是列表或元组,遍历a传给前面的lambda的匿名函数,这两个做为map的两个参数。


li=[23,89,1,1]
li2=[11,42,53,35]

print map(lambda a,b:a+b,li,li2)

li和li2两个列表元素的数量要相等,否则会报错。


2、filter 对序列中的元素进行筛选 ,返回符合条件的序列。

wKiom1ZRo5jyCOkhAADQAeLhMWQ795.png

filter()函数为过滤生成新列表,当在第一个功能函数内返回True时候,才把元素放到新列表中,否则过滤掉

li=[15,22,66,43]

def test(num):

        if num>40:

                return True

        else:

                return False

print filter(test,li)

##filter(function, sequence) 返回一个 sequence(序列),包括了给定序列中所有调用 function(item) 后返回值为 true 的元素(如果可能的话,会返回相同的类型)。如果该 序列 (sequence)是一个 str, unicode 或者 tuple,返回值必定是同一类型,否则,它总是 list。


li=[23,89,False,'',0]

print filter(None,li)

如果filter的参数为None, 则只取序列中为True的数值。


3、reduce 对序列进行累计操作,最后返回一个值。


li=[11,42,53,35]

print reduce(lambda a,b:a+b,li)


五、yield生成器


def abc():

  yield 2

  yield 4

  yield 7

>>> abc()

<generator object abc at 0x7f7f873a5640>

yield只有在循环调用时候,才会生效,执行时yield能记录上次循环执行的位置,下次循环直接从下一步开始:


def func(b):

    a=0

    while True:

        a+=1

        if a>b:

            return

        else:

            yield a

此函数也只有在for循环调用时才会打印。


六、装饰器


在不用装饰器的情况下,如果想给home函数增加功能,又不想改原home的代码

def home():

    print "Welcome to back"


可用以下方法:

def inclues(fun):

    print "This is append"

    return fun()


home=inclues(home)

以上方法虽然没有home的原代码,但是改变了接口的调用方式。


def inclues(fun):

    print "This is append"

    return fun

home=inclues(home)


home()

上面的方法就是在不改变源代码 ,又不改变调用接口的情况下实现了添加新功能的需求。

这就是装饰器的分解,


装饰器方法如下:

def inclues(fun):

    print "This is append"

    return fun

@inclues

def home():

    print "Welcome to back"

home()

装饰器要放在函数的上面,函数才可以调用。