Python函数(3)
一.装饰器
什么是装饰器,装饰器就是用于拓展原来函数功能的一种函数
装饰器就是用来为被装饰对象添加新功能的工具,装饰器本身可以是任意可调用对象,被装饰的对象也可以是任意可调用对象
装饰器遵循一个关键原则,开放封闭原则:指的是对修改封闭,对扩展开放
装饰器的实现还必须遵循的两点:
1.不修改被装饰对象的源代码
2.不修改被装饰对象的调用方式
这也就是装饰器的目标,在不修改被装饰对象的源代码和不修改被装饰对象的调用方式的情况下为被装饰对象添加新功能
二.装饰器的使用
需求:计算被装饰对象运行的时间
具体实现如下:

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

三.装饰器的语法糖
在被装饰对象正上方单独一行写@装饰器名
python解释器一旦运行@装饰器的名字,就会调用装饰器,然后将被装饰函数的内存地址当作参数传给装饰器,最后将装饰器调用的结果赋值给原函数名
例如:

index()函数上方的@timmer就是语法糖的实际应用
四.叠加多个装饰器
对于同一个函数,我们可以为其装饰上多个装饰器,使其拥有更多的功能,此时需要只要的一点无非就是装饰器的执行顺序.
在解释@语法的时候是自下而上运行的,而执行装饰器内部函数时是自上而下的,通常我们看到的效果就是自上而下运行的
例如:

执行结果:

五.有参装饰器
有参装饰器是指在装饰器外在写一层函数,来实现函数内需要传入参数时的需求
具体模板如下:

六.函数递归
函数的递归调用时函数嵌套调用的一种特殊形式,在调用一个函数的过程中又直接或间接调用了该函数本身,称为函数的递归调用
递归调用必须明确的阶段
1.回溯:在一次次递归调用的重复过程中,需要注意的是每一次递归调用问题的规模都应该有所减少,直到逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件
2.递推:往回一层一层推算结果
需求:使用递归完成二分查找法
具体实现如下:

七.三元表达式
三元表达式只是为了让代码的可读性变得更好出现的
三元表达式:条件成立的情况下返回一个值,不成立的情况下返回另一个值
基本格式:res = 条件成立返回的值 if 条件 else 条件不成立情况下返回的值
Python函数(3)的更多相关文章
- python 函数之day3
一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...
- Python函数作用域的查找顺序
函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...
- Python函数讲解
Python函数
- Python函数信息
Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...
- Python函数参数默认值的陷阱和原理深究"
本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...
- Python开发【第四章】:Python函数剖析
一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...
- Python函数解析
对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...
- Python入门笔记(18):Python函数(1):基础部分
一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...
- Python函数1
Python 函数命令的使用 想想我们之前数学中学到的函数,首先我们需要定义一个函数,例如f(x)=x, 当x输入任意数的时候,f(x)都能输出和x相等的数值. 那么在Python中是如何实现的呢? ...
- python函数传参是传值还是传引用?
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
随机推荐
- Index Filter及ICP特性
原文链接:http://hedengcheng.com/?p=577 (一)问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生 ...
- opencv第一课,安装配置
下载工具:本教程以OpenCV3.2.0为例. 解压:本教程解压到D盘,解压的其它地方也是可以的,解压完后得到一个名为opencv目录. 配置系统变量:选择此电脑(计算机)->右键属性选择-&g ...
- [USACO08FEB]酒店Hotel 线段树 BZOJ 1593
题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a ...
- xshell一直连接中断 守护进程
last指令 重新登录使用last指令查看登录情况 pts的理解 who:查看目前有谁在线 pts是所谓的伪终端或虚拟终端,具体表现就是你打开一个终端,这个终端就叫pts/0,如果你再打开一个终端,这 ...
- Codeforces 277E
按边建模,二叉树一条入边两条出边 判断就要用到mcmf的好处了 #include<bits/stdc++.h> using namespace std; const int maxn = ...
- java Sprint boot 学习之一
<properties> <project.build.sourceEncoding>UTF-</project.build.sourceEncoding> < ...
- ZPL打印机公用代码
using System;using System.Collections.Generic;using System.Linq;using System.Web; using System.Text; ...
- k2安装LEDE
固件下载时请用Breed Web 恢复控制台恢复固件,步骤如下:1.到LEDE官方网站下载最新开发版固件2.Web Breed台刷写固件3.将一台能上网的路由器LAN口接至K2 WAN口,等待K2连上 ...
- 修改jupyter notebook的默认浏览器
1.打开命令行 2.输入jupyter notebook --generate-config 3.显示出jupyter_notebook_config.py 文件所在的目录.按文件目录找到这个文件. ...
- 转 windows下安装pycharm并连接Linux的python环境 以及 windows 下notepad ++编辑 linux 的文件
######sample 1:windows下安装pycharm并连接Linux的python环境 https://www.cnblogs.com/junxun/p/8287998.html wind ...