-
因為一個數最大的因數是其本身,即 x / 1 = x,再次就是它的一半。
所以通過反復比較a,b兩個數,當a除以b余數為0時,即找到了它們之間的最大公約數。
比如:gcd(25,15)=>gcd(15,10)=>gcd(10,5)=>gcd(5,0),返回的a值5就是結果。
再如:gcd(15,25)=>gcd(25,15)=>gcd(15,10)=>gcd(10,5)=>gcd(5,0)
查看全部 -
for k, v in kw.iteritems():
? ? ? ? ? ? setattr(self, k, v)
**kw,本質是個dict對象,for in 通過dict的iteritems迭代器循環中會讀取出key 和 value ,key是dict的key,value則是對應值
查看全部 -
每層函數的參數都是不同的,第一層函數的參數是傳入要打印的字符串,第二層函數的參數是原函數,第三層函數的參數是原函數的參數;定義兩層的話,應該就只能打印固定的字符串了?
查看全部 -
s.strip(rm) 刪除 s 字符串中開頭、結尾處的 rm 序列的字符。
當rm為空時,默認刪除空白符(包括'\n', '\r', '\t', ' '),如下:
a?=?'?????123' a.strip()
結果:?'123'
a='\t\t123\r\n' a.strip()
結果:'123'
查看全部 -
計算平方根可以用函數:
>>>?math.sqrt(2) 1.4142...
查看全部 -
所有的函數都是可調用對象。
查看全部 -
一定要用 super(Student, self).__init__(name, gender) 去初始化父類
查看全部 -
如果一個屬性由雙下劃線開頭(__),該屬性就無法被外部訪問
查看全部 -
def format_name(s):
? ? return s[0].upper()+s[1:].lower()
print map(format_name, ['adam', 'LISA', 'barT'])
查看全部 -
計算平方根
math.sqrt(2)
查看全部 -
Python 3.x已經改進了整數的除法運算,“/”除將得到浮點數,“//”除才仍是整數:
>>>?10?/?3 3.3333333333333335 >>>?10?//?3 3
要在Python 2.7中引入3.x的除法規則,導入__future__的division:
>>>?from?__future__?import?division >>>?print?10?/?3 3.3333333333333335
當新版本的一個特性與舊版本不兼容時,該特性將會在舊版本中添加到__future__中,以便舊的代碼能在舊版本中測試新特性。
查看全部 -
利用ImportError錯誤,我們經常在Python中動態導入模塊:
try: ????from?cStringIO?import?StringIO except?ImportError: ????from?StringIO?import?StringIO
上述代碼先嘗試從cStringIO導入,如果失敗了(比如cStringIO沒有被安裝),再嘗試從StringIO導入。這樣,如果cStringIO模塊存在,則我們將獲得更快的運行速度,如果cStringIO不存在,則頂多代碼運行速度會變慢,但不會影響代碼的正常執行。
try?的作用是捕獲錯誤,并在捕獲到指定錯誤時執行?except?語句。
查看全部 -
如果遇到名字沖突怎么辦?比如math模塊有一個log函數,logging模塊也有一個log函數,如果同時使用,如何解決名字沖突?
如果使用import導入模塊名,由于必須通過模塊名引用函數名,因此不存在沖突:
import?math,?logging print?math.log(10)???#?調用的是math的log函數logging.log(10,?'something')???#?調用的是logging的log函數
如果使用?from...import?導入?log?函數,勢必引起沖突。這時,可以給函數起個“別名”來避免沖突:
from?math?import?log from?logging?import?log?as?logger???#?logging的log現在變成了loggerprint?log(10)???#?調用的是math的loglogger(10,?'import?from?logging')???#?調用的是logging的log
查看全部 -
關鍵字lambda?表示匿名函數,冒號前面的?x 表示函數參數。
匿名函數有個限制,就是只能有一個表達式,不寫return,返回值就是該表達式的結果。
使用匿名函數,可以不必定義函數名,直接創建一個函數對象,很多時候可以簡化代碼:
>>>?sorted([1,?3,?9,?5,?0],?lambda?x,y:?-cmp(x,y)) [9,?5,?3,?1,?0]
返回函數的時候,也可以返回匿名函數:
>>>?myabs?=?lambda?x:?-x?if?x?<?0?else?x? >>>?myabs(-1) 1 >>>?myabs(1) 1
查看全部 -
像這種內層函數引用了外層函數的變量(參數也算變量),然后返回內層函數的情況,稱為閉包(Closure)。
閉包的特點是返回的函數還引用了外層函數的局部變量,所以,要正確使用閉包,就要確保引用的局部變量在函數返回后不能變。舉例如下:
#?希望一次返回3個函數,分別計算1x1,2x2,3x3:def?count(): ????fs?=?[] ????for?i?in?range(1,?4): ????????def?f(): ?????????????return?i*i ????????fs.append(f) ????return?fs f1,?f2,?f3?=?count()
你可能認為調用f1(),f2()和f3()結果應該是1,4,9,但實際結果全部都是?9(請自己動手驗證)。
原因就是當count()函數返回了3個函數時,這3個函數所引用的變量 i?的值已經變成了3。由于f1、f2、f3并沒有被調用,所以,此時他們并未計算 i*i,當 f1 被調用時:
>>>?f1() 9?????#?因為f1現在才計算i*i,但現在i的值已經變為3
因此,返回函數不要引用任何循環變量,或者后續會發生變化的變量。
查看全部
舉報