wrapper

Python之装饰器的实例

北城余情 提交于 2021-01-09 05:55:35
1.1装饰器的应用:参数类型检查 函数参数的检查,一定是在函数外 函数应该作为参数,传入到检查函数中 检查函数拿到函数传入的实际参数,与形参声明对比 __annotations__属性是一个字典,其中包括返回值类型的声明。假设要做位置参数的判断,无法和字典中的声明对应。使用inspect模块 inspect模块:提供获取对象信息的函数,可以检查函数和类、类型检查 from functools import wraps import inspect def check(fn): @wraps(fn) def _check(*args,** kwargs): sig = inspect.signature(fn) params = sig.parameters # 传入的参数是有序的字典,标识的是函数的签名 keys = list(params.keys()) # 把形参的参数从字典中提取出来,利用list函数迭代出来,在利用索引取值 values = list(params.values()) # 把形参的参数注解的类型拿到,用list函数迭代,在利用索引取值 for k,v in enumerate(args): # args实参迭代,k可以利用在索引取值上 print ( ' k={},v={} ' .format(k,v)) if isinstance(v,values[k]

微信小程序开发实战-天气小程序

拜拜、爱过 提交于 2021-01-07 07:52:30
园龄6年8个月了,还一篇文章都没写过,惭愧! 最近周末做了个天气预报小程序,在这里整理一下开发过程和注意点,给对小程序开发感兴趣的伙伴们提供点参考。 废话不多说,先上图最终效果: 下面进入正文: 第一步 准备 0. 把微信小程序开发文档过一遍。 https://developers.weixin.qq.com/miniprogram/dev/framework/ 作为程序员,就要从0开始计数。 1. 下载安装微信开发者工具( https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html ),这个就不多说了。 2. 设计产品原型,我们要把产品做成什么样。 先晒一下第一版的原型,比较丑,见谅。(第一版丑和简陋先忍,后面可以迭代) 下面的代码也会是第一版,功能没有上面扫码看到的那么多。我是希望能从0开始写起,然后把每次迭代也写上,让大家能看到一个项目是怎么从第一版最简陋的功能,逐步功能丰富和完善。这才是一个项目真正的开发过程。一开始就做的很复杂很完备的,往往容易难产。 然后我们接口需要向页面提供的信息就明确了:位置名、实时温度、天气文字、空气文字、今日日期、今日天气状况。 第二步 启程 开发小程序前端页面 【10点20了,终于下班到家,有时间继续补充了】 0.新建项目 打开微信开发者工具,创建一个新项目

Dubbo-go 源码笔记(一)Server 端开启服务过程

南楼画角 提交于 2021-01-07 05:00:45
简介: 随着微服务架构的流行,许多高性能 rpc 框架应运而生,由阿里开源的 dubbo 框架 go 语言版本的 dubbo-go 也成为了众多开发者不错的选择。本文将介绍 dubbo-go 框架的基本使用方法,以及从 export 调用链的角度进行 server 端源码导读,希望能引导读者进一步认识这款框架。 作者 | 李志信 dubbo-go 源码 : https://github.com/apache/dubbo-go 导读 :随着微服务架构的流行,许多高性能 rpc 框架应运而生,由阿里开源的 dubbo 框架 go 语言版本的 dubbo-go 也成为了众多开发者不错的选择。本文将介绍 dubbo-go 框架的基本使用方法,以及从 export 调用链的角度进行 server 端源码导读,希望能引导读者进一步认识这款框架。下周将发表本文的姊妹篇:《从 client 端源码导读 dubbo-go 框架》。 当拿到一款框架之后,一种不错的源码阅读方式大致如下:从运行最基础的 helloworld demo 源码开始 —> 再查看配置文件 —> 开启各种依赖服务(比如zk、consul) —> 开启服务端 —> 再到通过 client 调用服务端 —> 打印完整请求日志和回包。调用成功之后,再根据框架的设计模型,从配置文件解析开始,自顶向下递阅读整个框架的调用栈。 对于 C/S

