189 8069 5689

python函数重载吗 python 支持函数重载

python怎么重载in关键字

f=open('aaa.txt')

创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、做网站、六安网络推广、小程序设计、六安网络营销、六安企业策划、六安品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供六安建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

l=f.readline()

for

i

in

l:

if

"bbb"

in

i:

print

"ok

f.close()

打开文件aaa.txt

for循环,一行一行的,如果bbb关键字在i这一行,打印ok

关于python的重载问题

没有重载,但是可以有默认参数和不定长参数,可以判断默认值和参数长度来处理。

比如:

def range(start, end = -1):

if end == -1:

end = start

start = 0

def range(*args):

if len(args) == 1:

start = 0

end = args[0]

elif len(args) == 2:

start, end = args[0], args[1]

python 重载和重写的区别

重载和重写,这是两个新概念,是两个令我们容易混淆的概念。方法重载(overloading method)

是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。方法重写(overiding method)

子类不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。方法重载是让类以统一的方式处理不同类型数据的

一种手段。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同个数和

类型的参数来决定具体使用哪个方法,

这就是多态性。方法重写:在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定

的修改,这就需要采用方法的重写。方法重写又称方法覆盖。

若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类重写方法的规则:

参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.

返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载.访问修饰符的限制一定要大于被重写方法的访问修饰符

(publicprotecteddefaultprivate)重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽

泛的检查型异常.例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出

IOException的子类异常,可以抛出非检查异常.重载的规则:必须具有不同的参数列表;可以有不同的返回类型,只要参数列表不同就可以

了;可以有不同的访问修饰符;可以抛出不同的异常;注意,Java的方法重载要求同名的方法必须有不同的参数表,仅有返回类型不同是不足以区分两

个重载的方法。重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法。下面分别举一个例子来说明方法重载:public class

TestOverLoad{ public static void main(String[] args) {Test test = new

Test(); test.print(null); } }class Test{ public void print(String

some){System.out.println("String version print"); } public void

print(Object some){ System.out.println("Object version print");

}}该程序输出的结果是String version print。

怎么理解Python中重载?通俗理解是

python里面没有重载吧?

正常的重载说的应该是函数方法的重载,即两个函数的名称相同但是参数不同是重载,会出现重载的情况一般是函数实现相同功能时,遇到参数类型可能不同的情况,会出现重载,如比较常见的对于加法的实现,如果输入两个整数相加则直接使用整数加法,如果两个字符串相加则使用字符串的拼接。输入的参数类型不同,其实是两个不同的函数,这在那种强类型语言中是可以利用函数重载来实现的,而python中函数类型是动态的各种各样的,所以不需要重载这个机制。相同函数名就是表示同一个方法。

python 有没有方法的重载

Python 类可以定义专用方法,专用方法是在特殊情况下或当使用特别语法时由 Python 替你调用的,而不是在代码中直接调用(象普通的方法那样)。

.1 __init__

类似于构造函数

#!/usr/local/bin/python

class Study:

def __init__(self,name=None):

self.name = name

def say(self):

print self.name

study = Study("Badboy")

study.say()

.2 __del__

类似于析构函数

#!/usr/local/bin/python

class Study:

def __init__(self,name=None):

self.name = name

def __del__(self):

print "Iamaway,baby!"

def say(self):

print self.name

study = Study("zhuzhengjun")

study.say()

.3__repr__

使用repr(obj)的时候,会自动调用__repr__函数,该函数返回对象字符串表达式,

用于重建对象,如果eval(repr(obj))会得到一个对象的拷贝。

#!/usr/local/bin/python

class Study:

def __init__(self,name=None):

self.name = name

def __del__(self):

print "Iamaway,baby!"

def say(self):

print self.name

def __repr__(self):

return "Study('jacky')"

study = Study("zhuzhengjun")

study.say()

print type(repr(Study("zhuzhengjun"))) # str

print type(eval(repr(Study("zhuzhengjun")))) # instance

study = eval(repr(Study("zhuzhengjun")))

study.say()

.4__str__

Python能用print语句输出内建数据类型。有时,程序员希望定义一个类,要求它的对象也能用print语句输出。Python类可定义特殊方法__str__,为类的对象提供一个不正式的字符串表示。如果类的客户程序包含以下语句:

print objectOfClass

那么Python会调用对象的__str__方法,并输出那个方法所返回的字符串。

#!/usr/local/bin/python

class PhoneNumber:

def __init__(self,number):

self.areaCode=number[1:4]

self.exchange=number[6:9]

self.line=number[10:14]

def __str__(self):

return "(%s) %s-%s"%(self.areaCode,self.exchange,self.line)

def test():

newNumber=raw_input("Enter phone number in the form. (123) 456-7890: \n")

phone=PhoneNumber(newNumber)

print "The phone number is:"

print phone

if__name__=="__main__":

test()

方法__init__接收一个形如"(xxx) xxx-xxxx"的字符串。字符串中的每个x都是电话号码的一个位数。方法对字符串进行分解,并将电话号码的不同部分作为属性存储。

方法__str__是一个特殊方法,它构造并返回PhoneNumber类的一个对象的字符串表示。解析器一旦遇到如下语句:

print phone

就会执行以下语句:

print phone.__str__()

程序如果将PhoneNumber对象传给内建函数str(如str(phone)),或者为PhoneNumber对象使用字符串格式化运算符%(例如"%s"%phone),Python也会调用__str__方法。

