提及装饰器,就不得不说python自带的多少个装饰器:

python
websocket

1. 真值测量试验

所谓真值测量试验,是指当一种档次对象出现在if也许while条件语句中时,对象值表现为True恐怕False。弄精晓各个状态下的真值对我们编写程序有珍视的意思。想深造越来越多python知识能够加群
499754614,备注豆瓜。

对于一个指标a,其真值定义为:

  • True : 假若函数truth_test(a)返回True。
  • False:假设函数truth_test(a)返回False。

以if为例(while是等价的,不做赘述),定义函数truth_test(x)为:

def truth_test(x): if x: return True else: return False

1、@property  
将某函数,做为属性使用

安装

2.指标的真值测量试验

日常来说,对于二个对象,在满意以下原则之不时,真值测验为False;不然真值测量试验为True。

  • 其置于函数__bool__()返回False
  • 其放置函数__len__()返回0

(1)以下种类对象真值测验为真:

class X: pass

(2)以下真值测量检验为假:

class Y: def __bool__(self): return False

(3)以下真值测验为假:

class Z: def __len__(self): return 0

踏向python3脚本情况,测验进度如下:

>>> class X: ... pass ... >>> class Y: ... def __bool__(self): ... return False ... >>> class Z: ... def __len__(self): ... return 0 ... >>> def truth_test(x): ... if x: ... return True ... else: ... return False ... >>> x = X() >>> y = Y() >>> z = Z() >>> truth_test(x) True >>> truth_test(y) False >>> truth_test(z) False >>>

 @property 修饰,正是将艺术,产生叁个个性来利用。

pip install websocket-client

3. 左近对象的真值

下边是大面积的真值为False的事态:

  • 常量:None and False.
  • 数值0值: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • 队列只怕聚众为空:”, (), [], {}, set(), range(0)

跻身python3脚本境况,测验进度如下:

>>> truth_test(None) False >>> truth_test(False) False >>> truth_test(0) False >>> truth_test(0.0) False >>> truth_test(0j) #复数 False >>> truth_test(Decimal(0)) #十进制浮点数 False >>> truth_test(Fraction(0,1)) #分数 False >>> truth_test(Fraction(0,2)) #分数 False >>> truth_test('') False >>> truth_test(()) False >>> truth_test({}) False >>> truth_test(set()) False >>> truth_test(range(0)) #序列 False >>> truth_test(range(2,2)) #序列 False

除此以外的别的取值,真值测验应为True。

class A():


    @property
    def pfunc(self):
        return self.value

    @pfunc.setter
    def pfunc(self,value):
        self.value = value

    @property
    def pfunc1(self):
        print('this is property')

if __name__=="__main__":

    A.pfunc = 9
    print A.pfunc
    A.pfunc1

 

4.局地有趣的例证

下边是有些风趣的例证,原理不领前后相继面包车型地铁分解。

>>> if 1 and Fraction(0,1): ... print(True) ... else: ... print(False) ... False >>> if 1 and (): ... print(True) ... else: ... print(False) ... False >>> if 1 and range(0): ... print(True) ... else: ... print(False) ... False >>> if 1 and None: ... print(True) ... else: ... print(False) ... False >>> if 1+2j and None: ... print(True) ... else: ... print(False) ... False

 

 

2、@classmethod
 修饰类的措施

先来看一下,长连接调用情势:

带修饰类方法:cls做为方法的率先个参数,隐式的将类做为对象,传递给艺术,调用时不用实例化。

    ws = websocket.WebSocketApp("ws://echo.websocket.org/",
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()

普通函数方法:self做为第五个参数,隐式的将类实例传递给艺术,调用方法时,类必需实例化。

 

class A():
    def func(self,x,y):
        return x * y

    @classmethod
    def cfunc(cls,x,y):
        return x * y

if __name__=="__main__":
    print A().func(5,5)
    print A.cfunc(4,5)

 长连接,参数介绍:

 

(1)url:
websocket的地址。

3、@staticmethod
 修饰类的法子

(2)header:
客商发送websocket握手央浼的伸手头,{‘head1:value1′,’head2:value2’}。

1)是把函数嵌入到类中的一种格局,函数就属于类,同不经常候表明函数无需会见这一个类

(3)on_open:在创设Websocket握手时调用的可调用对象,那些措施唯有二个参数,便是此类本人。

 2)使用修饰服,修饰方法,无需实例化

(4)on_message:这些目的在吸收接纳到服务器重临的新闻时调用。有五个参数,三个是此类本身,一个是大家从服务器获取的字符串(utf-8格式)。

 

(5)on_error:那么些目的在遭遇错误时调用,有多少个参数,首个是此类自己,第贰个是非常对象。

class A():
    def func(self,x,y):
        return x * y


    @staticmethod
    def sfunc(x,y):
        return x * y


if __name__=="__main__":

    print A.sfunc(6,5)

(6)on_close:在遇见延续关闭的图景时调用,参数独有贰个,正是此类自己。

 

(7)on_cont_message:那个目的在吸收接纳到三番五次帧数据时被调用,有七个参数,分别是:类自个儿,从服务器接受的字符串(utf-8),接二连三标识。

 

(8)on_data:当从服务器收到到音讯时被调用,有多个参数,分别是:该类自身,接收到的字符串(utf-8),数据类型,接二连三标识。

发表评论

电子邮件地址不会被公开。 必填项已用*标注