返回值

day11 python之函数装饰器

送分小仙女□ 提交于 2020-02-24 16:07:38
一,什么是装饰器? 装饰器本质上就是一个python函数,他可以让其他函数在 不需要做任何代码变动的前提下,增加额外的功能 ,装饰器的 返回值也是一个函数对象 。 装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。 二,装饰器的形成过程。 现在我有一个需求,我想让你测试这个函数的执行时间,在不改变这个函数代码的情况下: import time def func1(): print('in func1') def timer(func): start = time.time() func() print(time.time() - start) timer(func1) 上面的代码输出了func1()函数的运行时间,但是我们计算func1()函数的运行时间时,需要调用的是timer(func)函数 有没有办法直接调用func1()函数就能计算func1()函数运行时间呢? 如果让 func1 = timer 呢? 可是timer()函数需要一个函数参数,而我们的 func1 是不需要参数的,显然不行 那该怎么实现呢? 换个思路, timer不能赋值给func1,但是我们可以给timer指定一个函数返回值,将他赋值给func1 那么执行 func1() 时就相当于执行 这个用来赋值的函数.而这个函数在timer()函数内,可以调用timer()函数的参数func

day 11 - 1 装饰器

旧城冷巷雨未停 提交于 2020-02-24 16:04:19
装饰器 装饰器形成的过程:最简单的装饰器——有返回值的——有一个参数——万能参数 装饰器的作用:不想修改函数的调用方式 但是还想在原来的函数前后添加功能 原则:开放封闭原则 语法糖:@装饰器函数名 装饰器的固定模式 原则:开放封闭原则 开放:对扩展是开放的 封闭:对修改是封闭的 首先我们来逐步实现这么一个功能吧 计算代码运行的时间 #先来看下需要的组件 import time #time 模块 time.time()   #获取当前时间 time.sleep(5)   #让程序睡眠多少时间 print(time.time()) #来试下 我们来写一个可以计算时间的函数 def func(): start=time.time() time.sleep(0.1) #时间太短 系统会显示 0.0,所以我们让他休眠 0.1s print("计算程序执行的时间") end=time.time() print(end-start) func() 但是这里有一个问题:如果要计算很多函数的运行时间,那不是要在函数中都加上几行计算的代码,这显然是不可行的,一般写好的没问题的函数,是不会去对它进行修改,而且还很麻烦 所以这里我们写一个计算时间的函数独立出来 def times(f): start=time.time() time.sleep(0.1) f() end=time.time() print

python之路——初识函数

若如初见. 提交于 2020-02-24 06:32:28
python之路——初识函数 阅读目录   为什么要用函数   函数的定义与调用   函数的返回值   函数的参数   本章小结 为什么要用函数 现在有一个需求,让你计算'hello world'的长度,你怎么计算? s1='hello world' length=0 for i in s1: length+=1 print(length) 好了,功能实现了,非常完美。然后现在又有了一个需求,要计算另外一个字符串的长度,"hello eva". 于是,这个时候你的代码就变成了这样: s1 = "hello world" length = 0 for i in s1: length = length+1 print(length) s2 = "hello eva" length = 0 for i in s2: length = length+1 print(length) 这样确实可以实现len方法的效果,但是总感觉不是那么完美?为什么呢? 首先,之前只要我们执行len方法就可以直接拿到一个字符串的长度了,现在为了实现相同的功能我们把相同的代码写了好多遍 —— 代码冗余 其次,之前我们只写两句话读起来也很简单,一看就知道这两句代码是在计算长度,但是刚刚的代码却不那么容易读懂 —— 可读性差 print(len(s1)) print(len(s2)) 我们就想啊

JavaScript内置对象--Array

♀尐吖头ヾ 提交于 2020-02-24 05:03:42
JavaScript提供了内部(或”内置”)对象。它们是Array、Boolean、 Date、 Error、 Function、 Global、 JSON、 Math、 Number、 Object、 RegExp 和String 共12个常用对象。 JavaScript内置的String对象就是字符串对象。 一、数组的创建 字面量方式 (json方式) var arr1 = [ ] ; //创建一个空数组 var arr2 = [ 5 ] ; //创建一个具有单个元素的数组 var arr3 = [ 5 , 6 , 7 ] ; //创建一个具有多个元素的数组` 构造函数方式 var arr1 = new Array ( ) ; //创建一个空数组 var arr2 = new Array ( 5 ) ; //创建一个长度为5,值为空的数组 var arr3 = new Array ( 5 , 6 , 7 ) ; //创建一个具有多个元素的数组 数组的遍历 var arr = [ "a" , "b" , "c" , "d" ] ; for ( var i = 0 ; i < arr . length ; i ++ ) { console . log ( i ) ; //0 1 2 3 console . log ( arr [ i ] ) ; //a b c d } for

重载和重写的区别

