一.装饰器

  什么是装饰器,装饰器就是用于拓展原来函数功能的一种函数

  装饰器就是用来为被装饰对象添加新功能的工具,装饰器本身可以是任意可调用对象,被装饰的对象也可以是任意可调用对象

  装饰器遵循一个关键原则,开放封闭原则:指的是对修改封闭,对扩展开放

  装饰器的实现还必须遵循的两点:

    1.不修改被装饰对象的源代码

    2.不修改被装饰对象的调用方式

  这也就是装饰器的目标,在不修改被装饰对象的源代码和不修改被装饰对象的调用方式的情况下为被装饰对象添加新功能

二.装饰器的使用

  需求:计算被装饰对象运行的时间

  具体实现如下:

  

  此时实现的装饰器被不完美,用户调用的这个index函数是无参无返回值的函数,如果再调用另一个有参有返回值的函数并使用此装饰器时就会出现错误,所以对上述装饰器做出改变,使它具有能够应用到任意函数的功能

  具体实现:

  

三.装饰器的语法糖

  在被装饰对象正上方单独一行写@装饰器名

  python解释器一旦运行@装饰器的名字,就会调用装饰器,然后将被装饰函数的内存地址当作参数传给装饰器,最后将装饰器调用的结果赋值给原函数名

  例如:

  

  index()函数上方的@timmer就是语法糖的实际应用

四.叠加多个装饰器

  对于同一个函数,我们可以为其装饰上多个装饰器,使其拥有更多的功能,此时需要只要的一点无非就是装饰器的执行顺序.

  在解释@语法的时候是自下而上运行的,而执行装饰器内部函数时是自上而下的,通常我们看到的效果就是自上而下运行的

  例如:

  

  执行结果:

  

五.有参装饰器

  有参装饰器是指在装饰器外在写一层函数,来实现函数内需要传入参数时的需求

  具体模板如下:

  

六.函数递归

  函数的递归调用时函数嵌套调用的一种特殊形式,在调用一个函数的过程中又直接或间接调用了该函数本身,称为函数的递归调用

  递归调用必须明确的阶段

    1.回溯:在一次次递归调用的重复过程中,需要注意的是每一次递归调用问题的规模都应该有所减少,直到逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件

    2.递推:往回一层一层推算结果

  需求:使用递归完成二分查找法

  具体实现如下:

  

七.三元表达式

  三元表达式只是为了让代码的可读性变得更好出现的

  三元表达式:条件成立的情况下返回一个值,不成立的情况下返回另一个值

  基本格式:res = 条件成立返回的值 if 条件 else 条件不成立情况下返回的值

Python函数(3)的更多相关文章

  1. python 函数之day3

    一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...

  2. Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  3. Python函数讲解

    Python函数

  4. Python函数信息

    Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...

  5. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  6. Python开发【第四章】:Python函数剖析

    一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...

  7. Python函数解析

    对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...

  8. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  9. Python函数1

    Python 函数命令的使用 想想我们之前数学中学到的函数,首先我们需要定义一个函数,例如f(x)=x, 当x输入任意数的时候,f(x)都能输出和x相等的数值. 那么在Python中是如何实现的呢? ...

  10. python函数传参是传值还是传引用?

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

随机推荐

  1. 51nod1455(dp)

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1455 题意: 中文题诶~ 思路: dp 1 <= n, ...

  2. dedecms有缩略图则显示缩略图,没有则显示随机缩略图

    随着html5以及扁平化等新的设计概念的深入人心,缩略图功能则成了一般网页模版制作不可或缺的一个功能,dedecms默认的的缩略图调用标签[field:imglink/] 或者 [field:litp ...

  3. 数据结构6: 静态链表及C语言实现

    本节继续介绍线性表的另外一种链式表示——静态链表.(前面介绍的链表称为 动态链表 ). 逻辑结构上相邻的数据元素,存储在指定的一块内存空间中,数据元素只允许在这块内存空间中随机存放,这样的存储结构生成 ...

  4. CF1101E Polycarp's New Job

    #include<iostream> #include<cstdio> #include<algorithm> #include<cstdlib> #i ...

  5. BZOJ 2836 魔法树 链剖裸题~~

    正好练练熟练度..(刷水题谋财害命QAQ) #include<cstdio> #include<iostream> #define ll long long #define R ...

  6. CF .Beautiful numbers 区间有多少个数字是可以被它的每一位非零位整除。(数位DP)

    题意:数字满足的条件是该数字可以被它的每一位非零位整除. 分析:大概的思路我是可以想到的 , 但没有想到原来可以这样极限的化简 , 在数位dp 的道路上还很长呀 : 我们都知道数位dp 的套路 , 核 ...

  7. 设置input的样式

    css中的 ” 七层重叠法 ” :即网页内容先后顺序分别为:背景边框,负值z-index,display:block,浮动,display:inline-block,z-index:auto,正值z- ...

  8. Ansible故障

    常见问题一: [root@m01 ~]# ansible  -k 172.16.1.51 -m ping SSH password: [WARNING]: No hosts matched, noth ...

  9. 5.SpringMVC

    1.SpringMVC概述 概述: SpringMVC是基于请求驱动,围绕一个核心Servlet 转发请求到对应的Controller而设计的优点:是一个典型的教科书式的MVC构架,易学易用提供了清晰 ...

  10. 关于Yii2中的MVC中的视图总结(持续更新中)

    一.首先在控制器中,将处理好的数据发送给前台: $this->layout = 'base'; 这里填写视图的模板文件(可以不写这行代码,如果不写,默认为views/layouts/main.p ...