首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的递归函数返回None

问: 我有一个调用自己的函数: 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): ...

13910

我为什么要创建一个不能被实例化的类

但如果有一天,你发现我写了这样一个类: 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

3.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    图形编辑器开发:为什么我选择用 transform 矩阵表达图形的变形?

    大家好,我是前端西瓜哥。 前段时间对自己的图形编辑器项目做了一次改造。 改用 transform 表达图形的变形,并废弃掉了原来的 rotation、x、y 属性。...然后再补上了图形的翻转的支持,以及斜切的支持。图形的变形操作算是补完了。 这里我简单说说这么做的原因。...一般情况下,我们更改 width 和 height 就好了。 但有一种情况就不够用了,那就是 “翻转”,有两种情况:水平翻转和垂直翻转。 这时候我们就要引入缩放属性 scaleX 和 scaleY。...最后我们可能要 支持斜切 ,一般来说这种形变的情况是很少见的,甚至说有些编辑器极力避免这种情况的发生。 比如 Canva 图片编辑器会避免斜切的出现。如果同时缩放多个图形,图形只会改宽和高。...虽说貌似可以补上一个 skewX 和 skewY 属性,但和 rotation 有一些冲突,后面会说为什么。 下面是 Figma 缩放多个图形的效果。

    15510

    我用编程模拟疫情的传播来告诉你: 为什么现在的你还不能出门

    看完视频你就明白为什么不能出门了,千万不要放松警惕!(@Ele实验室 ) 在家憋了一段时间的人们,耐心也在一点一点消磨中。很多人已经忍不住开始想蠢蠢欲动了。...他们总有一套自己的理论:我们城市才一点确诊病人,而且在距离我们很远的地方,我就出去一会儿,哪有那么巧合,就感染上了。没事儿的!大街上都没人,我戴着口罩又没事。...疫情的防控工作的防控点或者是成功与否主要在于感染人员是否戴口罩、医院里的隔离床位(或者是自我隔离位)、人口的流动。...因此通过这一次的疫情防控,为了你、我、他,请以后感冒发烧生病之后,能够带个口罩,减少传染率。因为不知道你体内的这一个病毒威力如何。 ?...因此一个疫情发生,必须依靠强大有力的政府比如中国,和广大的医院医生护士等伟大的工作者们的努力,所以平时请尽量的尊重他们的这个职业。 ?

    2.1K10

    为什么我建议线上高并发量的日志输出的时候不能带有代码位置

    如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~ 本文是“为什么我建议”系列第二篇,本系列中会针对一些在高并发场景下,我对于组内后台开发的一些开发建议以及开发规范的要求进行说明和分析解读...往期回顾: 为什么我建议在复杂但是性能关键的表上所有查询都加上 force index 在业务一开始上线的时候,我们线上日志级别是 INFO,并且在日志内容中输出了代码位置,格式例如: 2022-03...在上面我给出的线程堆栈的例子中,调用打印日志方法的代码位置信息就是这一行:at com.xxx.apigateway.filter.AccessCheckFilter.filter(AccessCheckFilter.java...模拟两种方式获取调用打印日志方法的代码位置,与不获取代码位置会有多大性能差异 以下代码我参考的 Log4j2 官方代码的单元测试,首先是模拟某一调用深度的堆栈代码: 然后,编写测试代码,对比纯执行这个代码...由此,我建议:对于微服务环境,尤其是响应式微服务环境,堆栈深度非常深,如果会输出大量的日志的话,这个日志是不能带有代码位置的,否则会造成严重的性能衰减。

    1.4K20

    详解Java构造方法为什么不能覆盖,我的钻牛角尖病又犯了....

    三 但是,看了输出,我就纳闷为什么,为什么第三行不是BigEgg2.Yolk(),不能覆盖吗?...那么,他们构造方法为什么不能覆盖,都是Public Yolk(){}。 当然,网上都说子类继承父类除构造方法以外的所有方法,但这是结果,我要知道为什么!! 五 先说几个错误的观点 1....有说构造方法的方法名与类名必须一样,父子类不能同名,故不能继,所以不能覆盖构造方法。 这个不用多说,这个例子,就是大神写出来打这样说的人的脸的。 2....有说因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。...这个强行用中文语法来解释的,达到中文6级了啊。 3. 有说构造方法不是成员函数,故不能继承,所以谈不上覆盖。 这个真的有道理,是java官方文档上的。大多数人找到这里估计就满足了。

    2.1K20

    nextline函数_在JAVA中Scanner中的next()和nextLine()为什么不能一起使用?

    大家好,又见面了,我是你们的朋友全栈君。...很好实现 …… 就继续在这里记录一下 Scanner 的坑吧 一、next & nextLine 区别next不能得到带有空格的字符串 一定要读到有效字符后才可以结束,结束条件是碰到空格、tab 键、...、tab 键、enter 键都不能当作结束符。...这个扫描器在扫描过程中判断停止的依据就是“结束符”,空格,回车,tab 都算做是结束符 而坑点在于 next 系列的,也就是下面这些函数:next nextInt nextDouble nextFloat...这些函数与 nextLine 连用都会有坑 坑点就是 next 系列的函数返回了数据后,会把回车符留在缓冲区,因此我们下一次使用 nextLine 的时候会碰到读取空字符串的情况 解决方案:输入都用

    2.7K10

    OpenCV论道:为什么我的伽马校正函数只有一行?

    大家好,又见面了,我是你们的朋友全栈君。...最近在用 OpenCV 识别棋盘棋子,基本的思路是这样的:先转灰度,再做高斯模糊和二值化,此时棋盘格上有的有棋子,有的无棋子;通过迭代腐蚀,消去棋子,再迭代膨胀回来,就得到了一个纯净的棋盘;识别棋盘,标定位置...就是提升图像的暗部细节。这与加曝处理是不一样的,加曝一般不区分图像的暗部和亮部。...奇怪的是,我在网上搜到的伽马校正函数看起来都很复杂,即便是 python 写的,也都得十几行甚至几十行,可我写的伽马校正函数只有一行。为什么会这样呢?是我理解的不对吗?...、伽马校正(gamma=2)的灰度二值化效果、伽马校正(gamma=3)的灰度二值化效果: 对于彩色图片,这个伽马校正函数依然有效。

    1.1K20

    面试官:告诉我为什么static和transient关键字修饰的变量不能被序列化?

    一、写在开头在上一篇学习序列化的文章中我们提出了这样的一个问题:“如果在我的对象中,有些变量并不想被序列化应该怎么办呢?”...当时没有解释具体为什么static和transient 关键字修饰的变量就不能被序列化了,这个问题实际上在很多大厂的面试中都可能会被问及。我们今天在这篇中进行解释吧。...三、源码分析在之前的文章中,我们已经解释过了,在序列化时Serializable只是作为一种标识接口,告诉程序我这个对象需要序列化,那么真正的实现还要以来序列化流,比如写出到文件时,我们需要用到的ObjectOutputStream...四、总结好啦,今天针对为什么static和transient关键字修饰的变量不能被序列化进行了一个解释,下次大家在面试的时候再被问道就可以这样回答啦,不过,还有的BT面试官会问transient关键字修饰的变量真的不能被序列化吗...我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

    19920

    Jenkins编辑或替换All view 原

    为什么我不能编辑“All”view? 这是因为它的类型是“All”而不是“List”,并且“All”类型是不可编辑的。你只能有一个“All”类型的view。...如果你想编辑这个View,你将不得不创建一个新的View替换。更多信息请参考该页面的其他问题。 为什么我不能删除“All”view? 这是因为它被设置为默认的view。...一旦你更改到新的Default view,你可以删除“All”view。 在“My views”中我如何删掉“All”view?...要删掉这个view,到“用户”→“你的用户标识/名称”→“设置”页面,更改“Default view”的下拉选项。...如同全局的Default view,你不能改变用户的Default view除非你已经创建了另一个view。一旦你更改到新的Default view,你可以删除用户的“All”view。

    1.4K20

    引脚数据提示编辑代码并继续调试(C#,VB,C ++)编辑XAML代码并继续调试调试难以重现的问题配置数据以显示在调试器中更改执行流程跟踪范围外的对象(C#,Visual Basic)查看函数的返回值

    编辑代码并继续调试(C#,VB,C ++) 在Visual Studio支持的大多数语言中,您可以在调试会话的中间编辑代码,然后继续进行调试。...移动指针不能将您的应用恢复到较早的应用状态。 跟踪范围外的对象(C#,Visual Basic) 使用诸如“监视”窗口之类的调试器窗口可以轻松查看变量。...查看函数的返回值 要为您的功能,看看出现在该功能查看返回值的汽车窗口,而你是单步执行代码。要查看某个函数的返回值,请确保您感兴趣的函数已经执行(如果您当前在函数调用中停止,请按一次F10键)。...DataTip会告诉您每个已停止线程的名称和线程ID号。 您还可以在“并行堆栈”窗口中查看线程的位置。...“模块”窗口可以告诉您调试器将哪些模块视为用户代码或“我的代码”,以及该模块的符号加载状态。

    4.5K41

    VFP缓冲表的记录有五种变化,揭密一键保存的核心秘密

    如果要获取不能被提交修改的原因,即保存失败想知道为什么,请使用AERROR( ) 函数来获取错误信息。 来看一下开启缓冲来修改的示例。...GETFLDSTATE(cFieldName | nFieldNumber [, cTableAlias | nWorkArea]) 参数 cFieldName| nFieldNumber 指定要返回其编辑状态的字段的名称或编号...例如,如果某个表有五个字段,而只编辑过第一个字段,则 GETFLDSTATE( ) 函数将返回 121111。第一个位置上的 1 表明删除状态尚未更改。...说明 下表列出了返回值及其相应的编辑或删除状态。 返回值 编辑或删除状态 1 字段未作编辑,或者删除状态未作更改。 2 已编辑了字段,或者更改了删除状态。...3 追加记录的字段未做编辑,或者追加记录的删除状态未做更改。 4 已编辑了追加记录的字段,或者已更改了追加记录的删除状态。 .NULL.

    1.7K30

    【新!超详细】Figma组件属性完全指南

    文本属性 text 属性允许您从属性面板编辑文本层。您无需单击组件内的文本层即可更改文本。选择组件时,您可以直接从属性面板编辑文本。 何时使用文本属性? 设置组件变体时,无需单击文本图层即可更改文本。...例如,如果要创建悬停按钮,请将其颜色从启用更改为悬停,并将其命名为悬停。您现在有一个包含两个变体的变体组件集。 如何在 Figma 中编辑属性?...整理属性 您可以通过选择组件集并从右侧菜单中拖放列表中的项目来对属性列表进行排序。 更改属性名称 有两种方法可以更改属性名称: 1. 双击右侧菜单中的组件属性名称。 2....单击详细信息图标,然后在窗口中更改名称。 更改列表中的变体顺序 当您单击一个实例并想要更改变体时,您希望它按字母顺序排列,或者最流行的变体在顶部。 在变体行上,单击详细信息图标。...您还可以编写指向设计系统中组件文档的链接。 专业提示-命名属性 我们不能有同名的属性。例如,对于一个按钮,我们不能为布尔属性和交换属性赋予相同的名称,即“图标”。

    12.5K22

    提高 Python 代码可读性的 5 个基本技巧

    为什么我们要在 clay 函数中检查结果? 这些函数需要什么类型?Floats? DataFrames?...在本文中,我们将着重讨论如何通过文档、提示输入和正确的变量名称来提高应用程序/脚本的可读性的五个基本技巧。 1....Comments 我们可以对我们的代码做的第一件事是为我们的代码添加某些注释,但是却不能过度使用它。注释应该告诉你为什么代码可以工作或者为什么某事以某种方式完成,而不是它是如何工作的。...另一方面,静态类型涉及明确说明变量是什么类型,并且在代码执行期间不能更改。...当我们从代码中的其他地方调用函数时,拥有文档字符串也是非常有帮助的。例如,使用 Visual Studio 编辑代码时,可以将鼠标悬停在函数调用上,然后查看该函数的功能及其要求的弹出窗口。

    71920

    设置虚拟机桥接模式以及解决桥接模式上不了网以及ping不通主机的问题

    大家好,又见面了,我是你们的朋友全栈君。...一.VMware设置桥接模式 1.VMware -> 编辑->虚拟网络编辑器->更改设置 选择VMnet0(桥接模式),选择与主机同名网卡 ,主机可在在网络中心查看网卡名称 2.设置桥接模式...2、查看vmware:编辑——虚拟网络编辑器——更改设置 (1)是否同时有VMnet0 VMnet1 VMnet8,且和文首的对应关系相符(当然桥接网络只会用到VMnet0)。...(3)确保“桥接到”选项框中出现的主机电脑的网络适配器名称是正确的,如果不正确,看看是否有其他wifi设备未设置正确。...3、查看目标虚拟机:设置——网络适配器——选择桥接模式 2和3就是一.设置桥接模式 4.本人在安装完CentOS7后设置桥接模式不知道为什么不能上外网 在图形界面打开网络连接,删除配置 再重新设置

    11K20

    分享 15 个关于 JS 对象相关的基础知识

    更改是在当前对象上完成的,而不是在它的原型上 请记住,更改是在当前对象上完成的,而不是在其原型上。原型仅用于阅读。 添加、编辑或删除对当前对象执行的属性时。...以下对象具有存储函数的 toString 属性。...当原型被冻结时,从它继承的对象不能具有同名的新属性。考虑以下冻结原型。...= Object.freeze({ toString : function (){ return this.name; } }); 因为原型被冻结并且具有 toString 属性,我们不能在从它继承的新对象上定义具有相同名称的属性...总结 以上这些就是你需要了解的有关 JavaScript 对象的一些最重要的知识概念,希望这些内容对你有所帮助,如果你觉得有用的话,请不要忘记点赞我,关注我,并将它与你的开发者朋友一起来分享这篇文章,也许能够帮助到他

    84540

    const关键字的秘密:为什么它不总是像你想象的那样

    常量通常被认为是“不能更改的变量”: const hi = 5; hi = 10; // Uncaught TypeError: Assignment to constant variable. console.log...(hi); // -> 5 有趣的是,当我使用const创建一个对象时,我可以自由地更改它: const person = { name: 'Hassan', }; person.name = 'Sujata...只要标签继续指向相同的对象,我们就可以编辑对象中的键/值。 重新分配(将变量名称指向新事物)和突mutation (编辑事物内的数据)之间存在根本区别。...我们已经将 age 变量分配给数字36,但我们可以将它指向列表中的任何其他数字: 要明确的是,浏览器并没有所有可能数字的大索引。我希望在这里阐述的重点是数字本身无法更改。...我们只能更改标签指向的数字。 这适用于所有原始值类型,包括字符串、布尔值、null等。 如上所述,在JavaScript中,原始值是不可变的;它们不能被编辑。但如果他们能做到呢?

    38520

    如何将重复工作实现自动化?

    打开Excel,点选左上角「文件」 点选左下角「选项」 点选左侧栏的「自定义功能区」 点选右侧「开发工具」 打钩,并「确定」 检查「开发工具」是否开启 这么厉害的大杀器,不懂为什么要隐藏这么深...(2)VBA界面简介 点选「Visual Basic」 弹出以下界面 功能区:用于代码调试、执行、监控、粘贴等功能 代码编辑区域:编辑自己设计的代码 工程资源管理器:显示和管理不同的代码文件 属性区域...(3)VBA案例 案例1:自定义「日期季度转换函数」 上述的代码是自定义了一个「日期转换季度」函数,这个案例之前出现在实际的工作场景中,当然了这个公式是简化版的。...案例2:批量修改所有文件名 其实工作中有很多类似这样的重复工作,例如批量更改文件名称、批量汇总多个工作表、批量汇总多个工作簿、自动比对数据、批量生成多个Excel文件等等,都可以用VBA自动化解决。...下面这个案例是批量更改指定路径下所有文件名 上面这个批量「更改指定路径下所有文件名」的程序,由两个程序组成:文件名提取和文件名更换,可以针对指定路径文件夹(文件夹在哪里)下任何类型文件,更改为指定名称

    26130

    如何将重复工作实现自动化?

    打开Excel,点选左上角「文件」 点选左下角「选项」 点选左侧栏的「自定义功能区」 点选右侧「开发工具」 打钩,并「确定」 检查「开发工具」是否开启 这么厉害的大杀器,不懂为什么要隐藏这么深...(2)VBA界面简介 点选「Visual Basic」 弹出以下界面 功能区:用于代码调试、执行、监控、粘贴等功能 代码编辑区域:编辑自己设计的代码 工程资源管理器:显示和管理不同的代码文件 属性区域...(3)VBA案例 案例1:自定义「日期季度转换函数」 上述的代码是自定义了一个「日期转换季度」函数,这个案例之前出现在实际的工作场景中,当然了这个公式是简化版的。...案例2:批量修改所有文件名 其实工作中有很多类似这样的重复工作,例如批量更改文件名称、批量汇总多个工作表、批量汇总多个工作簿、自动比对数据、批量生成多个Excel文件等等,都可以用VBA自动化解决。...下面这个案例是批量更改指定路径下所有文件名 上面这个批量「更改指定路径下所有文件名」的程序,由两个程序组成:文件名提取和文件名更换,可以针对指定路径文件夹(文件夹在哪里)下任何类型文件,更改为指定名称

    2.9K10

    docker 挂载文件不同步问题记录

    起因 今天上午开发给我反应一个问题,所在宿主机上更改了挂载的文件在 docker 里面看不到改变,问我是不是 docker 启动的时候挂载的时候有问题,我说不可能啊,怎么会有问题呢?...于是自己亲自测试了一下,发现确实外面改完之后里面不生效.本以为是这台机器特殊有问题(因为我用 docker 两年了从来没有注意过这个问题),然后就换了个机器,发现还是一样,于是重视这个问题,看看到底是因为什么...我认为 docker 是不会把这种不合理的问题流传到现在(比如我们更改完 nginx 的配置文件,需要 docker restart nginx,而不是用 nginx -s reload 吗?)...,我这个时候想起有的时候以同样的方式 vim 更改文件内容,为什么更改完之后 docker 里面能立马生效了呢?...于是继续做实验 我给这个文件 777 权限之后,看看他有什么变化 chmoe 777 test.txt 我们里面的东西几乎全部清空了,但是我发现一个我不知道的事情,为什么文件给了 777 权限之后,同样使用

    3.3K41
    领券