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 \n" %(" "*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("\n")
            write_obj.write(current_title+"\n")
            write_obj.write("%s %s \n" %(" "*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

#!/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函数

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() 过滤只符合条件的数据

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

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

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个函数了,但突然老板要求我们要增加登陆验证,只有通过验证的才能执行,而且不要用户更改调用方式。

#!/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()
时间: 2024-10-10 17:13:57

python之路day4的相关文章

python之路-Day4

本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method. 定义:

新手小白 python之路 Day4 (购物车小程序)

直接上需求: 购物车程序需求启动程序后,让用户输入工资,然后打印商品列表允许用户根据商品编号购买商品用户选择商品后,检查余额是否足够,够就直接扣款,不够就提醒可以随时退出,退出时,打印已购买商品和余额 一个比较简单的程序,使用列表操作写的,写了六个函数 Abnormal() 通过抛出异常来判断输入的编号是否合法 Commodity()取出该商品参数 名称 价格 AddShoppingCart() 添加到购物车 Shopping() 判断工资能否购买该商品,能的话加入到购物车 PrintLibra

Python之路【第十七篇】:Django【进阶篇 】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

七日Python之路--第十二天(Django Web 开发指南)

<Django Web 开发指南>.貌似使用Django1.0版本,基本内容差不多,细读无妨.地址:http://www.jb51.net/books/76079.html (一)第一部分 入门 (1)内置数字工厂函数 int(12.34)会创建一个新的值为12的整数对象,而float(12)则会返回12.0. (2)其他序列操作符 连接(+),复制(*),以及检查是否是成员(in, not in) '**'.join('**')   或  '***%s***%d' % (str, int)

七日Python之路--第九天

众所周知,代码这东西不是看出来的.程序这东西只哟一个标准. 下面找点开源的东西看看,学习一下大婶们的犀利编码...... 推荐一下: 虽然有点老了:http://www.iteye.com/topic/405150,还有就是GitHub上面搜索一下Django就能出来很多,当然还有OSChina.只是有个问题,就是Django版本不同,具体的内容可能会有些不同,但大概还是相同的.领略即可,然后书写自己的代码. 首要的还是官方文档. 看着还是有些难度的.偶然发现一个不错的Blog:http://w

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.

Python之路【第二篇】:Python基础(一)

Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name = 'wupeiqi' print  name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 1 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为假:result = 值2 三.进制 二进制,01 八进

Python之路【第十九篇】:爬虫

Python之路[第十九篇]:爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. Requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. import