0%

Python之魔法函数

Python是一个很类似于matlab的语言,都是一种高层解释型语言,区别于C、C++,C、C++则是编译通过后才执行(说明语法都没有错误),Python执行之前不需要编译链接,直接是一行行执行,将除了缩进的语言都执行一遍,为了防止在读入包/模块时候出现代码执行,出现了__name__的魔法函数,也是Python的一种内置属性,除了__name__,在读faster rcnn的torch源码时候,也会频繁遇到__call__()、 __ len__()、__ init__() 、__ getitem__()等一类魔法函数,特地去搜了搜,网上讲的很好,链接如下:

if name == ‘main‘ 如何正确理解? - 知乎 (zhihu.com)

Python:实例讲解Python中的魔法函数(高级语法) - 知乎 (zhihu.com)

由于上述链接讲的都很完备,下面只进行简单的总结一下。

__name__

大概说一下__name__吧,其本质就是Python的一个内置属性,当自己作为主文件执行时,__name__是”__main__“,而当作为模块时,则__name__就是模块名,自己也特地测试了一个,图如下,其中Write_coe是我将Python参数存储为FPGA的RAM文件格式写的自定义模块函数。

WYpEdg.png

魔法函数

魔法函数是类中的可重写的方法,有助于更灵活方便的使用类。

1、字符串表示:__str__和__repr__的区别

在Python类中,这两个方法的区别主要如下:

print类的时候,首先找__str__方法,若__str__方法未进行重写,则调用__repr__(或者可以说__str__未重写的时候,初始定义和__repr__一样的)

而在交互式窗口直接打实例化类的时候,则调用__repr__方法,其本质就是打印一个str字符串:类名+object at+内存地址。当然__repr__也可以重写。

2、集合、序列相关:

2.1、__len__

在使用len(某个class) ,而len的函数本质是将该class作为参数传入,然后调用的是类自身的__len__方法。

2.2、__getitem__

- - - - - - - - - - - - - - 本文结束啦,感谢您的观看 - - - - - - - - - - - - - -