吃可爱长大的小学妹 提交于 2020-02-24 05:03:30
重载和重写的区别 1、重载(Overloading) (1)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时 存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。 (2)Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具 有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型 来决定具体使用哪个方法, 这就是多态性。 (3)重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同 也可以不相同。无法以返回型别作为重载函数的区分标准。 下面是重载的例子: package c04.answer;//这是包名 //这是这个程序的第一种编程方法,在main方法中先创建一个Dog类实例,然后在Dog 类的构造方法中利用this关键字调用不同的bark方法。不同的重载方法bark是根据其参 数类型的不同而区分的。 //注意:除构造器以外,编译器禁止在其他任何地方中调用构造器。 package c04.answer; public class Dog { Dog() { this.bark(); } void bark()//bark()方法是重载方法 { System.out.println("no barking!"); this.bark("female", 3.4); }

Django----中间件详解

假装没事ソ 提交于 2020-02-24 02:09:06
在http请求 到达视图函数之前 和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法。 中间件的执行流程 1、执行完所有的request方法 到达视图函数。 2、执行中间件的其他方法 3、经过所有response方法 返回客户端。 注意:如果在其中1个中间件里 request方法里 return了值,就会执行当前中间件的response方法,返回给用户 然后 报错。。不会再执行下一个中间件。 自定义中间件 1.在project下随便创建一个py文件 from django.utils.deprecation import MiddlewareMixin class Middle1(MiddlewareMixin): def process_request(self,request): print("来了") def process_response(self, request,response): print('走了') 2、在setings文件中 注册这个 py文件 django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django

java lambda 表达式 -----

拟墨画扇 提交于 2020-02-23 19:16:54
1 不同于java的面向对象思想,函数表达式把没必要的过程全部省去,看重最终的结果, 对于多线程接口Runnable ,只有一个方法: 2 无参无返回值。 3 对于自定义加法接口:有参有返回值 4 自定义方法:无参无返回值 5 排序比较方法:Comparator接口中的compare方法 :有参有返回值 注意: 接口的方法中如果只有一句话,大括号可以省去,分号“;”也要省去。 并且 如果有参数,参数类型也可以省去,return 也可以省去 来源: CSDN 作者: java_utf8 链接: https://blog.csdn.net/java_utf8/article/details/104458371

php判断变量类型常用方法

北慕城南 提交于 2020-02-22 23:09:16
php 判断变量类型常用的函数主要有下列几个: gettype()、is_array()、is_bool()、is_float()、is_double()、is_integer()、is_null()、is_numeric()、is_object()、is_resource()、is_scalar() 和 is_string() 现在让我们了解下他们的具体的使用方法 gettype() 返回 PHP 变量的类型,返回的字符串的可能值为以下几种: boolean(从 PHP 4 起) integer double(由于历史原因,如果是 float 则返回double,而不是float) string array object resource(从 PHP 4 起) NULL(从 PHP 4 起) user function(只用于 PHP 3,现已停用) unknown type 注意: 对于 PHP 4及以上,你应该使用 function_exists() 和 method_exists() 取代先前将 gettype() 作用于函数的用法 。 这个 函数 大家应该很少用,其实对于这个函数也尽量不要用。php手册的建议是:不要使用 gettype() 来测试某种类型,因为其返回的字符串在未来的版本中可能需要改变。此外,由于包含了字符串的比较,它的运行也是较慢的,所以尽量使用 is_

C# Action 委托

时光毁灭记忆、已成空白 提交于 2020-02-22 17:28:36
本文转自: https://www.cnblogs.com/dotnet261010/p/10108791.html 1、什么是Action泛型委托 Action<T>是.NET Framework内置的泛型委托,可以使用Action<T>委托以参数形式传递方法,而不用显示声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能有返回值。 2、Action委托定义 查看Action的定义: using System.Runtime.CompilerServices; namespace System { // // 摘要: // 封装一个方法,该方法不具有参数且不返回值。 [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")] public delegate void Action(); } 你会发现,Action其实就是没有返回值的delegate。 3、示例 Action委托至少0个参数,至多16个参数,无返回值。 Action 表示无参,无返回值的委托。 Action<int,string> 表示有传入参数int,string无返回值的委托。 Action<int

Python基础知识总结笔记(四)函数

眉间皱痕 提交于 2020-02-22 14:37:48
Python基础知识总结笔记(四)函数 python中的函数 函数中的参数 变量作用域 偏函数PFA 递归函数 高阶函数 BIFs中的高阶函数 匿名函数lambda 闭包Closure 装饰器Decorator 函数式编程Functional Programming 每天都有程序员定时讲解Python技术,分享一些学习的方法和需要留意的小细节,要资料加 624440745 1. python中的函数 ■ 函数的意义: ■1.对输入进行变换映射后输出 ,可以进行反复调用。以函数名对代码块进行封装 ■2.过程化 VS 结构化 ■ 函数的创建及结构: ■定义函数名:def foo1(num): ■参数:num ■函数体 ■返回 □有无返回: 有返回值:return返回的是对象,(如返回对象数>1返回元组)。且返回的为最后的一个return值。 无返回值 :无返回值或者return后为空。 print可以有很多,但是return只有一个。 □return与yield的区别: print:不返回任何的函数 return 结束函数,返回值,当函数被调用时,遇到结尾或return时就准备结束了。只显示最后一个return的值。 yield:丢出一个数,对象变成了生成器–记录当前运行到哪里了。 #函数的意义 n=5 for i in range(n): print(i) #