zoukankan      html  css  js  c++  java
  • python之路day4

    1很多人的努力都是浅尝辄止的

    2.很多牛逼的人还在努力

    3.半年会后牛逼的转身

    冒泡算法:

    for n in range(1,len(li)):  
    for m in range(len(li) -n) :
            num1 = li[m]
            num2 = li[m+1]
    if num1 > num2:
                temp = li[m]
    li[m] = num2
    li[m+1] = temp
    
    print li

    ha 配置思路

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    # powered by  xiaobing
    
    #查,加,删
    #定义读的函数
    import os,json
    
    def fetch(backend):
        #打开文件ha
        with open('ha') as obj:
            flag = False
            fetch_list = []
            #按行读取文件,每次只读取一行
            for line in obj:
                 #建个空列表,为后续将backend 下的值存储用
    
                #如果这行内容等于 backend 参数值,就设置个flage值为True,认为找到了要找的代码块,然后跳出这个循环,读取代码块的下一行内容
                if line.strip() == "backend %s" % backend:
                    flag = True
                    continue
                #如果这个flag = True 说明已找到代码块,然后将这行内容加入到空列表fetch_list
                if flag and line.strip():
                    fetch_list.append(line.strip())
                #如果这个flag = True 说明已找到代码块并且又遇到了backend开头的代码,则说明后面的内容已无关,不需要继续循环
                if line.strip().startswith("backend") and flag:
                    break
    
    
            return fetch_list
    
    
    def add_ha(dict_info):
        #获取要添加的 backend值
        backend_title = dict_info.get("backend")
        current_title = "backend %s" % backend_title
        #要添加的backend 的server记录
        server_record_dict = dict_info.get("record")
        current_record = "server %s %s weight %s maxconn %s" %(server_record_dict.get("server"),server_record_dict.get("server"),server_record_dict.get("weight"),server_record_dict.get("maxconn"))
        #获取当前这个backend记录下的server列表
        serverlist = fetch(backend_title)
        #判断这个新增backend 是否存在
        if serverlist:
            #增加server记录
            #打开旧文件,并打开新文件
            with open('ha') as read_obj,open('ha_new',w) as write_obj:
                #设置是否已经读取的标识
                flag = False
                #设置是否写入新记录的标识
                has_write_flage = False
                #读取文件,按行读取
                for line in read_obj:
                    #如果读取行到了要写入的backend行,就设置读取标识为Ture,并跳出本次循环,读取下一行
                    if line.strip() == current_title:
                        flag = True
                        continue
                    #如果已读取到写入行,并且读取到了新的backend记录,就设置
                    if flag and line.strip().startswith("backend"):
                        flag = False
                    if flag:
                        if not has_write_flage:
                            for new_line in serverlist:
                                write_obj.write("%s %s 
    " %(" "*8,new_line))
                        else:
                            has_write_flage=True
                    else:
                        write_obj.write(line)
        else:
            #增加backend并添加记录
            #打开文件写入新记录,同时打开旧文件和新文件
            with open('ha') as read_obj,open('ha_new','w') as write_obj:
                for line in read_obj:
                    write_obj.write(line)
                write_obj.write("
    ")
                write_obj.write(current_title+"
    ")
                write_obj.write("%s %s 
    " %(" "*8,current_record) )
            #os.rename('ha','ha.bak')
            #os.rename('ha_new','ha')
    s = '{"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}'
    read_input=json.loads(s)
    add_ha(read_input)
    
    
    
    
    fetch("www.oldboy.org")
    
    

    lambda  简化函数

    学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示

    #处理简单函数

    #自动return

    n~%v[u_pcmx2~3@z`rj$3ky

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    # powered by  xiaobing
    
    def func1(arg):
    return arg+1
    
    result = func1(100)
    print result
    func2 = lambda a:a+1
    result = func2(1000)
    print result

    map函数

    image

    ee0h%o`dxj(0kg7r3bu_cbc

    l1=[1,2,3]
    l2=[3,4,5]
    l3=[4,5,6]
    print map(lambda a1,a2,a3:a1+a2+a3,l1,l2,l3)
    
    

    filter() 过滤只符合条件的数据

    image

    l4 = [1,44,55,22,11,33]
    print filter(lambda a:a>33,l4)

    reduce()  对于序列内所有元素进行累计操作

    image

    image

    l5 = [1,2,3,4,5,6,7,8,9,10]
    print reduce(lambda a1,a2:a1+a2,l5)

    map 所有元素操作

    filter 过滤,获取指定元素集合

    reduce ,累计操作

    yield

    记住上一次操作,下次在执行时,继续执行

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    # powered by  xiaobing
    '''
    def func1():
        yield 1
        yield 2
        yield 3
    
    for i in func1():
        print i
    '''
    
    def mrange(arg):
        seed = 0
    
        while True:
    
            seed = seed +1
            if seed >10 :
                return
            else:
                yield seed
    
    for i in mrange(10):
        print i

     

    装饰器:

    装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作。

    场景:如果一个python程序已经有500个函数了,但突然老板要求我们要增加登陆验证,只有通过验证的才能执行,而且不要用户更改调用方式。

    qkokzy~_)3y%}@l0@}k_gim

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    # powered by  xiaobing
    
    def wrapper(func):
    if login("xiaobing"):
    return func
    else:
    print '未认证'
    def login(user):
    if user == 'xiaobing':
    return True
    else:
    print 'error name '
    @wrapper
    def home():
    print 'home'
    
    @wrapper
    def shop():
    print 'shop'
    
    def over():
    print 'over'
    
    
    #home = wrapper(home)
    home()
    shop()
  • 相关阅读:
    第 15 章 标签页和工具提示插件
    第 14 章 下拉菜单和滚动监听插件
    第 13 章 模态框插件
    第 12 章 列表组面板和嵌入组件
    第 11 章 进度条媒体对象和 Well 组件
    第 10 章 巨幕页头缩略图和警告框组件
    第 9 章 路径分页标签和徽章组件
    lock()与lockInterruptibly()的区别
    MySQL中Innodb的聚簇索引和非聚簇索引
    MySQL使用可重复读作为默认隔离级别的原因
  • 原文地址:https://www.cnblogs.com/xiaobing1024/p/4969891.html
Copyright © 2011-2022 走看看