首页 > 编程语言 >Python分享之特殊方法与多范式

Python分享之特殊方法与多范式

时间:2023-11-06 17:03:53浏览次数:32  
标签:__ .__ 范式 Python 对象 add 分享 方法

Python一切皆对象,但同时,Python还是一个多范式语言(multi-paradigm),你不仅可以使用面向对象的方式来编写程序,还可以用面向过程的方式来编写相同功能的程序(还有函数式、声明式等,我们暂不深入)。Python的多范式依赖于Python对象中的特殊方法(special method)。


特殊方法名的前后各有两个下划线。特殊方法又被成为魔法方法(magic method),定义了许多Python语法和表达方式,正如我们在下面的例子中将要看到的。当对象中定义了特殊方法的时候,Python也会对它们有“特殊优待”。比如定义了__init__()方法的类,会在创建对象的时候自动执行__init__()方法中的操作。

(可以通过dir()来查看对象所拥有的特殊方法,比如dir(1))

运算符

Python的运算符是通过调用对象的特殊方法实现的。比如:

'abc' + 'xyz'               # 连接字符串

实际执行了如下操作:

'abc'.__add__('xyz')

所以,在Python中,两个对象是否能进行加法运算,首先就要看相应的对象是否有__add__()方法。一旦相应的对象有__add__()方法,即使这个对象从数学上不可加,我们都可以用加法的形式,来表达obj.__add__()所定义的操作。在Python中,运算符起到简化书写的功能,但它依靠特殊方法实现。

Python不强制用户使用面向对象的编程方法。用户可以选择自己喜欢的使用方式(比如选择使用+符号,还是使用更加面向对象的__add__()方法)。特殊方法写起来总是要更费事一点。

尝试下面的操作,看看效果,再想想它的对应运算符

(1.8).__mul__(2.0)

True.__or__(False)

内置函数

与运算符类似,许多内置函数也都是调用对象的特殊方法。比如

len([1,2,3])      # 返回表中元素的总数

实际上做的是

[1,2,3].__len__()

相对与__len__(),内置函数len()也起到了简化书写的作用。

尝试下面的操作,想一下它的对应内置函数

(-1).__abs__()

(2.3).__int__()

表(list)元素引用

下面是我们常见的表元素引用方式

li = [1, 2, 3, 4, 5, 6]
print(li[3])

上面的程序运行到li[3]的时候,Python发现并理解[]符号,然后调用__getitem__()方法。

li = [1, 2, 3, 4, 5, 6]
print(li.__getitem__(3))

尝试看下面的操作,想想它的对应

li.__setitem__(3, 0)

{'a':1, 'b':2}.__delitem__('a')

函数

我们已经说过,在Python中,函数也是一种对象。实际上,任何一个有__call__()特殊方法的对象都被当作是函数。比如下面的例子:

class SampleMore(object):
    def __call__(self, a):
        return a + 5

add = SampleMore()     # A function object
print(add(2))          # Call function    
map(add, [2, 4, 5])    # Pass around function object

add为SampleMore类的一个对象,当被调用时,add执行加5的操作。add还可以作为函数对象,被传递给map()函数。

Python分享之特殊方法与多范式_运算符

标签:__,.__,范式,Python,对象,add,分享,方法
From: https://blog.51cto.com/u_15974582/8214334

相关文章

  • 利用python简单采集公众号
    今天用python写一个采集公众号文章的爬虫,目前还没有做具体的优化,只供学习,一起来看看吧。```pythonimportrequestsfrombs4importBeautifulSoupproxy_host="www.duoip.cn"proxy_port=8000url="https://mp.weixin.qq.com/s?"#微信公众号文章网址headers={"User-A......
  • 运用python采集抖音评论
    今天给大家带来的是用Python编写的一个简单的抖音爬虫程序,来采集抖音评论的内容。让我们一起来看学一下吧。```pythonimportrequestsimportjson#设置代理信息proxy_host='https://www.duoip.cn/get_proxy'proxy_port=8000#爬虫网址url='https://www.douyin.com/vi......
  • Python工具箱系列(四十五)
    内存映射文件mmap是python内置标准库,提供将文件映射到内存的机制。通过mmap将文件映射到内存之后,我们可以高效并优雅地对文件的内容进行随机访问。通常打开文件后要通过组合各种seek()、read()和write()调用来访问,使用mmap后可以简单将文件映射到内存,然后通过切片操作来访问数据......
  • python多进程提高性能
    在Python中,可以使用multiprocessing模块来实现多进程。下面是一个简单的例子,用来演示在Python中如何创建多个子进程:importmultiprocessingdefworker(num):"""打印子进程的编号"""print('Worker',num)if__name__=='__main__':#创建4个子进程foriin......
  • 《python基础教程(第二版)》学习笔记 文件和素材(第11章)
    《python基础教程(第二版)》学习笔记文件和素材(第11章)打开文件:open(filename[,mode[,buffering]])mode是读写文件的模式f=open(r'c:\somefile.txt')#默认是读模式+表示是可以读写;r读模式;w写模式;a追加模式;b二进制模式;换行符在Windows为\r\n,在Unix中为\n,Python会自动转......
  • 《python基础教程(第二版)》学习笔记 函数(第6章)
    《python基础教程(第二版)》学习笔记函数(第6章)创建函数:deffunction_name(params):blockreturnvalues记录函数:deffunction_name(params):'NOTE'#注释blockreturnvaluesfunction_name.__doc__help(function_name)return#没有返回值位置参数和关键字参数:关......
  • 《python基础教程(第二版)》学习笔记 类和对象(第7章)
    《python基础教程(第二版)》学习笔记类和对象(第7章)定义类classPerson:defsetName(self,name):self.name=namedefgetName(self):returnself.namefoo=Person()foo.setName('AAA')foo.getName()foo.namefoo.name='BBB'私有属性,名字前面加上......
  • 在Python中获取飞书群消息,你可以使用`feishu-python-sdk`这个库¹。这是一个用于和飞
    在Python中获取飞书群消息,你可以使用`feishu-python-sdk`这个库¹。这是一个用于和飞书开放平台交互的Python库,它支持同步调用和异步调用,实现了订阅事件和卡片交互回调¹。首先,你需要安装这个库,可以使用pip进行安装:```pythonpipinstallfeishu-python-sdk```然后,你可以使用以......
  • 从零开始构建报警中心:part02 使用python脚本接收zabbix报警信息-2
    在上篇中完成了对报警媒介与动作的配置在动作配置中,有一项是发送到配置,这个需要配置到用户与报警媒介之间进行绑定。具体操作如下点击“管理”-》“用户”,点击要操作的用户再点击“报警媒介”,点击“添加”进行操作在弹出的对话框上点选类型,选择之前对应配置的报警媒介,并添加。如果......
  • Python IDE
    1.VimVim可以说是Python最好的IDE。Vim是高级文本编辑器,旨在提供实际的Unix编辑器‘Vi’功能,支持更多更完善的特性集。Vim不需要花费太多的学习时间,一旦你需要一个无缝的编程体验,那么就会把Vim集成到你的工作流中。2.EclipsewithPyDevEclipse是非常流行的IDE,而且......