国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Py tricks(1): python實(shí)現(xiàn)不可修改的常量

codergarden / 3364人閱讀

摘要:因?yàn)榉N種原因,并未提供如一樣的修飾符,換言之,中沒有常量,至少截止年年末,還沒有這個(gè)打算。其實(shí)可以曲線救國(guó)實(shí)現(xiàn)常量。其函數(shù)原型為其中為變量名,為變量值。而則以的形式保存了內(nèi)所有可寫的屬性,為變量名,為變量值。

因?yàn)榉N種原因,Python并未提供如C/C++/Java一樣的const修飾符,換言之,python中沒有常量,至少截止2015年年末,還沒有這個(gè)打算。Python程序一般通過約定俗成的變量名全大寫的形式來表示這是一個(gè)常量,但是這終究不是長(zhǎng)久之計(jì)。

其實(shí)Python可以曲線救國(guó)實(shí)現(xiàn)常量。

在Python的面向?qū)ο笾校?b>object.__setattr__()這個(gè)built-in function在對(duì)類的屬性賦值的時(shí)候會(huì)自動(dòng)調(diào)用。其函數(shù)原型為:

object.__setattr__(self, name, value)

其中name為變量名,value為變量值。

object.__dict__則以dict的形式保存了object內(nèi)所有可寫的屬性,key為變量名,value為變量值。

那么我們就有可能通過建立一個(gè)const類,對(duì)其object.__setattr__()方法進(jìn)行overwrite,在對(duì)屬性值進(jìn)行賦值的時(shí)候判斷,如果屬性存在,則表示這是對(duì)常量的重賦值操作,從而拋出異常,如果屬性不存在,則表示是新聲明了一個(gè)常量,可以進(jìn)行賦值操作。

const.py 代碼如下:

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

class _const:
    class ConstError(TypeError) : pass

    def __setattr__(self, key, value):
        # self.__dict__
        if self.__dict__.has_key(key):
            raise self.ConstError,"constant reassignment error!"
        self.__dict__[key] = value

import sys

sys.modules[__name__] = _const()

其中,1-10行是上述思路的類的一個(gè)實(shí)現(xiàn)。
第12-14行的寫法值得說明。我們盡管擁有了_const類,但是我們當(dāng)前使用這個(gè)類仍然需要

import const

c = const._const()
c.TEST_CONSTANT = "test"

這樣的形式來聲明一個(gè)常量TEST_CONSTANT,然而我們希望用更簡(jiǎn)潔的方法進(jìn)行常量的賦值。形如:

import const

const.TEST_CONSTANT = "test"

在python中,__name__內(nèi)置屬性是當(dāng)前的class或者type的值。通俗地講,__name__的值有以下兩種形式:

如果運(yùn)行某一個(gè)py文件,在該文件中,__name__的值為"__main__"

如果import了某一個(gè)py文件,那么在該import的文件中,__name__的值為該文件的文件名(不帶.py后綴)

sys.modules是一個(gè)dict對(duì)象,包括了當(dāng)前上下文中python已經(jīng)load的所有模塊的信息,dict的key為文件名,value為模塊對(duì)象。

在const.py 中,14行的寫法等價(jià)于

import const

sys.modules["const"] = _const()

即,讓_const類作為模塊的入口點(diǎn),引入const.py等價(jià)于聲明了一個(gè)_const類的實(shí)例。

至此python的常量實(shí)現(xiàn)完畢,使用test.py測(cè)試:

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

import const

const.TEST = "test"
print const.TEST
const.TEST1 = "test1"
print const.TEST1
const.TEST = "test"
print const.TEST

打印信息如下:

test
test1
Traceback (most recent call last):
  File "H:/code/test.py", line 9, in 
    const.TEST = "test"
  File "H:codeconst.py", line 9, in __setattr__
    raise self.ConstError,"constant reassigning error!"
const.ConstError: constant reassignment error!

成功為兩常量賦值,在試圖修改第一個(gè)常量值時(shí)拋出異常:)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/37655.html

相關(guān)文章

  • setup.py 技巧

    摘要:本文原文是在開始之前,我要聲明我們要解釋的是技巧。不是最佳實(shí)踐,并且在至少一種情況下,它是不可取的。技巧這些技巧使得我的包管理更容易一點(diǎn)。我很確定我的一些讀者使用這個(gè)技巧會(huì)有一個(gè)嚴(yán)重的問題。盡管如此,因?yàn)檫@些技巧,我喜歡讓事情簡(jiǎn)單明了。 本文原文是 setup.py tricks showImg(http://pydanny.com/static/setup.png); 在...

    PiscesYE 評(píng)論0 收藏0
  • Java與Python詳細(xì)對(duì)比

    摘要:序列化的這種過程,我們將其稱為腌制。而把模塊編譯成二進(jìn)制語言程序的這個(gè)過程叫做字節(jié)編譯,這個(gè)過程會(huì)產(chǎn)生一個(gè)與編譯的模塊對(duì)應(yīng)的文件。 常量: 在Python中常量的使用并不像java等其他編程語言一樣有特定的常量實(shí)現(xiàn)的關(guān)鍵字,在Python中定義需要用對(duì)象的方法來創(chuàng)建。 showImg(https://segmentfault.com/img/bVP6mZ?w=1232&h=703); ...

    tianhang 評(píng)論0 收藏0
  • Java與Python詳細(xì)對(duì)比

    摘要:序列化的這種過程,我們將其稱為腌制。而把模塊編譯成二進(jìn)制語言程序的這個(gè)過程叫做字節(jié)編譯,這個(gè)過程會(huì)產(chǎn)生一個(gè)與編譯的模塊對(duì)應(yīng)的文件。 常量: 在Python中常量的使用并不像java等其他編程語言一樣有特定的常量實(shí)現(xiàn)的關(guān)鍵字,在Python中定義需要用對(duì)象的方法來創(chuàng)建。 showImg(https://segmentfault.com/img/bVP6mZ?w=1232&h=703); ...

    sydMobile 評(píng)論0 收藏0
  • tensorflow測(cè)試代碼

    TensorFlow是一個(gè)強(qiáng)大的開源機(jī)器學(xué)習(xí)框架,它的設(shè)計(jì)目的是使構(gòu)建、訓(xùn)練和部署深度神經(jīng)網(wǎng)絡(luò)變得更加容易。在TensorFlow中,測(cè)試代碼是非常重要的一部分,因?yàn)樗梢詭椭_保代碼的正確性,并且在進(jìn)行修改或添加新功能時(shí),測(cè)試代碼可以保證您的代碼沒有破壞原來的功能。 在本文中,我們將介紹如何編寫和運(yùn)行TensorFlow測(cè)試代碼。 1. 使用pytest進(jìn)行測(cè)試 pytest是一個(gè)Pyt...

    BlackMass 評(píng)論0 收藏2792
  • Python入門指引

    摘要:或者輸入調(diào)用模塊模塊也就是源文件進(jìn)入交互命令模式參數(shù)傳遞命令行的參數(shù)會(huì)賦值給模塊的變量。操作符是向下取數(shù),小數(shù)位為。每一個(gè)腳本文件稱之為一個(gè)模塊。 Python是比較熱的語言,個(gè)人興趣參考官方文檔:https://docs.python.org/2/tut...邊看邊翻譯了一下(后面會(huì)持續(xù)更新),有興趣的可以看看。 Python具有高級(jí)的數(shù)據(jù)結(jié)構(gòu),能高效地面向?qū)ο缶幊獭K膬?yōu)雅的語法、...

    YacaToy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<