问: 我有一个调用自己的函数: def get_input(): my_var = input('Enter "a" or "b": ') if my_var !...: Type "a" or "b": a got input: a 但是,如果我输入别的东西,然后输入 "a" 或 "b",我会得到这样的结果: Type "a" or "b": purple You...Type "a" or "b": a got input: None 我不明白为什么 get_input() 函数返回的是 None,因为它本应只返回 my_var。这个 None 是从哪里来的?...我该如何修复我的函数呢? 答: 它返回 None 是因为当你递归调用它时: if my_var != "a" and my_var !...因此,尽管递归确实发生了,但返回值却被丢弃了,然后你会从函数末尾退出。在函数末尾退出意味着 Python 会隐式地返回 None,就像下面这样: >>> def f(x): ...
今天是周末,给各位分享一篇设计相关的文章。对用户来说,产品的“重设计”意味着自己需要付出一定的成本进行“重学习”,因此大部分的用户更愿意安于现状。...image.png 为什么人类会从本能上抵触变化呢?我大胆推测有两个原因:其一,环境由熟悉转向陌生,意味着在危急时刻将很难做到因地制宜;其二,要想适应新的环境,必须克服惯性并付出一定的努力。...人们需要一定的时间才能完全理解并接受变化本身的意义。作为数字产品的开发者,我们需要帮助用户尽可能快速且平稳地跨越抵触变化的鸿沟。...最近,我参与了 Outlook 在移动端浏览器体验上的重设计工作,在本文中,我会整理出我们微软产品团队在此次重设计中采取的措施,同时也进行回顾性的学习。 由于工作需要,用户会使用我们的产品。...image.png 第 2 阶段: 变化之后 与建立正确的引导过程一样重要的,是在后续过程中对引导效果的观察。从总体上来说,低数量的负面反馈是一个不错的迹象。 继续往下深挖对我们也是有帮助的。
哈喽,我是 树酱。...今天聊一聊关于我跟Json schema的一些交集,顺便给大家重新梳理下今日这个主角的概念及当下主要的一些应用场景 1.什么是JSON Schema 相信前端童鞋,对JSON应该都很熟悉。...JSON (JavaScript Object Notation) 缩写,JSON 是一种数据格式,具有简洁、可读性高、支持广泛的特点JSON。通过JSON 我们可以灵活地来表示任意复杂的数据结构。...你看到上方的JSON Schema例子,很明显数据类型的定义可以方便我们用来做数据校验 结合上方的demo,我们通过这个在线校验工具来演示一波 上图,JSON报出了不合法的提示,为什么呢?...是因为我在左侧定义的birthday字段需要为date格式,而我们右侧定义的JSON数据中字段数值并不是date格式,所以校验出异常 再补充一个:前后端先把数据接口约定好,等后端把接口输出完毕,直接用JSON
当然了,bad case分析这块我也聊了很多,多分析能发现其中的端倪,知道模型需要什么,该怎么处理,我再放一遍在这里,希望能好好阅读。...至于训练集,首先要说的是训练集内部的问题,其实还是数据的数量和质量问题: 学习资料和练习题要足够,才能让模型学得会,学得好。 数据分布问题,不能偏科,各个类型的数据最好都能覆盖。...这里背后的逻辑可以参考我这篇文章: 心法利器[45] | 模型需要的信息提供够了吗 训练问题 针对训练问题,其实也就是一个经验的问题了,多弄其实问题就会小很多,大家可以多去看各个论文使用的超参,一般调的差不多基本都不会有的...首先要做基线,一般是考虑折腾这个CLS,而在下游加插件的时候,也要注意不能让BERT模型被学走,注意调整学习率、trainable,同时也可以结合MLM任务来维持模型的稳定,平衡BERT原有的基础知识与实际场景问题的差距...而文章本身的输出并非是按照这个思路走,而是从一些大家经常问的点深入来讨论,希望能从我的角度和风格来思考和回答问题。
但如果有一天,你发现我写了这样一个类: class People: def say(self): print(f'我叫做:{self.name}') def __new...__(self): raise Exception('不能实例化这个类') kingname = People() kingname.say() 一旦初始化就会报错,如下图所示:...一个不能被初始化的类,有什么用? 这就要引入我们今天讨论的一种设计模式——混入(Mixins)。 Python 由于多继承的原因,可能会出现钻石继承[1]又叫菱形继承。...显然,这样写会报错,因为两个类的实例是不能比较大小的: 但在现实生活中,当我们说 某人比另一个人大时,实际上是指的某人的年龄比另一人年龄大。...混入: 不能包含状态(实例变量)。 包含一个或多个非抽象方法。 参考资料 [1]钻石继承: https://en.wikipedia.org/wiki/Multiple_inheritance
题图摄于广州番禺 本文记录一次关于隐私保护的事情。 近日,我去了趟某运营商的营业厅,开通一个新的手机号。入门时,扫了场所码,显示的是绿码。...营业员在帮我办理业务时,除了拍照我的身份证件外,还说要留存我的健康码和行程码。...这个要求就有点奇怪了,尽管我两个码都是正常,但作为从事隐私信息保护工作的我,对涉及自己隐私数据的事情,觉得还是要和他掰斥一下。 首先,我问他为什么需要留存我的两码?...因为我进营业厅的时候扫过各种健康码的,我于是给他扣了个大帽子:过度防疫(另一个类似的帽子是“层层加码”)。...因为我清楚地记得,行程码在使用时,用户只授权了用于防疫目的。至于其他目的,对不起,我没授权你用,就算你的理由多么冠冕堂皇,也不能随便给你。 至于他们留存我的健康码,更连个正当的理由都没有。
曾几何时,我觉得很兴奋,在如此短的时间内就可以做到这样的高度,让我十分的开心。开发出的内容也完全符合校内应用的需求。我变成了一个别人眼中的“大师”。 但事情并没有往想象的地方发展。...但当有一天在讲授开发经验的时候,当我当着大家的面真的静下心来写我需要展示的一个类的时候,以前用了这么多的框架,我发现在这么多人面前的我已经几乎写不出来一个正确的类了!!...于是我又开始新的一轮学习,看大量的书籍,有一天我重新打开Yii框架在我当时看起来很难理解的代码的时候我发现:我居然有点明白它的工作原理,知道整体的架构了!...如今的框架图.png 之后的工作就是让框架更加的丰满,不敢说比得上一些主流的框架,说实话根本不能够和他们相比,无论从结构、思考还是思考上,编出主流框架的他们才是真正的大师。...js框架 最后说一下我认为的好处: 1、对整体架构的思考 2、提高自己的创造力 3、提高自己独立思考的能力 4、提高自己阅读别人代码的能力 5、用到和认识了大量的编程语言内置函数 下面是我的一点小建议:
如果你的服务请求量并不大,但 Redis 实例的 CPU 使用率很高,很有可能是使用了复杂度高的命令导致的。...同样的,当删除这个 Key 的数据时,释放内存也会耗时比较久。 你需要检查你的业务代码,是否存在写入大 Key 的情况,需要评估写入数据量的大小,业务层应该避免一个 Key 存入过大的数据量。...所以在部署 Redis 进程时,如果需要开启 RDB 和 AOF 重写机制,一定不能进行 CPU 绑定操作!...下面就针对这两块,分享一下我认为比较合理的 Redis 使用和运维方法,不一定最全面,也可能与你使用 Redis 的方法不同,但以下这些方法都是我在踩坑之后总结的实际经验,供你参考。...总结 以上就是我在使用 Redis 和开发 Redis 相关中间件时,总结出来 Redis 推荐的实践方法,以上提出的这些方面,都或多或少在实际使用中遇到过。
人脸识别总感觉特别高深,但是因为Python中已经有很多前辈写好了一些库,可以直接调用,大大降低了人脸识别的难度。...之前在网上看到陈晓眼里只有陈妍希的照片,特别喜欢,想自己用python中的dlib人脸识别库实现这个功能。 所以到网上找了下资料,成功用python实现了这个功能,现在把实现方法分享给大家。...三、标记人脸中68个点的位置 我用一张肖战的硬照,标记五官中68个点的位置,方便大家找到眼睛的位置。...根据点的位置和计算好的眼球大小,把一个人的照片填充到另一个人的眼睛中去,营造我的眼里只有你的效果。...p.save("new_black_pg_img.png") 如需函数中的API,请参考文末参考文献中的第一篇文章。
看完视频你就明白为什么不能出门了,千万不要放松警惕!(@Ele实验室 ) 在家憋了一段时间的人们,耐心也在一点一点消磨中。很多人已经忍不住开始想蠢蠢欲动了。...他们总有一套自己的理论:我们城市才一点确诊病人,而且在距离我们很远的地方,我就出去一会儿,哪有那么巧合,就感染上了。没事儿的!大街上都没人,我戴着口罩又没事。...疫情的防控工作的防控点或者是成功与否主要在于感染人员是否戴口罩、医院里的隔离床位(或者是自我隔离位)、人口的流动。...因此通过这一次的疫情防控,为了你、我、他,请以后感冒发烧生病之后,能够带个口罩,减少传染率。因为不知道你体内的这一个病毒威力如何。 ?...因此一个疫情发生,必须依靠强大有力的政府比如中国,和广大的医院医生护士等伟大的工作者们的努力,所以平时请尽量的尊重他们的这个职业。 ?
比较AsyncTask、Volley、Retrofit三者的请求时间 使用 单次请求 7个请求 25个请求 AsyncTask 941ms 4539ms 13957ms Volley 560ms 2202ms...,这里表示需要查询的字段为ip //ResponseBody是Retrofit自带的返回类, @GET("http://ip.taobao.com/service/getIpInfo.php...map,注解用@QueryMap @GET("url") Call getInfo(@QueryMap Map params); //post的请求参数是放在请求体中的...,就是body内(详见http请求),这是以json格式传递参数的 @POST("url") @FormUrlEncoded Call doLogin(@Body User...password") String password); //请求头更改 @FormUrlEncoded @Headers({"Accept: application/vnd.github.v3.full+json
但是即使是这样不同版本的 npm 对于 lockfiles 的处理逻辑是不同的npm install 生成的package-lock.json是什么文件?...去下载 node_modules 5.4.2 这版的逻辑我觉得是最自洽的 https://github.com/npm/npm/issues/17979#issuecomment-332701215...总结起来就是如果我们修改了 package.json 里包的版本,如果新的包的版本和与 lockfiles 里包的版本对照是不符合semver[3]规范的,那么,lockfiles 里对应的 version...package-lock.json 可能被意外更改的原因 1....5] npm-ci | npm Docs: https://docs.npmjs.com/cli/v6/commands/npm-ci The End 如果你觉得这篇文章对你有帮助,有启发,我想请你帮我
前言 很早之前,就打算写这一篇文章了(其实有很多源码分析的文章打算写,但是自己太拖延了导致很多文章搁浅了)。我为什么要写这一文章呢?...事情的缘由是同事在SpringBoot项目中有一个A类继承HibernateDaoSupport,但是程序运行总是抛出没有成功注入SessionFactory的错误,后来我debug Spring源码解决了这个问题...这个错误的原因是A类的RootBeanDefinition中的autowireMode的值为0,在AbstractAutowireCapableBeanFactory类中的populateBean方法中没有执行到...(这里维护的是bean和bean依赖的对象之间的关系,也就是MyBaseDao --》 MySessionFactory)中。...这里的BeanDefinition和populateBean方法中的RootBeanDefinition是不一样的。
第二次执行这个程序也没问题,但奇怪的是,此时第一次执行的那个程序却被kill掉了: ? 这是为什么呢?...这也就解释了为什么上面第二次运行该程序时,mmap是没有报错的。...上面我们还提到oom_score_adj有一个特殊值为OOM_SCORE_ADJ_MIN,即-1000,表示该进程不能被kill掉。 各进程的oom_score_adj的值默认为0。...比如,我们可以通过 echo -1000 > /proc/[pid]/oom_score_adj 命令,将oom_score_adj的值设置为-1000,即该进程不能被kill掉。...另外也欢迎关注我公众号,主要是结合实际,讲一些linux内核相关的知识。
从 ES2015 开始,对我代码影响最多的功能是解构、箭头函数、类和模块系统。 截至 2019 年 8 月,一项新提案 optional chaining 达到了第3阶段,这将是一个很好的改进。...通常,你在以下情况下处理此类对象: 获取远程 JSON 数据 使用配置对象 具有 optional 属性 虽然这为对象提供了支持不同结构数据的灵活性,但是在访问这些对象的属性时会增加复杂性。...通过减少 2 行代码简化了 getDirector() 函数。这就是我喜欢 optional chaining 的原因。...接下来的任务是编写一个返回电影主角名字的函数。...为什么我喜欢它? 我喜欢 optional chaining 运算符,因为它允许从嵌套对象轻松访问属性。它可以减少通过编写样板文件来验证来自访问器链的每个属性访问器上无效值的工作。
在此基础上,我们可以基于数据万象 CI 的一站式内容审核服务,对存储在 COS 中的图片、视频、语音、文档等静态资源进行多场景的审核,从而有效地识别并冻结色情低俗、违法违规、恶心反感等违禁内容,防患于未然...,这样就再也不用担心你的网站突然被封啦~ 静态资源审核 静态资源审核可以对媒体库中的图片、视频、音频、文档进行审核,识别并冻结涉黄、广告、恶心反感等违法违规内容,避免违法违规内容在网站上传播,防范封禁风险...上述两种审核配置都支持用户自定义审核策略,通过设置自定义策略可以定制涉黄涉政等个性化场景的审核;审核后支持按照指定的分数范围进行冻结,智能机审+精确人审的方式帮你有效避免违法内容的传播;审核结果可以通过配置的回调链接返回给用户...网页审核支持对网页文件进行自动检测,从 OCR 文本识别、物体检测(实体、广告台标、二维码等)、图像识别几个维度,通过深度学习技术,识别网页中的违规内容。...查询审核任务:通过发起任务时获取到的任务ID,直接查询对应任务ID的网页审核结果。审核结果中包含了审核是否成功、网页的审核处理建议、违规的图片和文字等。
通常情况下,需要打开按钮然后进行逆向工作。但是作者表示自己作为一个父亲,没有那么多时间来解决燃眉之急。 于是采取比较懒惰的路线,我需要编写一个程序,然后嗅探无线网络同时记录按钮的数据信息。...在这里我发现了一个问题,可能处于节能的目的考虑,再你不用按钮的时候,按钮是处于关闭的状态。 仅仅当你打开它,它才会工作,这就意味着每一次都需要重新连接你的无线网络,那么这就相对简单一些了。...这样就可以通过按下按钮向无线网络发出信息:“嗨!我的名字是[MAC地址]”。好吧,现在我们已经了解问题了。...修改后的程序程序运行时的终端输出。 3.将数据记录到谷歌电子表格 现在需要做的就是每次按下一个按钮就记录一次数据,我用到了一个工具来完成这一步。...访问 Cloudstitch,然后创建项目,你就会在电子表格中每一行都会出现一个链接,这样就可以记录我按下按钮的数据信息了。
第二次执行这个程序也没问题,但奇怪的是,此时第一次执行的那个程序却被kill掉了: ? 这是为什么呢?...这也就解释了为什么上面第二次运行该程序时,mmap是没有报错的。...在该函数中,会遍历系统中的所有进程,然后使用oom_evaluate_task这个函数,对各个进程进行评估: ?...上面我们还提到oom_score_adj有一个特殊值为OOM_SCORE_ADJ_MIN,即-1000,表示该进程不能被kill掉。 各进程的oom_score_adj的值默认为0。...比如,我们可以通过 echo -1000 > /proc/[pid]/oom_score_adj 命令,将oom_score_adj的值设置为-1000,即该进程不能被kill掉。
还有一个Child的子组件,红底黑字。 那么实际渲染出的样式是什么样子的呢。如下图: ? 实际看到的效果确实蓝底白字与红底白字,为什么与写的代码有出入呢。...究其原因 为什么子组件的字体颜色不是黑色确是白色? ?...为什么同样.parent .component 和.child .component是父级覆盖子级? ?...将DOM和CSSOM合并为渲染树(rendering tree)将会被创建,代表一系列将被渲染的对象。 渲染树的每个元素包含的内容都是计算过的,它被称之为布局layout。...最后 文章首发于:为什么我的样式不起作用? 参考:浏览器渲染原理与过程 参考:CSS选择器从右向左的匹配规则 DEMO地址
领取专属 10元无门槛券
手把手带您无忧上云