python的學(xué)習(xí)小結(jié)

__all__的用法

常晨张危看源碼發(fā)現(xiàn)__init__.py文件中有__all__,關(guān)于它的用法舉個(gè)栗子:

__all__ = ['bar', 'baz']

waz = 5
bar = 10
def baz(): 
  return 'baz'

__all__僅僅影響from foo import *,會(huì)認(rèn)為沒(méi)在__all__中的對(duì)象無(wú)法導(dǎo)入.

from foo import *
print bar
print baz
# waz將會(huì)報(bào)異常
print waz

但如果使用from foo import waz,則能夠?qū)雡az.

classmethod與staticmethod

類(lèi)方法classmethod常用來(lái)創(chuàng)建一個(gè)類(lèi)的實(shí)例,非常像c++中的構(gòu)造函數(shù).

class C: 
  @staticmethod 
  def f(cls, arg1, arg2, ...): # 第一個(gè)參數(shù)為cls
    cls_ = cls(arg1, arg2)
    return cls_

靜態(tài)方法staticmethod可以被類(lèi)調(diào)用C.f()實(shí)例調(diào)用C().f().用于常駐內(nèi)存,并與實(shí)例無(wú)關(guān)的公共方法場(chǎng)景.

class C: 
  @staticmethod 
  def f(arg1, arg2, ...): 
    pass

uuid

uuid(UUID objects according to RFC 4122),工作中常使用uuid模塊來(lái)產(chǎn)生唯一通用標(biāo)示符,代表不同的用戶(hù).

import uuid
uuid1()
uuid2()
uuid3()
uuid4()

super()

調(diào)用父類(lèi)方法時(shí).

class C(B): 
def method(self, arg): 
  super(C, self).method(arg)

等價(jià)于:

class C(B): 
def method(self, arg): 
  super().method(arg)    

super()只能super().__getitem__(name)來(lái)顯式調(diào)用方法,不能super()[name]這樣的隱式調(diào)用.

isinstance(a, (b, c, d))

是下面方式的優(yōu)雅的表達(dá):

if type(a) in (b, c, d):
  return True
else
  return False

創(chuàng)建class

class X:
  a = 1

等價(jià)于

X = type('X', (object,), dict(a=1))

class type(name, bases, dict)name是類(lèi)名,bases是父類(lèi),dict是成員的字典.

字典類(lèi)型初始化

d = {'a':1}
d.get('b',2)  # b不在字典d中,獲取時(shí)初始化b為2

locals()查看本地變量

注釋會(huì)在__doc__出現(xiàn),申明的變量直接出現(xiàn),__file__是文件絕對(duì)路徑.

{
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7fbdc7a04278>, 
'__doc__': '\n  all is here\n', 
'__file__': '/home/kushao1267/workspace/restless/restless/ss.py', 
'a': [1, 2, 3],  # 申明的變量
'__package__': None, 
'__cached__': None, 
'__name__': '__main__', 
'__builtins__': <module 'builtins' (built-in)>, 
'__spec__': None
}

zip與unzip

a = [1, 2, 3]
b = [4, 5, 6]

def zip_func(a, b):
    """
        [1, 2, 3],[4, 5, 6] --> [(1, 4), (2, 5), (3, 6)]
    """
    zip_ = list(zip(a, b))
    return zip_

def unzip_func(zip_):
    """
        [(1, 4), (2, 5), (3, 6)] --> [(1, 2, 3), (4, 5, 6)]
    """
    a, b = list(zip(*zip_))  # zip(*) 是解壓
    return list(a), list(b)

if __name__ == '__main__':
    zip_ = zip_func(a, b)
    a, b = unzip_func(zip_)
    print(zip_, a, b)

關(guān)鍵詞使用

常常在開(kāi)發(fā)中使用python已有的關(guān)鍵詞,例如class,type,所以我們常常用class_,type_以區(qū)分,因?yàn)閏lass和type都是對(duì)象,能夠被賦值,后面coding時(shí)容易出現(xiàn)錯(cuò)誤.

try...except...else語(yǔ)句

try:
  todo
except:
  # catch Exception
else:
  todo  # try未觸發(fā)異常時(shí)執(zhí)行此處

python下的路徑

