index函数

装饰器之基本

匿名 (未验证) 提交于 2019-12-02 23:47:01
为什么要有装饰器? 在学习装饰器之前,一定要了解一个开放封闭原则。软件开发都应该遵循开放封闭原则。 开放封闭原则 对扩展是开放的 对修改是封闭的 为什么说要对扩展是开放的呢? 因为软件开发过程不可能一次性把所有的功能都考虑完全,肯定会有不同的新功能需要不停添加。也就是说需要我们不断地去扩展已经存在代码的功能,这是非常正常的情况。 那为什么说对修改是封闭的呢? 比如说已经上线运行的源代码,比如某个函数内部的代码是不建议直接修改的。因为函数的使用分为两个阶段:函数的定义阶段和函数的调用阶段。因为你不确定这个函数究竟在什么地方被调用了,你如果粗暴的修改了函数内部的源代码,对整个程序造成的影响是不可控的。 总结一下就是:不修改源代码,不修改调用方式,同时还要加上新功能。 什么是装饰器? 装饰器的本质 装饰器本质上可以是任意可调用对象,被装饰的对象也可以是任意可调用对象。 装饰器的功能 在不修改被装饰对象源代码以及调用方式的前提下为它添加新功能。 首先我们先来个例子: import time import random def index(): time.sleep(random.randrange(1, 5)) # 随机sleep几秒 print("欢迎访问首页。") index() 现在需求来了,我需要统计下 index 函数执行耗费的时间。 你可能会很快写出下面的代码: import

函数的嵌套,名称空间以及作用域

匿名 (未验证) 提交于 2019-12-02 23:47:01
引入函数相关的了解部分 命名关键字参数: 在函数定义阶段 写在*与**可变长参数之间的形参 在给命名关键字参数传值的时候 只能用关键字为其传值 在定义阶段 给你感觉好像是z是默认值参数 放在了m这个位置参数的前面了 应该报错 其实z和m都是命名关键字参数 不是默认值参数和位置参数 def func ( x , y = 1 ,* args , z = 3 , m ,** kwargs ): print ( x , y ) print ( args ) print ( z , m ) print ( kwargs ) func ( 1 , 2 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 78 , 8 , 9 , 0 , z = 69 , m = 999 , o = 666999 , l = 999666 ) 函数对象: 函数是第一类对象:函数名指向的值可以被当中参数传递 1.函数名可以被传递 name = 'jason' x = name print ( x ) print ( id ( x )) def func (): print ( 'from func' ) # print(func) print ( id ( func )) f = func func () print ( f ) f () # 其实指向的也是函数func指向函数体代码的内存地址 # 2

前端事件处理函数的形参名必须为某个硬编码值的怪事 - 439

