重载函数

Python 基础之-模块与包

大兔子大兔子 提交于 2020-01-18 09:25:41
一 模块介绍 1. 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件(文件名就是模块名字加上.py的后缀),模块可以被导入使用。 但其实import加载的模块分为四个通用类别: 使用python编写的.py文件 已被编译为共享库或DLL的C库或C++扩展 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包) 使用C编写并链接到python解释器的内置模块 2. 为何要使用模块? (1)如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。 (2)随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用 (3)同样的原理,我们也可以下载别人写好的模块然后导入到自己的项目中使用,这种拿来主义,可以极大地提升我们的开发效率 3. 示例文件: spam.py,文件名spam.py,模块名spam #spam.py print('from the spam.py') money=1000 def

转:python中的函数重载(by qshpeng)

一笑奈何 提交于 2020-01-17 23:03:02
如果你习惯用C++,JAVA或者其它的面向对象语言,你会经常用到函数重载。 所谓函数的重载是指多个函数的名称以及返回值类型均相同,仅参数类型或参数个数不同。函数重载大大提高了代码重用率和程序员开发效率。 但如果你现在转向使用python,你就有可能不习惯它的形式上不支持函数重载。但python作为面向对象语言,自然不会丢掉函数重载这个面向对象语言所共有的重要特性。 python中实现函数重载的方法非常特别而有趣。先看下面的一个函数定义: def f(str,times): print str*times 上面函数是指对字符串str打印times次,可能你很多情况只需对str打印,此时每次都对times赋值1就显得很繁琐,我们希望没有指定times的值就只打印一次。在C++中你可以用函数重载这样实现: void f(string str){ cout << str << endl ;} void f(string str,int times) {int i=0; for (i =0;i<times;i++) cout << str<< endl; } 打印一次就调用f(str),打印多次就调用f(str,times),现在用python实现: f(str,times=1) print str*times 打印一次就调用f(str),打印多次就调用f(str,times),调用方法一样

Java面试题技术类一

柔情痞子 提交于 2020-01-17 00:40:38
1、面向对象编程的三大特性是什么? (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继 承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增 加新的方法使之更适合特殊的需要。 (2).封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 (3).多态: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据这个String类提供了数值不可改变字符串而这个StringBuffer类提供的字符串进行修改当你知道字符数据要改变的时候你就可以使用StringBuffer典型地,你可以使用StringBuffers来动态构造字符数据 3、说出ArrayList,Vector,

Java-面向对象的基础

坚强是说给别人听的谎言 提交于 2020-01-16 10:12:14
Java 继承继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类具有父类的各种属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 继承的特性: 1.子类拥有父类非private的属性,方法和构造器。 2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。 3.子类可以用自己的方式实现父类的方法。 4.Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。 5.提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。 Java 重写(Override)与重载(Overload)重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是

Java面向对象浅谈

允我心安 提交于 2020-01-16 08:29:54
1. 方法重写override: 参数列表必须完全与被重写方法的相同; 返回类型必须完全与被重写方法的返回类型相同; 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。 父类的成员方法只能被它的子类重写。 声明为final的方法不能被重写。 声明为static的方法不能被重写,但是能够被再次声明。 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。 构造方法不能被重写。 如果不能继承一个方法,则不能重写这个方法. 2.重载overload: 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。 最常用的地方就是构造器的重载。 重载规则 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样); 被重载的方法可以改变返回类型; 被重载的方法可以改变访问修饰符

const和非const函数重载

我的未来我决定 提交于 2020-01-15 04:49:29
成员函数后面加const,表示在该函数中不能对类的数据成员进行改变,比如下面的代码: 1 #include <stdio.h> 2 3 class A 4 { 5 private: 6 mutable int aa; 7 public: 8 A(){} 9 int x() 10 { 11 printf("no const\n"); 12 return aa++; 13 } 14 int x() const 15 { 16 printf("const\n"); 17 return aa++; 18 } 19 }; 20 21 int main() 22 { 23 A a1; 24 a1.x(); 25 26 const A a2; 27 a2.x(); 28 29 return 0; 30 } 代码的运行结果为: 首先说明成员函数后面加const这种机制,这是软件工程上的一种机制,在先前的软件开发中,类中各个函数的实现是由不同人完成了,所以大家共同操作同一组的数据成员,这样就会产生一种麻烦,会有些菜鸟或者不遵守规则的家伙胡乱的修改数据成员。当时只能用文档的形式来约束大家,在开发文档里清楚的写上你的这个函数实现不允许任何的修改数据成员,但是这样的文档的形式还是不能很好的约束那些家伙,于是C++语言的设计者 Stroustrup想出来一个好的办法: 如果成员函数的后面加上了const