.5__cmp __

比较运算符,0:等于 1:大于 -1:小于

class Study:

def __cmp__(self, other):

if other 0 :

return 1

elif other 0:

return - 1

else:

return 0

study = Study()

if study -10:print 'ok1'

if study -10:print 'ok2'

if study == 0:print 'ok3'

打印:ok2 ok3

说明:在对类进行比较时,python自动调用__cmp__方法,如-10 0 返回 -1,也就是说study 应该小与 -10,估打印ok2

.6__getitem__

__getitem__ 专用方法很简单。象普通的方法 clear,keys 和 values 一样,它只是重定向到字典,返回字典的值。

class Zoo:

def __getitem__(self, key):

if key == 'dog':return 'dog'

elif key == 'pig':return 'pig'

elif key == 'wolf':return 'wolf'

else:return 'unknown'

zoo = Zoo()

print zoo['dog']

print zoo['pig']

print zoo['wolf']

打印 dog pig wolf

.7__setitem__

__setitem__ 简单地重定向到真正的字典 self.data ,让它来进行工作。

class Zoo:

def __setitem__(self, key, value):

print 'key=%s,value=%s' % (key, value)

zoo = Zoo()

zoo['a'] = 'a'

zoo['b'] = 'b'

zoo['c'] = 'c'

打印:

key=a,value=a

key=b,value=b

key=c,value=c

.8 __delitem__

__delitem__ 在调用 del instance[key] 时调用 ,你可能记得它作为从字典中删除单个元素的方法。当你在类实例中使用 del 时,Python 替你调用 __delitem__ 专用方法。

class A:

def __delitem__(self, key):

print 'delete item:%s' %key

a = A()

del a['key']

Python正确重载运算符的方法示例详解

Python正确重载运算符的方法示例详解

说到运算符重载相信大家都不陌生,运算符重载的作用是让用户定义的对象使用中缀运算符(如 + 和 |)或一元运算符(如 - 和 ~)。说得宽泛一些,在 Python 中,函数调用(())、属性访问(.)和元素访问 / 切片([])也是运算符。

我们为 Vector 类简略实现了几个运算符。__add__ 和 __mul__ 方法是为了展示如何使用特殊方法重载运算符,不过有些小问题被我们忽视了。此外,我们定义的Vector2d.__eq__ 方法认为 Vector(3, 4) == [3, 4] 是真的(True),这可能并不合理。下面来一起看看详细的介绍吧。

运算符重载基础

在某些圈子中,运算符重载的名声并不好。这个语言特性可能(已经)被滥用,让程序员困惑,导致缺陷和意料之外的性能瓶颈。但是,如果使用得当,API 会变得好用,代码会变得易于阅读。Python 施加了一些限制,做好了灵活性、可用性和安全性方面的平衡:

不能重载内置类型的运算符

不能新建运算符,只能重载现有的

某些运算符不能重载——is、and、or 和 not(不过位运算符

、| 和 ~ 可以)

前面的博文已经为 Vector 定义了一个中缀运算符,即 ==,这个运算符由__eq__ 方法支持。我们将改进 __eq__ 方法的实现,更好地处理不是Vector 实例的操作数。然而,在运算符重载方面,众多比较运算符(==、!=、、、=、=)是特例,因此我们首先将在 Vector 中重载四个算术运算符:一元运算符 - 和 +,以及中缀运算符 + 和 *。

一元运算符

-(__neg__)

一元取负算术运算符。如果 x 是 -2,那么 -x == 2。

+(__pos__)

一元取正算术运算符。通常,x == +x,但也有一些例外。如果好奇,请阅读“x 和 +x 何时不相等”附注栏。

~(__invert__)

对整数按位取反,定义为 ~x == -(x+1)。如果 x 是 2,那么 ~x== -3。

支持一元运算符很简单,只需实现相应的特殊方法。这些特殊方法只有一个参数,self。然后,使用符合所在类的逻辑实现。不过,要遵守运算符的一个基本规则:始终返回一个新对象。也就是说,不能修改self,要创建并返回合适类型的新实例。

对 - 和 + 来说,结果可能是与 self 同属一类的实例。多数时候,+ 最好返回 self 的副本。abs(...) 的结果应该是一个标量。但是对 ~ 来说,很难说什么结果是合理的,因为可能不是处理整数的位,例如在ORM 中,SQL WHERE 子句应该返回反集。

def __abs__(self):

return math.sqrt(sum(x * x for x in self))

def __neg__(self):

return Vector(-x for x in self) #为了计算 -v,构建一个新 Vector 实例,把 self 的每个分量都取反

def __pos__(self):

return Vector(self) #为了计算 +v,构建一个新 Vector 实例,传入 self 的各个分量

x 和 +x 何时不相等

每个人都觉得 x == +x,而且在 Python 中,几乎所有情况下都是这样。但是,我在标准库中找到两例 x != +x 的情况。

第一例与 decimal.Decimal 类有关。如果 x 是 Decimal 实例,在算术运算的上下文中创建,然后在不同的上下文中计算 +x,那么 x!= +x。例如,x 所在的上下文使用某个精度,而计算 +x 时,精度变了,例如下面的


网站题目:python函数重载吗 python 支持函数重载
浏览路径:http://cdxtjz.cn/article/dochdes.html

其他资讯