图集 | 川西环线

为君一笑 提交于 2021-01-06 03:03:12
温馨提示:因微信中图片被压缩,请通过文末的 “阅读原文” 获取高清图片 ; 国庆 和小伙伴一 起 参加川西线路打卡之行,从成都出发,途径色达、理塘、甘孜,随后前往稻城亚丁,之后途径康定、雅安后回到成都,历时 9 天之久。这是一次让人铭记的旅游,认识了很多 nice 的人、见识过很多以前未曾见识过人文风景。将此次旅游中的若干风景照片、视频整理于此。 2019.09.28 杭州 - 成都 早晨从杭州出发前的晨曦 成都东站夜景 成都东站附近的高架桥 2 019.09.29 成都 | 都江堰&青城山 位于成都都江堰景区玉垒山的最高点,是都江堰景区的最高处 在玉垒阁上远眺都江堰 深淘滩,低作堰”,是闻名世界的都江堰水利工程的六字治水真经,内涵丰富 坐落在二王庙旁边的“玉垒仙都”雕刻牌坊,拥有三重飞檐 安澜索桥入口的亭子 南 桥位于都江堰宝瓶口下侧的岷江内江上, 是南街与复兴街之间的一座雄伟壮丽的廊式古桥,原名为“普济桥” 下午前去青城山景区,景区前方有一匾额上写着“西蜀第一山”, 楹联为“看三十六峰雨晴浓淡无章画; 有百零八景行吟顾步少陵诗” 青城山正门,门上悬挂着 “青城天下幽”匾额 坐索道上青城山,石阶引向第一个观就是慈云阁 山门上悬挂三匾,中间是“慈云阁”,两旁分别是“普度众生”及“国泰民安”,劵门前有鼎式香炉 再往上走就是上清宫,上清宫是历代天师举行重大宗教活动的主要场所

学习java的第六天

北慕城南 提交于 2021-01-04 09:36:10
学习java的第六天 object类的使用 主要要记得就是里面的两个方法 一个是toString 一个是equals equals与 == 的比较 == 两边是基本数据类型比大小 ==引用数据类型是比较地址值 equals方法在没有重写之前比较的是地址 并且里面参数只能 是一个类 对类File、String、Date及包装类 是比较内容原因 重写了equals方法 toString toString()方法在Object类中定义,其返回值是String类型,返回类名和它 的引用地址 在进行String与其它类型数据的连接操作时,自动调用toString()方法 Date now=new Date(); System.out.println(“now=”+now); 相当于 System.out.println(“now=”+now.toString()); 可以根据需要在用户自定义类型中重写toString()方法 如String 类重写了toString()方法,返回字符串的值。 s1=“hello”; System.out.println(s1); //相当于System.out.println(s1.toString()); 基本类型数据转换为String类型时,调用了对应包装类的toString()方法 int a=10; System.out.println(“a=”

MyBatis-Plus条件构造器

流过昼夜 提交于 2021-01-01 12:33:13
条件构造器 wapper介绍 : Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法 AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件 AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。 LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper LambdaUpdateWrapper : Lambda 更新封装Wrapper QueryWrapper : Entity 对象封装操作类,不是用lambda语法 UpdateWrapper : Update 条件封装,用于Entity对象更新操作 mybatis-plus条件构造器简介 mybatis-plus提供了AbstractWrapper抽象类,提供了很多sql语法支持的方法,比如模糊查询,比较,区间,分组查询,排序,判断空等等,方便我们用面向对象的方式去实现sql语句。 AbstractWrapper 说明: QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件

老大爷都能看懂的RecyclerView动画原理

