優化python程序的幾點建議


 

1、在需要只讀序列時,最好使用元組而非列表;

2、使用生成器yield,而不是創建大的元組和列表並在其上進行迭代處理;

3、盡量使用python內置的數據結構,而不實現自己的自定義結構;

4、從小字符串中產生大字符串時,不要對小字符串進行連接,而是在列表中累積,最后將字符串列表結合成一個單獨的字符串;

5、如果某個對象需要多次使用屬性訪問,或從某個數據結構中進行訪問,那么較好的做法是創建並使用一個局部變量來訪問對象。

6、可使用字典對多個類似的elif分支進行簡化;

functions=dict(a=add,b=edit,l=list)

functions[recieve]()      其中add(),edit(),list()為函數名,recieve為接收的參數;

7、打開讀寫文件用上下文管理器with語句;

 

 

下面是對python復雜語法的一點補充:

1、動態程序設計與內省函數:

1 __import__()            根據模塊名導入模塊;
2 delattr(obj,name)       從對象obj中刪除名為name的屬性;
3 getattr(obj,name,val)    返回對象obj中名為name的屬性值,如果沒有這一屬性,並且給定了val參數,就返回val;
4 setattr(obj,name,val)    將對象obj中名為name的屬性值設置為val,必要時候創建該屬性;
5 hasattr(obj,name)       如果對象obj中有名為name的屬性,就返回True;
6 locals()              返回當前本地上下文的字典;
7 globals()             返回當前全局上下文的字典;
8 type(obj)             返回對象obj的類型對象;
9 vars(obj)             以字典形式返回對象obj的上下文,如果沒有給定obj,就返回本地上下文;

2、修飾器

修飾器是一個函數,接受一個函數或方法作為其唯一的參數,並返回一個新函數或方法。

一個簡單的修飾器函數:

1 def positieResult(function):
2     def wrapper(*args,**kwargs):
3         result=function(*args,**kwargs)
4         assert result>=0,function.__name__+"()result isn't>=0"
5         return result
6     wrapper.__name__=function.__name__
7     wrapper.__doc__=function.__doc__
8     return wrapper

也可用functools模塊的wraps函數來取代最后對函數的同步語句:

@functools.wraps(function)

def wrapper(*args,**kwargs):

       ...

也可在此函數的外國再包一層函數來給修飾器增加可傳遞參數。

3、def a() ->bool:

       suite

表示對函數使用時加注釋(3.5后加的新功能)

4、函子另一種包含了特殊方法__call()__的類。它提供的一個關鍵好處就是可以維護一些狀態信息。

閉包:

def make_strip_function(characters):
    def strip_function(string):
        return string.strip(characters)
    return strip_function

使用方法:

    strip_a=make_strip_function(',:;.!?')
    strip_a('ladys!')  #returns:'ladys'

相當於二次傳參,下面的函子具有相同的功能和用法

class Strip:
    def __init__(self,characters):
        self.characters=characters
    def __call__(self,string)
        return string.strip(self.characters)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM