Time of Update: 2018-12-04
轉自:http://our2848884.blog.163.com/blog/static/146854834201192393137281/ 學過python的朋友應該都知道,python中包含單引號,雙引號和三引號。但是他們有什麼區別呢? 其實,我個人感覺,python不同於php,其中的單引號和雙引號沒有區別。他們的主要作用就是盡量避免使用逸出字元。例如:>>> a='I\'m a student.'>>> print aI'm a
Time of Update: 2018-12-04
如下函數定義def hello(name, age=10, gender='F'): print 'User Info:' print 'name is %s' % name print 'age is %d' % age print 'gender is %c' % gender我們的調用方式主要有一下幾種hello('Jim')hello('Jim', 11)hello('Jim', 11, 'M')以上三種是使用預設參數的方式,和C++類似hello('Jim',
Time of Update: 2018-12-04
字典實際上並不能排序,我們排的是items,即dict.items(),將字典轉換成了一個列表sorted函數的原型為:sorted(iterable[, cmp[, key[, reverse]]])iterable:是可迭代類型類型;cmp:用於比較的函數,比較什麼由key決定,有預設值,迭代集合中的一項;key:用列表元素的某個屬性和函數進行作為關鍵字,有預設值,迭代集合中的一項;reverse:定序. reverse = True 或者 reverse = False,有預設值。傳回值:
Time of Update: 2018-12-04
sub(repl, string[, count]) | re.sub(pattern, repl, string[,
Time of Update: 2018-12-04
剛學python,之前迴圈時一直用的是range,後來看到有人用xrange,然後就查了下,發現xrange要比range要好,主要體現在記憶體上range 其實就是建立了一個list,需要在記憶體中儲存所有的資料xrange則是一個對象,它並沒有儲存這個list,而是計算出來的在範圍不是很大時,二者的效率差不多,但當範圍很大,或者經常break時,則使用xrange更合適 >>>a = range(0, 10)>>>a[0,1,2,3,4,5,6,7,8,9
Time of Update: 2018-12-04
想讓這個兩個圖形庫能夠支援中文的顯示其實還是挺簡單的,下面分開說明PIL支援中文:1.從windows的C:\Windows\Fonts\ 目錄下拷貝一份字型檔,比如"msyh.ttc" 到某個目錄,一般是"/usr/share/fonts/truetype/",當然這個無所謂2.定義一個myfont變數, myfont = ImageFont.truetype(fontpath, 24); 第一個參數是字型的路徑, 第二個參數是字型大小3.寫文字時,指定參數font 的值為 myfont, 如
Time of Update: 2018-12-04
當我們用open()函數去開啟檔案的時候,有好幾種開啟的模式。'r'->唯讀'w'->唯寫,檔案已存在則清空,不存在則建立。'a'->追加,寫到檔案末尾'b'->二進位模式,比如開啟映像、音頻、word檔案。'+'->更新(可讀可寫)這個帶'+'號的有點難以理解,上代碼感受下。with open('foo.txt', 'w+') as f: f.write('bar\n') f.seek(0) data =
Time of Update: 2018-12-04
先看下面代碼的“詭異”現象。假設在windows下,我有個f.txt檔案,裡面的內容是下面這樣的。helloworld代碼一,with open('f.txt', 'r') as f: print f.readlines()with open('f.txt', 'rb') as f: print f.readlines()輸出['hello\n', 'world\n']['hello\r\n', 'world\r\n']代碼二,with open('f.txt', 'rb') as
Time of Update: 2018-12-04
在遊戲項目中,我們會在每個介面驗證用戶端傳過來的參數類型,如果驗證不通過,返回給用戶端“參數錯誤”錯誤碼。這樣做不但便於調試,而且增加健壯性。因為用戶端是可以作弊的,不要輕易相信用戶端傳過來的參數。驗證類型用type函數,非常好用,比如>>type('foo') == strTrue>>type(2.3) in
Time of Update: 2018-12-04
標題的xxxattr指的是hasattr/getattr/setattr/delattr。可以動態檢測、擷取、設定、刪除對象的屬性和方法。這裡所說的動態,說白了就是“可以通過字串來做這些事”。這是一個非常強大靈活的特性。我舉個例子。有個GM工具來設定玩家角色的屬性,比如角色的屬性有經驗、體力、遊戲幣。roletable = {'31415926':{'exp':99,'energy':100,'gamecoin':1000}}#偽角色資料庫表class Role: def __init__
Time of Update: 2018-12-04
有時候我們從其它地方接受的字串經過艱難跋涉,它變了個樣。比如收到的是'\u6253\u602a\u8005'而不是u'\u6253\u602a\u8005'。明明肉眼看起來只需要加個u,但是怎麼加呢?>>s = '\u6253\u602a\u8005'>>s'\\u6253\\u602a\\u8005'>>'u'+s'u\\u6253\\u602a\\u8005'這樣不行。而且表面看起來是'\u6253\u602a\u8005',其實內部是'\\u6253\\
Time of Update: 2018-12-04
mmseg演算法是對最大匹配演算法的擴充。簡單來說,mmseg每次匹配時,總會多向後匹配兩個單詞,然後選擇這個三個單詞的總體匹配最優的。mmseg 主要做了以下幾方面的擴充:假設對字串C1C2...Cn進行分割 匹配時,從小到大,逐個匹配字典中以C1開頭的詞每次連續匹配三個詞語(three-word chunk ),並列出所有可能的分割選擇最匹配的three-word chunk(依次運用以下規則,一旦可以選出唯一結果則返回):a.三個單詞的總長度最大b.單詞平均長度最大c.單詞長度的方差最小
Time of Update: 2018-12-04
這段程式是從給定的列表中統計各個小夥伴以及他們的出現次數。littlebuddys = ['jack','terry','john','rooney','ross','kzc','john','ross','ross']新手程式員d = {}for buddy in littlebuddys: if buddy not in d: d[buddy] = 0 d[buddy] += 1信奉EAFP的程式員d = {}for buddy in littlebuddys:
Time of Update: 2018-12-04
在統計匯總遊戲資料的時候,有些資料是是每天用字典存的,當我要對多天匯總的時候,就需要合并字典了。如果key相同的話它們的值就相加。不能用update方法,因為用update方法則相同的key的值會覆蓋,而不是相加。千言不如一碼。def union_dict(*objs): _keys = set(sum([obj.keys() for obj in objs],[])) _total = {} for _key in _keys: _total[_key] =
Time of Update: 2018-12-04
在遊戲中,我要監控記錄物品系統中的背包變動情況。假設背包的儲存結構是這樣的。是一個字典,{物品id:數量}。在背包類初始化的時候,把背包物品資訊copy儲存到一個oldbag變數,進行一些物品操作後(比如使用物品,領取物品獎勵等),在調用save()方法存進redis時,對新的bag字典與oldbag字典進行差異對比就得出變動情況了。千言不如一碼。def symmetric_difference(_oldobj,_newobj): _oldkeys = _oldobj.keys()
Time of Update: 2018-12-04
函數式編程的思想。可以理解成綁定了一部分參數的函數。作用就是少傳參數,更短,更簡潔。我之前做的一段使用者留存率的程式。需求是這樣子的,選擇某一天,然後以這天為準,次日留存,3日留存,7日留存,14日留存,30日留存。已有一個擷取第幾天后的函數from datetime import datetime,timedeltadef GetNextDay(baseday,n): return
Time of Update: 2018-12-04
上一篇博文示範了如何發送簡單的郵件,這一篇將示範如何發送各種類型的附件。基本思路就是,使用MIMEMultipart來標示這個郵件是多個部分組成的,然後attach各個部分。如果是附件,則add_header加入附件的聲明。在python中,MIME的這些對象的繼承關係如下。MIMEBase |-- MIMENonMultipart |-- MIMEApplication |-- MIMEAudio |-- MIMEImage |--
Time of Update: 2018-12-04
之前在搞監控預警的時候需要發郵件通知,很簡單,就跟呼吸一樣。import smtplibfrom email.mime.text import MIMEText_user = "sigeken@qq.com"_pwd = "***"_to = "402363522@qq.com"#使用MIMEText構造符合smtp協議的header及bodymsg = MIMEText("喬裝打扮,不擇手段")msg["Subject"] = "don't panic"msg["From"] =
Time of Update: 2018-12-04
雖然用了這麼久的python,但是還是能斷斷續續發現一些本以為很熟悉的東西的“秘密”。split()的maxsplit參數>>'hello,world,foo,bar'.split(',',1)['hello', 'world,foo,bar']enumerate()的start參數>>list(enumerate(['a','b','c'],2))[(2, 'a'), (3, 'b'), (4,
Time of Update: 2018-12-04
演算法分析:螺旋矩陣用二維數組表示,座標(x,y),即(x軸座標,y軸座標)順時針螺旋的方向是->右,下,左,上,用數值表示即是x加1格(1,0),y加1格(0,1),x減1格(-1,0),y減1格(0,-1)座標從(0,0)開始行走,當超出範圍或遇到障礙時切換方向經過上面的分析,思路很清晰了,千言不如一碼。import itertoolsdef spiral(n,m): _status = itertools.cycle(['right','down','left','up'])#