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()
  • 相关阅读:
    新一代MQ apache pulsar的架构与核心概念
    Flutter使用fluwx实现微信分享
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
    Codeforces 873F Forbidden Indices 字符串 SAM/(SA+单调栈)
    Codeforces 873E Awards For Contestants ST表
  • 原文地址:https://www.cnblogs.com/xiaobing1024/p/4969891.html
Copyright © 2011-2022 走看看