匿名 (未验证) 提交于 2019-12-02 23:43:01
Angular通过ng-click directive注册event handler,经过测试发现形参名必须为$index, 改成其他任意值都不工作。不工作的意思是点击之后,instead of expected index, undefined is always passed into goDetail function. ![clipboard1](https://user-images.githubusercontent.com/5669954/46601043-a1def100-cb1e-11e8-976d-5d188e81c613.png) 通过debug发现通过eval生成的onClick事件处理函数里,发生点击的索引是通过s.$index取出的,这个$index是Angular框架的硬编码,所以开发人员必须迁就这个编码,好霸道啊! ![clipboard2](https://user-images.githubusercontent.com/5669954/46601045-a2778780-cb1e-11e8-88f0-ccc1f8dfe056.png) 文章来源: https://blog.csdn.net/i042416/article/details/92153622

django 路由层 伪静态网页 虚拟环境 视图层

匿名 (未验证) 提交于 2019-12-02 23:40:02
路由层   无名分组   有名分组   反向解析   路由分发   名称空间 伪静态网页 虚拟环境 视图层   JsonResponse   FBV与CBV   文件上传 项目urls.py下面 from app01 import views urlpatterns = [ url(r'^admin/',admin.site.urls), url(r^$',views.home), #页面首页 正则匹配路由后面没有后缀 计时只有 就是只要点击127.0.0.1:8000直接显示的页面 url(r'^test/[0-9]{4}',views.test), #匹配的路由是test/四位数字 然后找到对应的视图函数 url(r'^testadd/$',views.testadd), #开头和结尾精确匹配才能匹配上 然后找到对应的视图函数 url(r'',views.error) #这是请求资源不存在的时候返回的对应的参数 ] #注意:第一个参数是正则表达式,匹配规则按照从上往下依次匹配,匹配到一个之后立即,结束匹配,直接执行对应的视图函数 #网站首页路由 url(r'^$',views.home) #网站资源不存在页面 url(r'',views.error) (将加括号的正则表达式匹配到的内容当做位置参数自动传递给对应的视图函数) url(r^test/(\d+)/',views

js 常见操作

匿名 (未验证) 提交于 2019-12-02 23:39:01
JS基本常识 typeof 返回的7个值 ‘number’/‘string’/‘boolean’/‘object’/‘function’/‘undefined’/‘symbol’ instanceof 用法, constructor js里面的函数名是函数实例的引用地址,可以作为参数和返回值, call/apply改变this,扩充作用域 ES6 新增的数据类型 Symbol 原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名 let sy = Symbol("key1"); // 写法1 let syObject = {}; syObject[sy] = "kk"; console.log(syObject); // {Symbol(key1): "kk"} // 写法2 let syObject = { [sy]: "kk" }; console.log(syObject); // {Symbol(key1): "kk"} // 写法3 let syObject = {}; Object.defineProperty(syObject, sy, {value: "kk"}); console.log(syObject); // {Symbol(key1): "kk"} 常见的用法 在 ES5 使用字符串表示常量,但是用字符串不能保证常量是独特的

Django路由

匿名 (未验证) 提交于 2019-12-02 23:39:01
第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个之后立即匹配,直接执行对应的视图函数 url(r'login', views.login), 如果按上面的形式匹配的话就成模糊匹配了,login的前面没有限制条件,可以输入任意的字符串,login的后面也没有限制条件也是可以输入任意的字符串,这样的话导致只要我路径里面有login这样的关键字无论我输入什么都没有关系,都可以访问的到,怎么解决方式是在前面加^h和后面加$符号,这样的话就限制了,只要能是路径对了才能访问到,如下。 url(r'^login/$', views.login), #然后去写对应的视图函数就可以了 网站首页路由配置: url(r'^$', views.login), #然后去写对应的视图函数就可以了 网页错误路由设置: url(r'',views.error) #然后去写对应的视图函数就可以了 路由层 url(r'^login/([0-9]{4})$', views.login), # ([0-9]{4})匹配4个数字然后进行分组 视图函数层 def login(request,year): # 如果分了一个组的话一定要的对应的视图函数加上一个函数,如果有两个就加上两个参数 print(year) # http://127.0.0.1:8000/login/2019 打印结果就是2019

装饰器

匿名 (未验证) 提交于 2019-12-02 22:11:45
开放封闭原则 : 开放 :对代码的拓展开放的,允许代码扩展、添加新功能。如更新地图,加新枪,等等。 封闭 :对源码的修改是封闭的。 装饰器 : 装饰器:完全遵循开放封闭原则。 装饰器: 在不改变原函数的代码以及调用方式的前提下,为其增加新的功能。 装饰器就是一个函数。 版本一: 写一些代码测试一下index函数的执行效率。 import time def index(): '''有很多代码.....''' time.sleep(2) # 模拟的网络延迟或者代码效率 print('欢迎登录博客园首页') def dariy(): '''有很多代码.....''' time.sleep(3) # 模拟的网络延迟或者代码效率 print('欢迎登录日记页面') # print(time.time()) # 格林威治时间。 # 版本一有问题: 如果测试别人的代码,必须重新复值粘贴。 start_time = time.time() index() end_time = time.time() print(end_time-start_time) #结果: 欢迎登录博客园首页 2.0004754066467285 start_time = time.time() dariy() end_time = time.time() print(end_time-start_time) #结果:

python之padnas学习(四)

匿名 (未验证) 提交于 2019-12-02 22:11:45
A.整数索引: 用整数索引在pandas中 与python的list与truple有一点不同,如果在Series的默认row Index为数字的话,用整数索引会出错,那么我们就应该将index更改掉,改成其它。 1. import numpy as np import pandas as pd obj=pd.Series(np.arange(3.)) print(obj) print(obj[-1]) 看得出来如果这样会报错! 因为在我们创建Series的时候index 为0,1,2 .而我们obj[-1] 表达的意思和它起冲突了,所以程序想知道我们想要什么就困难。我们需要的倒数第一个,而它以为我们是要index为-1的这个数据,所以就会报错。那么我们创建时将index更改掉,那么就可以了! obj1=pd.Series(np.arange(3.),index=['a','b','c']) print(obj1[-1]) 2. 其实也可以这样索引,从输出中看出每个的不同,这里我用的是创建的第一个对象obj,不是obj1 print(obj[:1]) print(obj.loc[:1]) print(obj.iloc[:1]) B.算数与数据对齐: padnas一个特点是,两个相同的数据结构相加,那么他们的索引值对应相加,如果这两个,其中一个有不同的index,那么相加后

MySQL substring_index函数

匿名 (未验证) 提交于 2019-12-02 22:06:11
substring_index(str,delim,count) 例子:str= www.wikibt.com 也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容 如:   substring_index(substring_index(str,'.',-2),'.',1); 来源:博客园 作者: 落日长烟 链接:https://www.cnblogs.com/cyfblogs/p/11406677.html

前端开发JS――数组

匿名 (未验证) 提交于 2019-12-02 21:53:52
25、数组 1)声明数组:   ①构造函数创建数组 var arr = new Array(); var arr = new Array('zhangsan', 'lisi');   ②数组字面量创建数组 var arr = []; var arr = ['zhangsan', 'lisi' ]; //给index为10的位置设置123,空余的位置补undefined arr[10] = 123; //更改数组的长度100,空余的位置补undefined arr.length = 100; //更改数据的长度2,0,1的位置的值保持不变,其余删除 arr.lenght = 2;   ①数组测试 var arr = [1,2,3,4]; //arguments不是一个数组 function test(){ console.log(Array.isArray(arguments)); } test(); //false   ②数组序列化 //数组序列化 4)栈,队列方法 var arr = [2,3,4,5,6,7]; unshift() 在数组的前端添加任意个项,并返回新数组的长度。 var arr = [5,2,4,67,32,64,752,45]; 自定义排序: a.该方法可以接受一个比较函数作为参数,比较函数有两个参数 b.如果第一个参数位于第二个参数之前,返回负数 c