首页
学习
活动
专区
工具
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

构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数的原因 ?

浏览量 3 1、构造函数不能声明为虚函数 1)因为创建一个对象时需要确定对象的类型,而虚函数是在运行时确定其类型的。...而在构造一个对象时,由于对象还未创建成功,编译器无法知道对象的实际类型,是类本身还是类的派生类等等 2)虚函数的调用需要虚函数表指针,而该指针存放在对象的内存空间中;若构造函数声明为虚函数,那么由于对象还未创建...,还没有内存空间,更没有虚函数表地址用来调用虚函数即构造函数了 2、析构函数最好声明为虚函数,首先析构函数可以为虚函数,当析构一个指向派生类的基类指针时,最好将基类的析构函数声明为虚函数,否则可以存在内存泄露的问题...如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除指向派生类的基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。子类析构时,要调用父类的析构函数吗?...析构函数调用的次序时先派生类后基类的。和构造函数的执行顺序相反。并且析构函数要是virtual的,否则如果用父类的指针指向子类对象的时候,析构函数静态绑定,不会调用子类的析构。

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

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

    构造顺序图 ? 三 但是,看了输出,我就纳闷为什么,为什么第三行不是BigEgg2.Yolk(),不能覆盖吗?...那么,他们构造方法为什么不能覆盖,都是Public Yolk(){}。 当然,网上都说子类继承父类除构造方法以外的所有方法,但这是结果,我要知道为什么!! 五 先说几个错误的观点 1....有说因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。...这个强行用中文语法来解释的,达到中文6级了啊。 3. 有说构造方法不是成员函数,故不能继承,所以谈不上覆盖。 这个真的有道理,是java官方文档上的。大多数人找到这里估计就满足了。...但是,跟太阳从东方升起西方落下那样,我想知道为甚么这么设计啊啊啊啊啊啊!!!!! 4. 正确答案 (1).构造器代表这个类本身,在创建之时申请内存。

    2.1K20

    箭头函数与普通函数(function)的区别是什么?构造函数(function)可以使用 new 生成实例,那么箭头函数可以吗?为什么?

    基本不同 1.写法不同,箭头函数使用箭头定义,普通函数中没有 .箭头函数都是匿名函数,普通函数可以有匿名函数,也可以有具体名函数,但是箭头函数都是匿名函数。...在普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例。箭头函数中没有this,声明时捕获其所在上下文的this供自己使用。...所以箭头函数结合call(),apply()方法调用一个函数时,只传入一个参数对this没有影响。...obj x fn1.apply(obj); // obj x fn2.call(obj); // window x fn2.apply(obj); // window x 4.箭头函数不可以做构造函数...,不能使用new 关键字,因为new关键字是调用函数对象的constructor属性,箭头函数中没有该属性,所以不能new function fn1(){ console.log

    2K10

    面试官:谈谈你对构造函数,原型的理解。我:面试造火箭,工作拧螺丝。

    面试官:谈谈你对构造函数,原型的理解。我:面试造火箭,工作拧螺丝。 我们今天分步走,先把构造函数,以及所谓的原型先走通了,再来进行别的内容的讲解原型链。...我们平常都知道构造函数是什么,但是就是只是浅层的认识,知道怎么写,但是至于原型我们几乎是很陌生的。 构造函数 什么是构造函数呢?...所谓构造,在 js 就是可以使用 new 操作的函数,其实与普通函数没有什么区别,只是我们约定构造函数的首字母必须大写,来区别构造函数与其他函数。...Person() console.log(person.name, person.hobby) constructor 是只构造函数创建实例对象时,此属性会指向该构造函数本身: function Person...指向了它的构造函数,而它和原型的关系我们在之后会链接到一起。

    41220

    关于Java构造函数(Constructor)的常见问题总结1 为什么调用子类的构造方法的时候,默认会调用父类的构造方法2 常见错误:Implicit super constructor is und

    1 为什么调用子类的构造方法的时候,默认会调用父类的构造方法 看下面这个简单的例子: package cc; public class Sub extends Super { public Sub...这就是为什么我们上面的那个例子程序会先调用super的构造方法。 但要切记,** 虽然调用了父类的构造方法,但只创建了一个对象也就是子对象。...Must define an explicit constructor 这个错误是很多开发者经常遇到的错误,错误原因就是找不到超类中的默认构造函数。...为什么Java在一个类已经实现了一个带参的构造函数的时候,不实现默认的无参构造函数? 这是个很有趣的问题。...我们知道如果在一个类中没有声明一个构造函数,那么编译器会隐式的帮我们实现一个无参的构造函数,但如果我们一旦一个构造函数,不管带不带参数,那么编译器都不会提供默认的构造函数,所以这么做的原因是为什么呢?

    3K41

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

    大家好,又见面了,我是你们的朋友全栈君。...最近在用 OpenCV 识别棋盘棋子,基本的思路是这样的:先转灰度,再做高斯模糊和二值化,此时棋盘格上有的有棋子,有的无棋子;通过迭代腐蚀,消去棋子,再迭代膨胀回来,就得到了一个纯净的棋盘;识别棋盘,标定位置...,对原图做透视变换、仿射变换,得到矩形棋盘;利用霍夫圆形检测或轮廓检测取得棋子;借助于机器学习识别棋子,最终得到对弈局面。...奇怪的是,我在网上搜到的伽马校正函数看起来都很复杂,即便是 python 写的,也都得十几行甚至几十行,可我写的伽马校正函数只有一行。为什么会这样呢?是我理解的不对吗?...、伽马校正(gamma=2)的灰度二值化效果、伽马校正(gamma=3)的灰度二值化效果: 对于彩色图片,这个伽马校正函数依然有效。

    1.1K20

    创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法?

    public static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建...A对象的时候父类会调用子类方法?...如果,子类重写了父类的方法,子类的方法引用会指向子类的方法,否则子类的方法引用会指向父类的方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...当子类对象创建时,会先行调用父类的构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。 但是:由于java语言是静态多分派,动态单分派。...其结果是当编译的时候,父类构造方法调用的方法的参数已经强制转换为符合父类方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。

    6.2K10

    经常会采坑的js原型应试题

    说难可能也不太难,但要真正完全理解,吃透它,还是要多下功夫的。 下面为大家简单阐述我对原型和原型链的理解,若是觉得有说的不对的地方,还请帮忙指正,或者关闭页面不浪费您的宝贵时间(害怕) 二....实例对象在查找属性时,如果查找不到,就会沿着__proto__去与对象关联的原型上查找,如果还查找不到,就去找原型的原型,直至查到最顶层,这也就是原型链的概念。...图片 参考 前端进阶面试题详细解答 通过这张图我们可以注意到,构造函数Foo的原型prototype 和 构造函数Foo所创建出来的对象实例f1,f2的原型__proto__是一样的都指向Foo().prototype...Object作为最顶端的构造函数,可以看到所有的对象都会通过原型链指向它.这就是为什么新建的对象为什么能够使用 toString() 等方法的原因....那么这里还个问题,细心的小伙伴已经发现了,构造函数有自己的原型prototype,但是构造函数也是对象啊,构造函数也有没有__proto__呢.答案是有的.因为每个 JavaScript 函数实际上都是一个

    30430

    经常会采坑的javascript原型应试题_2023-02-23

    说难可能也不太难,但要真正完全理解,吃透它,还是要多下功夫的。 下面为大家简单阐述我对原型和原型链的理解,若是觉得有说的不对的地方,还请帮忙指正,或者关闭页面不浪费您的宝贵时间(害怕) 二....实例对象在查找属性时,如果查找不到,就会沿着__proto__去与对象关联的原型上查找,如果还查找不到,就去找原型的原型,直至查到最顶层,这也就是原型链的概念。...图片 参考 前端进阶面试题详细解答 通过这张图我们可以注意到,构造函数Foo的原型prototype 和 构造函数Foo所创建出来的对象实例f1,f2的原型__proto__是一样的都指向Foo().prototype...Object作为最顶端的构造函数,可以看到所有的对象都会通过原型链指向它.这就是为什么新建的对象为什么能够使用 toString() 等方法的原因....那么这里还个问题,细心的小伙伴已经发现了,构造函数有自己的原型prototype,但是构造函数也是对象啊,构造函数也有没有__proto__呢.答案是有的.因为每个 JavaScript 函数实际上都是一个

    24920

    经常会采坑的javascript原型应试题3

    说难可能也不太难,但要真正完全理解,吃透它,还是要多下功夫的。下面为大家简单阐述我对原型和原型链的理解,若是觉得有说的不对的地方,还请帮忙指正,或者关闭页面不浪费您的宝贵时间(害怕)二....,如果查找不到,就会沿着__proto__去与对象关联的原型上查找,如果还查找不到,就去找原型的原型,直至查到最顶层,这也就是原型链的概念。...Object作为最顶端的构造函数,可以看到所有的对象都会通过原型链指向它.这就是为什么新建的对象为什么能够使用 toString() 等方法的原因.但是我们可以发现Object.prototype也有自己的...那么这里还个问题,细心的小伙伴已经发现了,构造函数有自己的原型prototype,但是构造函数也是对象啊,构造函数也有没有__proto__呢.答案是有的.因为每个 JavaScript 函数实际上都是一个...运行 function(){}).constructor === Function // true 便可以得到这个结论。

    25740

    经常会采坑的javascript原型应试题

    说难可能也不太难,但要真正完全理解,吃透它,还是要多下功夫的。下面为大家简单阐述我对原型和原型链的理解,若是觉得有说的不对的地方,还请帮忙指正,或者关闭页面不浪费您的宝贵时间(害怕)二....,如果查找不到,就会沿着__proto__去与对象关联的原型上查找,如果还查找不到,就去找原型的原型,直至查到最顶层,这也就是原型链的概念。...图片通过这张图我们可以注意到,构造函数Foo的原型prototype 和 构造函数Foo所创建出来的对象实例f1,f2的原型__proto__是一样的都指向Foo().prototype.这里我们可以继续思考...Object作为最顶端的构造函数,可以看到所有的对象都会通过原型链指向它.这就是为什么新建的对象为什么能够使用 toString() 等方法的原因.但是我们可以发现Object.prototype也有自己的...那么这里还个问题,细心的小伙伴已经发现了,构造函数有自己的原型prototype,但是构造函数也是对象啊,构造函数也有没有__proto__呢.答案是有的.因为每个 JavaScript 函数实际上都是一个

    24620

    类和对象 _ 剖析构造、析构与拷贝

    在C++中,构造函数是专门用于初始化对象的方法。当创建类的新实例时,构造函数会自动被调用。通过构造函数,我们可以确保对象在创建时就被赋予合适的初始状态。...下面我将详细解释如何使用构造函数进行初始化操作,并以Date类为例进行说明。 创建一个Date类: class Date { public: // 成员函数......因此,在尝试这样创建对象时,编译器会报错,因为它找不到一个合适的默认构造函数来调用。错误信息表明编译器找不到一个可以调用的构造函数,因为没有默认构造函数可用。...这意味着如果你想要创建类的对象而不提供任何参数,你必须自己定义一个无参构造函数,否则编译器会报错,因为它找不到一个合适的构造函数来调用。...为什么会崩溃呢?

    13310

    「思维导图学前端 」一文搞懂Javascript对象,原型,继承

    当然,YY一下就好了,我保证你没有足够的时间给所有知识点都画上思维导图,挑重点即可。 提纲思路 当我们要研究一个问题或者知识点时,关注点无非是: 是什么? 做什么? 为什么?...不过这里说说我刚学习原型时的疑惑,疑惑的是为什么构造函数有属性prototype指向原型,而实例又可以通过__proto__指向原型,究竟prototype和__proto__谁是原型?...一方面是为了保证constructor的指向正确,毕竟实例由子类实例化得来,如果constructor指向父类构造函数也不太合适吧。...借用构造函数 在调用子类构造函数时,通过call调用父类构造函数,同时指定this值。...关键点:工厂函数,封装过程函数化。 缺点:如果在工厂函数中扩展对象属性或方法,无法得到复用。 寄生组合继承 用以解决组合继承过程中存在的“父类构造函数多次被调用”问题。

    76820

    不了解Java反射机制?看这篇就行!

    我们又为什么要学它? 当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。我们认为java并不是动态语言,但是它却有一个非常突出的动态相关机制,俗称:反射。...+" "+fieldName); } 四、构造函数的反射 不论是方法的反射、成员变量的反射、构造函数的反射,我们只需要知道:要想获取类的信息,首先得获取类的类类型。...Constructor中封装了构造函数的信息 * 和前面说到的一样,它也有两个方法: * getConstructors()方法获取所有的public的构造函数 * getDeclaredConstructors...()方法得到所有的自己声明的构造函数 */ //Constructor[] cs = c.getConstructors(); Constructor[] cs = c.getDeclaredConstructors...()+"("); //获取构造函数的参数列表》》得到的是参数列表的类类型 Class[] paramTypes = constructor.getParameterTypes(); for (Class

    39710

    一篇文章让你搞懂原型和原型链

    函数除了有_proto_属性之外还拥有prototype属性,我们借助构造函数来寻找二者之间的关系。如下图: ? ? 总结如下(结合上图更容易理解): 1....在 Object的显式原型添加属性b,为什么 示例对象p 能使用此属性呢? p.b = b 2. 为什么 p.a 为undefined ? 如下图所示 1....查找属性,如果本身没有,则会去__proto__中查找,也就是构造函数的显式原型中查找,如果构造函数的显式原型中也没有该属性,因为构造函数的显式原型也是对象,也有__proto__,那么会去它的显式原型中查找...当 p 去访问 address 属性时,js会先在 p 的实例属性中查找,发现找不到后,就会去 Person 的原型对象上 查找。...相信之后在不断的开发实践中会使你理解的更为透彻,多学习多思考才能更快掌握。如果大家有任何反馈和问题,也欢迎通过评论区告诉我,谢谢。

    1.1K10

    一个关于反序列化的小问题

    MyDictionary对象进行序列化和反序列化,我直接采用的序列化器为BinaryFormatter。...SerialiationException的异常,错误消息提示找不到构造函数。...,对于这个消息,我们第一个反应是在反序列化的时候找不到默认(无参)的构造函数。但是再看MyDictionary的定义,我们不曾定义任何构造函数,意味着它具有一个默认(无参)构造函数。...实际上,这里并不是找不到默认(无参)构造函数,而是找不到一个具有特殊参数列表的构造函数。该构造函数接收两个参数,类型分别是:SerializationInfo和StreamingContext。...所以我们的解决方案很简单,就是加上这么一个构造函数。为此我们从新定义MyDictionary。

    702100

    RuntimeException和非RuntimeException的区别「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。...如:在读取外部文件的时候,出现文件找不到的情况 1....假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。...③ 异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。...③ 异常对象中包含的信息 :一般情况下,异常对象唯一有用的信息就是类型信息。但使用异常带字符串的构造函数时,这个字符串还可以作为额外的信息。

    2.6K10

    掌握原型链,再炒冷饭系列

    当我们访问一个对象时,首先会在自身属性上找,当自身属性找不到时,会到对象的隐式链上去找,如果隐式链上还没有,那么会到构造函数的原型上找,当原型上没有时,会到原型的隐式__proto__上去找,当这个属性还找不到时...当我们对构造函数实例化的时候,此时就会返回一个对象person,然而这个person对象就可以访问构造函数内部的属性,以及原型上的方法了。...这个person对象为什么可以访问构造函数的属性?以及构造函数原型上的方法?...1、创建了一个对象 2、将这个对象的__proto__指向了构造函数的prototype 3、执行构造函数内部方法,并改变构造函数内部的this指向到新对象中 4、返回该构造函数的结果 我们根据以上几点..._上的属性,然后会去构造函数的prototype上寻找,如果构造函数的prototype找不到,会到到构造函数prototype的__proto__上寻找,最后找不到该属性就返回undefined 了解

    19810

    spring框架注解的用法分析

    如果指定了@Component的名称,譬如指定为@Component(”bean”)的时候,在单元测试的时候就必须把super.getBean得到的id与之相对应才能测试成功。...,如果找不到合适的bean将会导致autowiring失败抛出异常,我们可以将@Autowired注解在这个set方法上,标记required=false来避免。...值得注意的是,我们知道每个类可以有很多个构造器,但是在使用@Autowired的时候,有且只能有一个构造器能够被标记为required=true(注:required的默认值为false)。...如果指定了@Component的名称,譬如指定为@Component(”bean”)的时候,在单元测试的时候就必须把super.getBean得到的id与之相对应才能测试成功。...,如果找不到合适的bean将会导致autowiring失败抛出异常,我们可以将@Autowired注解在这个set方法上,标记required=false来避免。

    57630
    领券