Python 高級編程系列(一)

Python 常見用法(一)

  • 一:列表推導(dǎo)

顧名思義就是通過一個列表推導(dǎo)出另外一個

#-*- coding:utf-8 -*-
import time
__author__ = 'Administrator'
#"常用列表賦值"
number = range(100000000)
evens = []
i = 0;
begin = time.time()
while i < len(number):
    if i % 2 == 0:
        evens.append(i)
    i = i + 1;
end = time.time()
print("耗時為",end-begin)
#"推導(dǎo)公式賦值"
begin = time.time()
evens = [i for i in range(100000000) if i % 2 ==0]
end = time.time()
print("耗時為",end-begin)

#"結(jié)果分別為: 耗時為 35.95461106300354"
#"            耗時為 13.877903461456299"

#還有一種常見的情況 enumerate內(nèi)建函數(shù)函數(shù)
i = 0
seq = ["one","two","three","four"]
for element in seq:
    seq[i] = '%d:%s' %(i,seq[i])
seq = ["one","two","three","four"]
for i,element in enumerate(seq):
    seq[i] = '%d:%s' %(i,seq[i])

第一種在其他語言中使用這樣賦值會比較常見虑省,但是Python使用這種賦值語句執(zhí)行速度會比較慢,因為通過這種方式解釋程序必須通過一個計數(shù)器跟蹤列處理列表的修改,第二種效率更高同時更加簡練涉及到的變量更少,缺陷自然減少。

  • 二: 迭代器

    1 . 通過 iter() 內(nèi)建函數(shù)構(gòu)建

    2 . __next__() 函數(shù)取值(python2 使用的是 next()函數(shù))

line = "helloworld"
itertable = iter(line)
num = 0;
while True:
    try:
        #num = num+1;           放這里num輸出 11
        print(itertable.__next__())
        num = num+1;            #這里num輸出 10
    except StopIteration:
        break
print(num)

itertool 是一個用C語言寫的迭代器模塊避咆,據(jù)說是最高效的迭代器汪厨。



  • 三: 生成器

    1 . 基于 yield 返回的也是一個迭代器 (個人理解yield相當于一個列表緩沖區(qū)暫存數(shù)據(jù),處理完之后返回結(jié)果) 常用在 將返回一個序列作為循環(huán)時
def function():
    a,b = 0,1
    while b < 100:
        yield b
        a,b = b,a+b
fib = function()
while True:
    try:
        print(fib.__next__())
        num = num+1;
    except StopIteration:
        break
[print(function.)]
print(num)

iter = (x**2 for x in range(10) if x % 2 ==0 )
# "這種方式生成的也是一個迭代器"
  • 四:裝飾器

  1. 裝飾函數(shù)

裝飾器使得函數(shù)和方法的封裝(接收一個函數(shù)返回另一個功能強大的函數(shù))

def mydecorator(args):  #裝飾器函數(shù)的參數(shù)  可以不要
    def mydecorator(func):  #裝飾器自身實現(xiàn) 必須要的
        def _mydecorator(*arg,**kwargs):  ##處理參數(shù)静秆,相當于再嵌套一層參數(shù)傳遞的函數(shù) 這是固定結(jié)構(gòu)
            def wrapper():      #包裝器
                ## 在調(diào)用時實際數(shù)是做一些填充工作 常常用來檢測一個函數(shù)的執(zhí)行時間
                print(func.__name__+"  函數(shù) begin 時間為:" +  str(time.time())+"mydecorator 的參數(shù)  " + args)
                func(*arg,**kwargs)
                print(func.__name__+"  函數(shù)end 時間為: " + str(time.time()) +"mydecorator 的參數(shù)  " + args)
                return func
            wrapper()
        return _mydecorator
    return  mydecorator
