PythonMan(七)

Hello Python :)

细节:
  def fun():
    return "Hello"

  对于这个函数,fun代表这个函数,fun()代表执行这个函数,既然fun代表这个函数名,那fun也可以作为参数,传入另外一个函数。例子:

  

装饰器:
  引言:在AirTech公司中,底层的Coder写的功能需要变更,那么有两种出路:1上层的业务部门Coder更改,这个代价太大。2由底层的Coder进行源码更改。一般来说会是由底层Coder做这件事,那么如果要给100个方法添加一个验证功能,那么One by One的修改方式太Low了,所以,装饰器应运而生。用来装饰函数或类,它可以让被装饰者在执行前或执行后做出某些操作,从而遵循了软件设计的原则——开放封闭原则(对内封闭,对外开放)。

  例子:
    def outer(fun):
      def inner():
        print("源码执行前")
        r = fun()
        print("源码执行后")
        return r
      return inner

    @outer
    def f1():
      print("I am original code!")

    如上所示,outer是装饰器函数,f1是源码中想要修改的函数,现在这个f1函数已经被改装了。调用f1函数,就会输出新内容。OK,这个装饰器做了如下事情:
      1)执行outer函数,并将其下面的函数名当做参数
      2)将outer的返回值重新赋值给f1,即重新定义f1函数

    源函数带参数:
      def outer(fun):
        def inner(a1,a2):
          print("源码执行前")
          r = fun(a1,a2)
          print("源码执行后")
          return r
        return inner

      @outer
      def f1(a1,a2):
        print("I am original code!")

    源函数带N个参数:写一个装饰器,应用不同参数的源函数
      def outer(fun):
        def inner(*args,**kargs):
          print("源码执行前")
          r = fun(*args,**kargs)
          print("源码执行后")
          return r
        return inner

      @outer
      def f1(a1,a2):
        print("I am original code!")

      @outer
      def f2(a3):
        print("f2")

      @outer
      def f3(a4,a5,a6):
        print("3个参数")

    多个装饰器修饰一个函数:
      @outer_1
      @outer_2
      def test():
        print("Hello")

时间: 2024-10-09 18:19:41

PythonMan(七)的相关文章

Hibernate的七种映射关系之七种关联映射(二)

继续上篇博客 七.Hibernate双向一对多关联映射:让多的一端来维护关系. 主要是解决一对多单向关联的缺陷,而不是需求驱动的. 1.在Student.java实体类里添加Classes引用.private Classes classes; 2.Student.hbm.xml里添加many-to-one标签:<many-to-one name="classes" column="classesid"/>.Classes.hbm.xml在例子(六)里的那

Hibernate的七种映射关系之七种关联映射(一)

关联映射就是将关联关系映射到数据库里,在对象模型中就是一个或多个引用. 一.Hibernate多对一关联映射:就是在"多"的一端加外键,指向"一"的一端. 比如多个学生对应一个班级,多个用户对应一个级别等等,都是多对一关系. 1."多"端实体加入引用"一"端实体的变量及getter,setter方法. 比如说多个学生对应一个班级,在学生实体类加入:private Grade grade; 2."多"端配置文

【Beta】 第七次Daily Scrum Meeting

第七次meeting会议 [Beta] 第七次Daily Scrum Meeting 一.本次会议为第七次meeting会议 二.时间:10:00AM-10:20AM 地点:禹州楼 三.会议站立式照片 四.今日任务安排 成员 昨日任务 今日任务 林晓芳 重观界面问题上的美化处理 对现有的东西进行总结,主要是关于此次采用的一些方法.库等等 林清青 与其他组探讨交流进度 对于接下里的任务方向与大家探讨 陈惠 重观界面问题上的美化处理 基于现有的东西进行更深入的完善,例如,如何让闹钟提醒更人性化 郑莹

SpringBoot - 二零一七0421小记

一.SpringBoot使用起来比起SpringMVC更便捷,在注解上的小变化,我记录了下面几个: @Controller + @ResponseBody = SpringMVC中用@RestController来代替前面两个注解,通过这个注解,可以将所有的前端http请求放入SpringBoot的Controller容器中,并返回json格式的数据给前端 @RequestMapping(value={"/hello","/hi"},method=RequestMe

第七课 进程通信

unix_c_07.txt================第七课 进程通信================一.基本概念------------1. 何为进程间通信~~~~~~~~~~~~~~~~~进程间通信(Interprocess Communication, IPC)是指两个,或多个进程之间进行数据交换的过程.2. 进程间通信分类~~~~~~~~~~~~~~~~~1) 简单进程间通信:命令行参数.环境变量.信号.文件.2) 传统进程间通信:管道(fifo/pipe).3) XSI进程间通信:

《七周七数据库》读书分享

# 七周七数据库 读书分享会第一期 2017.02.12 <七周七数据库> - Eric Redmond ## 预备知识 ACID:原子 一致 隔离 持久 CAP原则:一致性 可用性 分区容错性,在分布式环境下,至多只能同时满足其二 "小明,你的数据库作业呢?""我可以今天提交一半的作业,或者明天提交全部的作业,但无法在今天提交全部的作业.""...小明你给我滚出去!" 小知识点: * 原子性:原子性代表中间状态的透明性,想象从a账户

Java 第七章 类和对象 笔记

一.对象的特征--类的属性 每个对象的每个属性都有特定的值 对象的操作--类的方法 二.封装:对象同时具有属性和方法两项特性.     对象的属性和方法通常被封装在一起,共同体现事物的特性,     二者相辅相成,不能分割. 三.类和对象的区别:     类:抽象的概念,是一个模子,确定了对象的属性和方法.    对象:能够看得见摸得着的实物.具有静态和动态特征. 四.定义类的步骤:     1.定义类名      2.定义类的属性 访问修饰符 属性类型 属性名称=默认值:     3.定义类的

TCP/IP四层模型和OSI七层模型的概念

转:http://blog.csdn.net/superjunjin/article/details/7841099/ TCP/IP四层模型 TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层).   TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传

第七章

第七章 控制发光二极管. 尽管linux 驱动直接和硬件打交道,但并不是linux驱动直接向硬件中的内存写数据,而是与本机的i/o内存进行交互.所谓I/O内存是通过各种接口(PCI, USB.蓝牙以太网等)连接到主机的硬件在主机的内存映射.Linux内核提供了多个与I/O内存交互的函数.Linux内核的内存管理模块负责同步I/O内存与硬件的数据. 每一个连接Linux 的硬件在I/O内存中都会有映射首地址.在使用ioread 32.ioread32等函数读写I/O内存时需要指定这些首地址.Led