RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
python的特殊函数值 python的特殊含义符号

Python如何调用特殊函数

__call__

为沿河等地区用户提供了全套网页设计制作服务,及沿河网站建设行业解决方案。主营业务为成都网站制作、成都网站设计、沿河网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

在Python中,函数其实是一个对象:

f = abs

f.__name__

'abs'

f(-123)

由于 f 可以被调用,所以,f 被称为可调用对象。

所有的函数都是可调用对象。

一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

我们把 Person 类变成一个可调用对象:

class Person(object):

def __init__(self, name, gender):

self.name = name

self.gender = gender

def __call__(self, friend):

print 'My name is %s...' % self.name

print 'My friend is %s...' % friend

现在可以对 Person 实例直接调用:

p = Person('Bob', 'male')

p('Tim')

My name is Bob...

My friend is Tim...

单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著。

任务

改进一下前面定义的斐波那契数列:

class Fib(object):

???

请加一个__call__方法,让调用更简单:

f = Fib()

print f(10)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Python魔法函数(特殊函数)

Python中如何实现运算符的重载,即实现例如a+b这样的运算符操作呢?

在C++中可以使用 operator 关键字实现运算符的重载。但是在Python中没有类似这样的关键字,所以要实现运算符的重载,就要用到Python的魔法函数。Python魔法函数是以双下划线开头,双下划线结尾的一组函数。我们在类定义中最常用到的 __init__ 函数就是这样一个魔法函数,它在创建类对象时被自动调用。

下面我们来看个简单的例子。

上述代码示例了几个魔法函数的用法。 __add__ 函数对应了二元运算符+,当执行a+b语句时,python就会自动调用a. add (b)。 对于上述例子中的v1+v2+v3,则相当于调用了(v1. add(v2)). add(v3)。

代码中还有一个在Python类定义经常使用的 __str__ 函数,当使用 str() 时会被调用。print函数对传入的参数都调用了str()将其转换成易读的字符串形式,便于打印输出,因而会调用类定义的__str__函数打出自定义的字符串。

代码中还有一个特殊的 __call__ 函数,该函数在将对象采用函数调用方式使用时被调用, 例如v1()相当于v1. call ()。

以上就是魔法函数的基本使用方法。常见的魔法函数我们可以使用 dir() 函数来查看。

输出结果为:

上述结果中形式为‘__函数名__’的函数为魔法函数,注意有些对象也是这种形式,例如__class__, __module__等, 这些不是魔法函数。具体的魔法函数说明可以参考Python官方说明文档。

以上代码在Python3.6运行通过.

Python中的几种特殊数据类型小结

下面介绍了Python中的6种特殊数据类型:

1.list:列表

是一种有序的数据集合,在列表数据结构中的类型并不唯一

定义形式:L=['Micha',100,True]

输出整个列表的时候显示为['Micha',100,True]

输出单个的数值则为:Micha

a.访问,直接使用L[0]表示第一个元素或者使用L[-1]表示最后一个数据,以此类推,但是注意访问不能越界(访问的序号不能超过元素的总数)。

b.添加新元素:使用L.append(100)直接将100加入列表末尾,或者使用L.insert(0,'paul')将paul插入任意位置。

c.删除元素:L.pop()删除最后一个元素,或者L.pop(2)删除第2个位置的元素。

d.替换元素:直接赋值就可以了L[2]=100

2.tuple:元组

是一种有序的列表,但是其一旦创立完毕就不能够更改,即不能插入,删除里面的元素,访问的方式跟List结构一致。

a.t=()其打印后输出的形式是()

若t中的数据为一个数字则需要在后面加逗号,以区分普通数字,如t=(1,),打印出(1,)而非1,多元素的话则没有这个要求。

b.可以在不变的tuple中加入可变的List如t=(‘a’,'b',['A','B'])

3.dict:字典

d = {

'Adam': 95,

'Lisa': 85,

'Bart': 59

}

len()函数可以计算任意集合的大小

其中可以简单地使用d[key]的形式来查找对应的 value,这和 list很像,不同之处是,list必须使用索引返回对应的元素,而dict使用key,当key不存在的时候,使用该key可能出现错误,因此:要避免 KeyError 发生,有两个办法:

一是先判断一下 key 是否存在,用 in 操作符:

if'Paul' in d:

print d['Paul']

如果 'Paul' 不存在,if语句判断为False,自然不会执行print d['Paul'],从而避免了错误。

二是使用dict本身提供的一个 get方法,在Key不存在的时候,返回None:

print d.get('Bart')

59

a.dict中的key不能重复,且dict中的存储的对应值没有顺序,打印出的东西可能是无序的

b.dict的更新:使用d[‘paul']=72求解

c.dict遍历:

d = {'Adam': 95, 'Lisa': 85, 'Bart': 59 }

for key in d:

...     print key

遍历只能获得key的值,需要通过key值获得对应的value

4.set:集合

无序但是所有元素唯一,不重复

a.定义:s = set(['A', 'B', 'C']),查看 set的内容:

print s

set(['A','C', 'B'])

可以用in来判断是否存在于集合中

b.遍历

s =set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])

for xin s:

print x[0]+':',x[1]

c.添加元素到集合中

s.add(4)

d.删除元素

s.remove(4)若该元素不在集合中将会报错

5.Unicode编码

Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示,比如:

printu'中文'

注意: 不加 u,中文就不能正常显示中文。

a.转义形式: u'中文\n日文\n韩文'

b.输出多行:

u'''第一行

第二行'''

c.raw+多行的形式:

ur'''Python的Unicode字符串支持"中文",

"日文",

"韩文"等多种语言'''

如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释

# -*-coding: utf-8 -*-

目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++另存为, 并选择UTF-8格式保存。

6.raw的作用

如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀 r,表示这是一个“raw”字符串,里面的字符就不需要转义了。例如:

r'\(~_~)//'

但是r'...'表示法不能表示多行字符串,也不能表示包含'和 "的字符串,如果要表示多行字符串。

Python中几个特殊的函数

1、 定义一个特殊的 __slots__ 变量,来限制该class实例能添加的属性

2、 内置的 @property(关键字) 装饰器就是负责把一个方法变成属性调用的。@property.setter(这里的property是类里面的属性名)负责把一个setter方法变成属性赋值。

3、 __str__(),__repr__(),__iter__(),__next__(),__getitem__(),__setitem__(),__delitem__(),__getattr__(),__call__()


文章名称:python的特殊函数值 python的特殊含义符号
网站网址:http://scyingshan.cn/article/doejjij.html