Java中重载和重写的区别

时光毁灭记忆、已成空白 提交于 2020-01-15 04:37:23
1、定义区别: ①重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。 ②重写(也叫覆盖)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现不一样。 2、类的关系区别 重写是子类和父类之间的关系,是垂直关系; 重载是同一个类中方法之间的关系,是水平关系。 3、产生方法区别 重写只能由一个方法或只能由一对方法产生关系; 重载是多个方法之间的关系。 4、参数列表要求区别 重写要求参数列表相同; 重载要求参数列表不同。 5、调用方法区别 重写关系中,调用方法体是根据对象的类型来决定; 重载关系是根据调用时的实参表与形参表来选择方法体的。 扩展资料 方法的重写: 1、在子类中可以根据需要对从父类中继承来的方法进行重写。 2、重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。(注:返回值可以为父类中返回值的子类型.参数若为子类,则不是重写是重载) 3、重写方法不能使用比被重写的方法更严格的访问权限。 4. 重写方法不能声明抛出比被重写方法范围更大的异常类型。 来源: CSDN 作者: -小酒窝- 链接: https://blog.csdn.net/zx1293406/article/details/103926021

JavaScript函数重载

喜你入骨 提交于 2020-01-14 21:50:41
译者按: jQuery之父John Resig巧妙地利用了闭包,实现了JavaScript 函数重载 。 原文: JavaScript Method Overloading 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。 在一个业余项目中,我写了一个简单的 addMethod 函数,用于实现 函数重载(Method Overloading) 。而所谓 函数重载 ,就是函数名称一样,但是输入输出不一样。或者说,允许某个函数有各种不同输入,根据不同的输入,调用不同的函数,然后返回不同的结果。 addMethod 函数如下: // addMethod - By John Resig (MIT Licensed) function addMethod( object, name, fn){ var old = object[ name ]; object[ name ] = function( ){ if ( fn.length == arguments.length ) return fn.apply( this, arguments ); else if ( typeof old == 'function' ) return old.apply( this, arguments ); }; } 所谓 addMethod 函数

C/C++对运算符重载详解

余生颓废 提交于 2020-01-14 12:27:12
下面来进行这段代码的分析: struct node { //定义一个结构体node(节点) int x; int y; int len; //node中有3个成员变量x,y,len bool operator <( const node &a) const { //重载<操作符。可以对两个node使用<操作符进行比较 return len<a.len; } }; 括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改! 想必看到这里对重载运算符算是有一丁点的了解吧,下面看些理论文字,更加清楚的了解关系! Return Top 重载运算符的介绍 C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。   运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下: <返回类型说明符> operator <运算符符号>(<参数表>) {

(C/C++)重载《运算符

为君一笑 提交于 2020-01-14 01:33:51
重载《运算符 题目:重载运算符 << ,使之能够使用cout将Date类对象的只以日期格式输出,Date类的定义如下, 在你的代码中需包含Date类的定义和实现。 class Date{ public: Date(int y=1996,int m=1,int d=1){ day = d; month = m; year = y; if (m>12 || m<1) { month=1; } if (d>days(y,m)) { cout<<“Invalid day!”<<endl; day=1; } }; int days(int y,int m); void display(){ cout<<year<<"-"<<month<<"-"<<day<<endl; } private: int year; int month; int day; }; 你需要实现运算符 << 的重载, 输出日期的格式参见display方法。 实现Date对象的days方法,该方法返回指定年月有多少天,如days(2001,1),返回31. 最终Date类的使用方式如下,在你的代码中除了完成Date函数还需包含以下main函数: int main(){ int y,m,d; cin>>y>>m>>d; Date dt(y,m,d); cout<<dt; return 0; } 例如,输入: 2013 2