-
最隨意的代碼查看全部
-
Python把0、空字符串''和None看成 False,其他數(shù)值和非空字符串都看成 True查看全部
-
1. 在計(jì)算 a and b 時(shí),如果 a 是 False,則根據(jù)與運(yùn)算法則,整個(gè)結(jié)果必定為 False,因此返回 a;如果 a 是 True,則整個(gè)計(jì)算結(jié)果必定取決與 b,因此返回 b。 2. 在計(jì)算 a or b 時(shí),如果 a 是 True,則根據(jù)或運(yùn)算法則,整個(gè)計(jì)算結(jié)果必定為 True,因此返回 a;如果 a 是 False,則整個(gè)計(jì)算結(jié)果必定取決于 b,因此返回 b。查看全部
-
因?yàn)镻ython把0、空字符串''和None看成 False,其他數(shù)值和非空字符串都看成 True查看全部
-
總結(jié)一下就是,多任務(wù)的實(shí)現(xiàn)有3種方式: 多進(jìn)程模式; 多線程模式; 多進(jìn)程+多線程模式。查看全部
-
json模塊的dumps()和loads()函數(shù)是定義得非常好的接口的典范。當(dāng)我們使用時(shí),只需要傳入一個(gè)必須的參數(shù)。但是,當(dāng)默認(rèn)的序列化或反序列機(jī)制不滿足我們的要求時(shí),我們又可以傳入更多的參數(shù)來定制序列化或反序列化的規(guī)則,既做到了接口簡單易用,又做到了充分的擴(kuò)展性和靈活性。查看全部
-
可選參數(shù)default就是把任意一個(gè)對(duì)象變成一個(gè)可序列為JSON的對(duì)象,我們只需要為Student專門寫一個(gè)轉(zhuǎn)換函數(shù),再把函數(shù)傳進(jìn)去即可: def student2dict(std): return { 'name': std.name, 'age': std.age, 'score': std.score } print(json.dumps(s, default=student2dict)) 這樣,Student實(shí)例首先被student2dict()函數(shù)轉(zhuǎn)換成dict,然后再被順利序列化為JSON。 不過,下次如果遇到一查看全部
-
寫文件 寫文件和讀文件是一樣的,唯一區(qū)別是調(diào)用open()函數(shù)時(shí),傳入標(biāo)識(shí)符'w'或者'wb'表示寫文本文件或?qū)懚M(jìn)制文件: >>> f = open('/Users/michael/test.txt', 'w') >>> f.write('Hello, world!') >>> f.close() 你可以反復(fù)調(diào)用write()來寫入文件,但是務(wù)必要調(diào)用f.close()來關(guān)閉文件。當(dāng)我們寫文件時(shí),操作系統(tǒng)往往不會(huì)立刻把數(shù)據(jù)寫入磁盤,而是放到內(nèi)存緩存起來,空閑的時(shí)候再慢慢寫入。只有調(diào)用close()方法時(shí),操作系統(tǒng)才保證把沒有寫入的數(shù)據(jù)全部寫入磁盤。忘記調(diào)用close()的后果是數(shù)據(jù)可能只寫查看全部
-
int()函數(shù)可能會(huì)拋出ValueError,所以我們用一個(gè)except捕獲ValueError,用另一個(gè)except捕獲ZeroDivisionError。 此外,如果沒有錯(cuò)誤發(fā)生,可以在except語句塊后面加一個(gè)else,當(dāng)沒有錯(cuò)誤發(fā)生時(shí),會(huì)自動(dòng)執(zhí)行else語句: try: print 'try...' r = 10 / int('a') print 'result:', r except ValueError, e: print 'ValueError:', e except ZeroDivisionError, e: print 'Zero查看全部
-
type()函數(shù)既可以返回一個(gè)對(duì)象的類型,又可以創(chuàng)建出新的類型,比如,我們可以通過type()函數(shù)創(chuàng)建出Hello類,而無需通過class Hello(object)...的定義: >>> def fn(self, name='world'): # 先定義函數(shù) ... print('Hello, %s.' % name) ... >>> Hello = type('Hello', (object,), dict(hello=fn)) # 創(chuàng)建Hello class >>> h = Hello() >>> h.hello() Hello, world. >>> print(type(H查看全部
-
__str__ 我們先定義一個(gè)Student類,打印一個(gè)實(shí)例: >>> class Student(object): ... def __init__(self, name): ... self.name = name ... >>> print Student('Michael') <__main__.Student object at 0x109afb190> 打印出一堆<__main__.Student object at 0x109afb190>,不好看。 怎么才能打印得好看呢?只需要定義好__str__()方法,返回一個(gè)好看的字符串就可以了: >>> c查看全部
-
Mixin 在設(shè)計(jì)類的繼承關(guān)系時(shí),通常,主線都是單一繼承下來的,例如,Ostrich繼承自Bird。但是,如果需要“混入”額外的功能,通過多重繼承就可以實(shí)現(xiàn),比如,讓Ostrich除了繼承自Bird外,再同時(shí)繼承Runnable。這種設(shè)計(jì)通常稱之為Mixin。 為了更好地看出繼承關(guān)系,我們把Runnable和Flyable改為RunnableMixin和FlyableMixin。類似的,你還可以定義出肉食動(dòng)物CarnivorousMixin和植食動(dòng)物HerbivoresMixin,讓某個(gè)動(dòng)物同時(shí)擁有好幾個(gè)Mixin: class Dog(Mammal, RunnableMixin, Car查看全部
-
@property的實(shí)現(xiàn)比較復(fù)雜,我們先考察如何使用。把一個(gè)getter方法變成屬性,只需要加上@property就可以了,此時(shí),@property本身又創(chuàng)建了另一個(gè)裝飾器@score.setter,負(fù)責(zé)把一個(gè)setter方法變成屬性賦值,于是,我們就擁有一個(gè)可控的屬性操作: >>> s = Student() >>> s.score = 60 # OK,實(shí)際轉(zhuǎn)化為s.set_score(60) >>> s.score # OK,實(shí)際轉(zhuǎn)化為s.get_score() 60 >>> s.score = 9999 Traceback (most recent call last): ...查看全部
-
裝飾器log和property @property def score(self): return self._score查看全部
-
使用__slots__ 但是,如果我們想要限制class的屬性怎么辦?比如,只允許對(duì)Student實(shí)例添加name和age屬性。 為了達(dá)到限制的目的,Python允許在定義class的時(shí)候,定義一個(gè)特殊的__slots__變量,來限制該class能添加的屬性: >>> class Student(object): ... __slots__ = ('name', 'age') # 用tuple定義允許綁定的屬性名稱 ... 然后,我們試試: >>> s = Student() # 創(chuàng)建新的實(shí)例 >>> s.name = 'Michael' # 綁定屬性'name' >>> s.a查看全部
舉報(bào)
0/150
提交
取消