python之路 day5

http://www.cnblogs.com/wupeiqi/articles/4963027.html

最近一直忙,这次决定抽出时间,把博客写好。博客好处多多这里就不说了,开写。

今天学习的主要内容是装饰器,递归函数及模块的使用

一、装饰器

装饰器上节课已经学习了,但讲的太快理解的不够透彻,今日老师讲的很详细,记了主要6点

1.装饰器是一个函数,至少两层函数

2.执行auth函数,被装饰的函数作为参数auth(foo)

auth函数的返回值,赋值给被装饰的函数的函数名

 @auth
 def foo():
     pass 

3.动态参数,可以装饰含有多个参数的函数

4.函数的返回值在装饰器中的应用

5.多装饰器 ———》盒子模型,就是函数装饰器套着装饰器

6.至少三层,3层装饰器的如何使用

@w1

1.执行w1函数

2.将w1函数的返回值赋值给被装饰器的函数的函数名

@w2(arg)

1.执行w2函数,得到返回值,ret

2.创建装饰器,@+ret结合 @ret

3.。。。。

1.执行ret函数

2.将ret函数的返回值赋值给被装饰器的函数的函数名

def foo()

http://www.cnblogs.com/wupeiqi/articles/4980620.html

一般装饰器的用法

#过程:

def auth(func):  #2  func = f1
    def inner(): #4 加载inner
        print ‘before‘  #5 执行inner
        return func   #6 返回 原f1,并执行了inner中的验证
return inner  #3 f1=inner

def f1():
    print ‘f1‘

f1 = auth(f1) #1 执行f1的赋值
f1()

下面看下在实际工作中的装饰器应用,basic.py为基础部门缩写的程序调用接口,b1为业务部门调用方法

函数带参数的装饰器使用方法

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# powered by  xiaobing

#装饰器

#过程:
def auth(func):  #2  func = f1
    def inner(): #4 加载inner
        print ‘before‘  #5 执行inner
         func()   #6 执行f1,并执行了inner中的验证
return inner  #3 f1=inner

def auth_arg(func):  #2  func = f1
    def inner(arg): #4 加载inner
        print ‘before‘  #5 执行inner
         func(arg)   #6 执行f1,并执行了inner中的验证
return inner  #3 f1=inner

@auth
def f1():
    print ‘f1‘
@auth_arg
def f2(arg):
    print ‘f2‘,arg

动态参数装饰器

多个参数或者没有参数,使用动态参数可以减少创建多个装饰器的麻烦

def auth(func):  #2  func = f1
    def inner(*args,**kwargs): #4 加载inner
    print ‘before‘  #5 执行inner
    func(*args,**kwargs)   #6 执行f1,并执行了inner中的验证
return inner  #3 f1=inner

@auth
def f1():
    print ‘f1‘
@auth
def f2(arg):
    print ‘f2‘,arg

函数返回值在装饰器中的应用

def auth(func):  #2  func = f1
    def inner(*args,**kwargs): #4 加载inner
        print ‘before‘  #5 执行inner
        print ‘fetch_serverlist‘
         temp = func(*args,**kwargs)   #将fetch_serverlist函数执行结果赋值给temp
        print ‘after‘
        return temp  #装饰器将结果return出去
return inner  #3 f1=inner

@auth
def fetch_serverlist():
    serverlist = [1,2,3,4]
return serverlist

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# powered by  xiaobing
import index
ser_list=index.fetch_serverlist()
print ser_list
print ‘---------‘
index.f2(‘1.1.1.1‘)

登陆验证装饰器

def login():
    name = ‘alex‘
   if name == ‘xiaobing‘:
       return True
   else:
       return False

def auth(func):  #2  func = f1
    def inner(*args,**kwargs): #4 加载inner
        is_login = login()  #5 执行inner
       if not is_login:
           return ‘invild name‘

        print ‘fetch_serverlist‘
         temp = func(*args,**kwargs)   #6 执行f1,并执行了inner中的验证
        print ‘after‘
        return temp
return inner  #3 f1=inner

@auth
def fetch_serverlist():
    serverlist = [1,2,3,4]
return serverlist

@auth
def f2(arg):
    print ‘f2‘,arg

3层装饰器

这个后续注释后贴进来

二、递归函数

def func(arg1,arg2):
    if arg1 == 0:
        print arg1,arg2

     arg3 = arg1 + arg2
    print arg3
    if arg3 > 10000:
        exit()
    func(arg2,arg3)

递归深入,上面的递归没有返回值,所以再下面这个例子里才打印了None

def func(arg1,arg2):
if arg1 == 0:
pass

arg3 = arg1 + arg2

if arg3 > 10000:
return arg3
    func(arg2,arg3)

result = func(0,1)
print result

返回 None

通过增加 return 函数递归返回最终值

def func(arg1,arg2):
if arg1 == 0:
pass

arg3 = arg1 + arg2

if arg3 > 10000:
return arg3
return func(arg2,arg3)

result = func(0,1)
print result

三、模块

#实现某个功能,且是实现

#  存在方式有两种:1. .py文件  2.文件夹

#模块:

1.自己写  第三方或者python自带的模块不能满足的情况下

2.别人写    python之所以这么牛逼,就是因为有大量的第三方库和模块

3.python写        python自带的模块也有很多,os,sys等

作业:

1.os 模块命令执行一遍

2.

解释3层装饰器

def Filter(a1,a2):
    def outer(main_func):
        def wrapper(request,kargs):
            print a1
            main_result = main_func(request,kargs)
            print a2
return main_result
        return wrapper
    return outer
@Filter(f5, f6)
def Index(request,kargs):
    print ‘index‘

时间: 2024-11-14 03:49:32

python之路 day5的相关文章

Python 之路 Day5

  本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的

python之路day5

subprocess模块 铺垫:1.os模块os模块中的system,使用os.system("dir")可直接输出结果,如果将os.system("dir")赋值给一个变量,则这个变量接收的是这个命令执行成功与否,如果非0则执行不成功,0表示执行成功.a=os.popen("dir").read()会保存命令输出结果,并赋值给a,此时print(a)就可以输出到屏幕2.commands模块:只使用于linux 正题:subprocess.run

Python 之路 Day5 - 常用模块学习

本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.p

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 八进