孤人 提交于 2020-12-30 21:05:55
如何阅读本篇文章 本文主要讲解RecyclerView Layout变化触发动画执行的原理。前半部分偏重原理和代码的讲解,后半部分通过图文结合场景讲解各个阶段的执行过程。 建议先粗略阅读前半部分的原理和代码篇,做到心中有概念,带着理论知识去阅读后半部分的场景篇。最后结合全文学到的知识,带着问题去阅读源码,效果会更好。 原理篇 1. Adapter的notify方法 用过RecyclerView的同学大概都应该知道Adapter有几个notify相关的方法,它们分别是: notifyDataSetChanged() notifyItemChanged(int) notifyItemInserted(int) notifyItemRemoved(int) notifyItemRangeChanged(int, int) notifyItemRangeInserted(int, int) notifyItemRangeRemoved(int, int) notifyItemMoved(int, int) 稍微有点开发经验的同学都知道,notifyDataSetChanged()方法比其它的几个方法更重量级一点,它会导致整个列表刷新,其它几个方法则不会。有更多开发经验的同学可能还知道notifyDataSetChanged()方法不会触发RecyclerView的动画机制

gradle版本和插件以及buildToolsVersion之间的对应关系

你说的曾经没有我的故事 提交于 2020-12-26 15:04:43
Gradle Plugin Version: Gradle 插件版本 Gradle Version: Gradle发行版本 Android SDK Build Tools Version:Android SDK 构建工具版本 一 概念 1.Gradle Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置 位置:项目主目录 gradle 文件夹->wrapper->gradle-wrapper.properties #Sat Apr 13 17:00:17 CST 2019 distributionBase = GRADLE_USER_HOME distributionPath = wrapper / dists zipStoreBase = GRADLE_USER_HOME zipStorePath = wrapper / dists distributionUrl = https\ : / / services . gradle . org / distributions / gradle - 4.4 - all . zip 2.AndroidStudio Gradle Plugin插件

去掉el-table表格的默认样式,表头颜色,hover的效果

倾然丶 夕夏残阳落幕 提交于 2020-12-26 05:44:54
!important不起作用, scoped 和/deep/使用 在需要改的地方的前边一定要加上 .el-table <style scoped> /deep/ .el-table th{ background-color: white ; } /* 表尾 */ /deep/ .el-table .el-table__footer-wrapper tbody td { background-color: white; } /* 表头 */ /deep/ .el-table__header-wrapper thead div{ background-color: white ; } /* hover效果 */ /deep/ .el-table tbody tr:hover>td { background-color:#ffffff } <style> 来源: oschina 链接: https://my.oschina.net/u/4318033/blog/3334841

梁老师小课堂|谈谈模板方法模式

|▌冷眼眸甩不掉的悲伤 提交于 2020-12-25 05:54:49
众多设计模式中,我觉得模板方法模式是很好理解,也很值得深入研究的技巧。定义如下,在一个包含多个步骤的业务框架中,大部分步骤是固定不变,并且适用于多种业务场景,可变的步骤则留给子类独立实现,从而分离了稳定和变化。 使用这种模式稍不留心,就会出现一些奇奇怪怪的问题。第一个是多个抽象方法会修改相同的变量,方法间出现强关联,第二个问题是定义了过多的抽象方法。后者正是今天想和你聊的话题,跟着我的步伐往下看吧。 一、为什么会出现这种问题? 我认为是这样的,产品经理从业务角度告诉我们,这个功能涉及到哪些步骤,每个步骤需要完成哪些事,然后我们就照搬概念将其转换成代码,考虑到有些步骤会涉及到多个实现,于是留了很多扩展方法。 不久后,新的业务需要复用这些流程,需要步骤1\2\3,但是不需要步骤4\5,甚至看不懂步骤4\5是做什么的,也不知道什么条件下会被调用,原有设计就显得不够简单了。 怎么理解这里说的简单呢?简单是站在人的角度来看的。假如,定义者和实现者来自两个不同的团队,实现者阅读文档后还需要定义者解释,才知道怎样实现抽象方法是正确的,那它就是复杂的。这个是我的真实感受,之前我在做中台通用能力建设,通过扩展点对外赋能时,思考最多的就是如何让第三方快速理解并上手。 总结一下,生搬硬套需求文档,让执行顺序完整地反映在代码结构中,会导致模板方法模式出现了过多的抽象方法。 二、出现了怎么办?