import os
def function():
    print(os.path.abspath(__file__))  # 當(dāng)前腳本所在絕對(duì)路徑
    print(os.path.dirname(os.path.abspath(__file__)))  # 當(dāng)前腳本所在的路徑
    print(os.path.dirname(os.path.dirname(
        os.path.abspath(__file__))))  # 當(dāng)前腳本所在的上移級(jí)路徑

if __name__ == '__main__':
    function()

輸出為

/home/kushao1267/ss_work/test.py
/home/kushao1267/ss_work
/home/kushao1267
[Finished in 0.3s]

所以,__file__代表即為當(dāng)前腳本文件,os.path.abspath()方法獲取一個(gè)文件的絕對(duì)路徑,os.path.dirname()獲取其路徑名或上一級(jí)路徑名.

itertools的chain()

很多時(shí)候需要對(duì)不同的容器中的對(duì)象進(jìn)行相同處理

import itertool
a = [1,2,3]
b= [3,4,5]
for i in itertool.chain(a,b):
print(i)

而下面的方式內(nèi)存消耗將會(huì)大很多,因?yàn)闀?huì)創(chuàng)建a+b的一個(gè)容器

for i in a+b:
print(i)

with語(yǔ)句

with語(yǔ)句的上下文context是通過(guò)來(lái)實(shí)現(xiàn)嵌套的.
比如:

with A() as a, B() as b: 
  suite

等價(jià)于

withA()asa:
  withB()asb:
    suite

上下文管理器contextmanager

@contextlib.contextmanager 修飾器可用于with語(yǔ)句中,且免于自己定義__enter__()__exit__()方法
例如:

fromcontextlibimportcontextmanager
@contextmanager
deftag(name):
  print("<%s>"%name)//此處的code相當(dāng)于__enter__()
  yield//等待todo語(yǔ)句完成
  print("</%s>"%name)//此處的code相當(dāng)于__exit__()
>>>withtag("h1"):
...  print("foo")//todo語(yǔ)句
...
<h1>
foo
</h1>

上下文裝飾器ContextDecorator

定義上下文裝飾器

from contextlib import ContextDecorator
class mycontext(ContextDecorator): 
  def __enter__(self): 
    print('Starting') 
    return self 
  def __exit__(self, *exc): 
    print('Finishing') 
    return False

裝飾器方式如下:

>>> @mycontext()  
... def function():
... print('The bit in the middle')
...
>>> function()
Starting
The bit in the middle
Finishing

with語(yǔ)句方式如下:

   >>> with mycontext():  
   ... print('The bit in the middle')
   ...Starting
      The bit in the middle
      Finishing

function()中的內(nèi)容將在繼承ContextDecorator的裝飾器mycontext()的__enter__()__exit__()之間執(zhí)行.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饼记,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子荧嵌,更是在濱河造成了極大的恐慌呛踊,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啦撮,死亡現(xiàn)場(chǎng)離奇詭異谭网,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)赃春,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)愉择,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人织中,你說(shuō)我怎么就攤上這事锥涕。” “怎么了狭吼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵层坠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我刁笙,道長(zhǎng)窿春,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任采盒,我火速辦了婚禮,結(jié)果婚禮上蔚润,老公的妹妹穿的比我還像新娘磅氨。我一直安慰自己,他們只是感情好嫡纠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布烦租。 她就那樣靜靜地躺著,像睡著了一般除盏。 火紅的嫁衣襯著肌膚如雪叉橱。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天者蠕,我揣著相機(jī)與錄音窃祝,去河邊找鬼。 笑死踱侣,一個(gè)胖子當(dāng)著我的面吹牛粪小,可吹牛的內(nèi)容都是我干的大磺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼探膊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杠愧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起逞壁,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤流济,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后腌闯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绳瘟,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年绑嘹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稽荧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡工腋,死狀恐怖姨丈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情擅腰,我是刑警寧澤蟋恬,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站趁冈,受9級(jí)特大地震影響歼争,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渗勘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一沐绒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旺坠,春花似錦乔遮、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至璧疗,卻和暖如春坯辩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背崩侠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工漆魔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓有送,卻偏偏與公主長(zhǎng)得像淌喻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子雀摘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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