@mydecorator("mycanshu")    ## 這是一種比較實用的方式不改變函數(shù)的內(nèi)在結(jié)構(gòu)把功能加上去 等價于 myfun = mydecorator(myfun) 其中 mycanshu 是裝飾器的參數(shù)
def myfunc(x,y):
    time.sleep(3)
    print(1+2+x+y)

myfunc(3,4)

輸出
# "myfunc  函數(shù) begin 時間為:1501228594.8052733mydecorator 的參數(shù)  mycanshu"
# "10"
# "myfunc  函數(shù)end 時間為: 1501228597.8063107mydecorator 的參數(shù)  mycanshu"

  1. 裝飾類
    類裝飾和函數(shù)裝飾類似
class test_deco:
    def __init__(self):
        print("調(diào)用構(gòu)造函數(shù)")
    @staticmethod   ##靜態(tài)方法
    def show_function():
        print("這是靜態(tài)的請求方法")
    @staticmethod
    def out__function():
        print("這是靜態(tài)的解鎖方法")

def mydecorator(cls,myfun_arg):
    print(cls.__name__,myfun_arg)    #這里輸出的是test_deco myfun_arg
    def __mydecorator(func):
        print(func.__name__) #這里輸出的是myfun
        def __mydecorator(*arg,**kwargs):
            print(arg)  這里輸出的時(1,2)
            def wrapper():
                print("這里")
                print(func.__name__+"  函數(shù) begin 時間為:" + str(time.time())+"   mydecorator 的參數(shù) " + myfun_arg )
                cls.show_function()
                func(*arg,**kwargs)
                cls.show_function()
                print(func.__name__+"  函數(shù)end 時間為: " + str(time.time()) +"mydecorator 的參數(shù)  " + myfun_arg)
            wrapper()
                        #分別輸出
            '''
            這里
            myfun  函數(shù) begin 時間為:1501230826.2434075   mydecorator 的參數(shù) myfun_arg
            這是靜態(tài)的請求方法
            myfun() show 2
            這是靜態(tài)的請求方法
            myfun  函數(shù)end 時間為: 1501230829.2444615mydecorator 的參數(shù)  myfun_arg
            '''
        return __mydecorator
    return __mydecorator
@mydecorator(test_deco,"myfun_arg")


def myfun(x,y):
    time.sleep(3)
    print("myfun() show",x*y)

myfun(1,2)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市巡李,隨后出現(xiàn)的幾起案子抚笔,更是在濱河造成了極大的恐慌,老刑警劉巖侨拦,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殊橙,死亡現(xiàn)場離奇詭異,居然都是意外死亡狱从,警方通過查閱死者的電腦和手機膨蛮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矫夯,“玉大人鸽疾,你說我怎么就攤上這事⊙得玻” “怎么了制肮?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長递沪。 經(jīng)常有香客問我豺鼻,道長,這世上最難降的妖魔是什么款慨? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任儒飒,我火速辦了婚禮,結(jié)果婚禮上檩奠,老公的妹妹穿的比我還像新娘桩了。我一直安慰自己,他們只是感情好埠戳,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布井誉。 她就那樣靜靜地躺著,像睡著了一般整胃。 火紅的嫁衣襯著肌膚如雪颗圣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音在岂,去河邊找鬼奔则。 笑死,一個胖子當著我的面吹牛蔽午,可吹牛的內(nèi)容都是我干的易茬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼祠丝,長吁一口氣:“原來是場噩夢啊……” “哼疾呻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起写半,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尉咕,沒想到半個月后叠蝇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡年缎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年悔捶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片单芜。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜕该,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洲鸠,到底是詐尸還是另有隱情堂淡,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布扒腕,位于F島的核電站绢淀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瘾腰。R本人自食惡果不足惜皆的,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹋盆。 院中可真熱鬧费薄,春花似錦、人聲如沸栖雾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岩灭。三九已至拌倍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柱恤。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工数初, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梗顺。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓泡孩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寺谤。 傳聞我的和親對象是個殘疾皇子仑鸥,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容