CiNiao's blog http://ciniao.legu.cc Copyright (C) 2010 http://ciniao.legu.cc All Rights Reserved. appCan离线手册手机版 ciniao http://ciniao.legu.cc/article.php?id=28 2012-08-05 用appCan连接腾讯&新浪微博并调用API实例 ciniao 用腾讯微博登陆
用新浪微博登陆
[/CODE] [CODE][CENTER]#本文由[URL=http://ciniao.me]刺鸟[/URL]原创,欢迎转载,但请保留出处,也欢迎对本文感兴趣的同学多多交流。#[/CENTER][/CODE] ]]>
http://ciniao.legu.cc/article.php?id=27 2012-08-03
为什么程序员/工程师难升职? ciniao http://ciniao.legu.cc/article.php?id=26 2012-04-16 程序员也敢吃10元的盒饭 ciniao http://ciniao.legu.cc/article.php?id=25 2011-12-23 python可变参数与标准输出的重定位 ciniao >> add(1, 2, 3) 6 >>> add(a=4, b=5, c=6) 15 >>> args = (2, 3) >>> add(1, *args) 6 >>> kwargs={'b': 8, 'c': 9} >>> add(a=7, **kwargs) 24 >>> add(a=7, *args) Traceback (most recent call last): File "", line 1, in TypeError: add() got multiple values for keyword argument 'a' >>> add(1, 2, a=7) Traceback (most recent call last): File "", line 1, in TypeError: add() got multiple values for keyword argument 'a'[/CODE] 注意这个例子的最后几行,特别留意当传递一个元组作为可变参数时,是否要显式的传递关键字参数。因为python使用次序规则来扩展过量的参数,那位置参数要放在前面。这个例子中,最后两个调用是相同的,python不能决定那个值是给a的。 下面举一个例子来模仿print的实现: [CODE]>>> import sys >>> def myprint(*argv): sys.stdout.write(" ".join([str(i) for i in argv]) + "\n") >>> print "I believe", 2012, "is the end of the world." I believe 2012 is the end of the world. >>> myprint("I believe", 2012, "is the end of the world.") I believe 2012 is the end of the world. >>> print "tuple:", (1, 2, 3), "list:", [1, 2, 3], "dict:", {"begin":-2012, "end":2012} tuple: (1, 2, 3) list: [1, 2, 3] dict: {'begin': -2012, 'end': 2012} >>> myprint("tuple:", (1, 2, 3), "list:", [1, 2, 3], "dict:", {"begin":-2012, "end":2012}) tuple: (1, 2, 3) list: [1, 2, 3] dict: {'begin': -2012, 'end': 2012}[/CODE] print默认是输出到stdout中,在终端运行的程序,无重定向的情况下,print输出到控制台。如果要做代码里实现把print的输出写入到log文件中,可以通过修改stdout的文件对象来实现。同理,重定位标准输入和标准错误输出分别修改stdin和stderr的文件对象即可。 下面的例子捕捉所有print的输出,让输出的每一行前增加一个时间的显示: [CODE]import sys, time class MyOutput(): def __init__(self, fd): self.formatTime() self.out = fd self.newLine = True def formatTime(self): return time.strftime("%H:%M:%S ", time.localtime()) def write(self, s): if self.newLine: self.out.write(self.formatTime()) self.newLine = False self.out.write(s) if s.endswith("\n"): self.newLine = True def flush(self): self.out.flush() sys.stdout = MyOutput(sys.stdout) print "Program begin." mylist = [5, 4, 3, 2, 1] print "prev: ", mylist mylist.sort() print "after: ", mylist time.sleep(3) print "Program end."[/CODE] 运行效果如下图: [img]http://ciniao.me/upload/attach/tbs-c5qYcexZsh.jpg[/img] 本文部分内容来源于:[URL=http://xiaoxia.org/?p=4270]http://xiaoxia.org/?p=4270[/URL]]]> http://ciniao.legu.cc/article.php?id=24 2011-09-27 python中的异常处理 ciniao http://ciniao.legu.cc/article.php?id=23 2011-09-24 python中用ctypes模块调用C语言库 ciniao http://ciniao.legu.cc/article.php?id=22 2011-09-13 PHP用CURL伪造IP和来源 ciniao IP: " . getClientIp() . ""; echo "
referer: " . $_SERVER["HTTP_REFERER"]; [/CODE] 运行结果: [img]http://ciniao.me/upload/attach/tbs-Kg0R0eaQvh.jpg[/img] [B]本文作者[/B]:[URL=http://www.gosoa.com.cn/]scofield[/URL] [B]文章转自[/B]:[URL]http://www.gosoa.com.cn/php%e7%94%a8curl%e4%bc%aa%e9%80%a0ip%e5%92%8c%e6%9d%a5%e6%ba%90/[/URL]]]>
http://ciniao.legu.cc/article.php?id=20 2011-09-06
用python来开发webgame服务端(5) ciniao 高排序 #达到预设上限,开启新进程 if n[0][1]>=MAXNUM: openFight() p = NOWFIGHTPORT #返回新开启的进程的port else: p = n[0][0] #返回人数最少的进程的port client.transport.write(str(p)) elif msgArr[0] == 'add': FIGHTNUM[msgArr[1]] = FIGHTNUM[msgArr[1]] + 1 elif msgArr[0] == 'del': FIGHTNUM[msgArr[1]] = FIGHTNUM[msgArr[1]] - 1 client.transport.loseConnection()[/CODE] 在进入战斗前,连接调度进程的端口,并发送'get',调度程序会返回一个战斗进程的port,客户端连接该port,连接成功后,向调度端口发送'add|7001',战斗结束时,向调度端口发送'del|7001'(其中的7001为战斗服务器监听的端口),这样即可达到在同服务器分布的目的,实现了这一步,那跨服务器的分布也就变得很容易了。 对于地图服务器也可以采用类似的处理方法,完善以上功能后,我们的服务端就变得更加强壮了,承载人数方面可以也可以多了一个保障。 [CODE][CENTER]#本文由[URL=http://ciniao.me]刺鸟[/URL]原创,欢迎转载,但请保留出处,也欢迎对本文感兴趣的同学多多交流。#[/CENTER][/CODE]]]> http://ciniao.legu.cc/article.php?id=19 2011-09-06 python获取汉字的拼音 ciniao 0 & num<160: return chr(num) v=table.split(';') for i in xrange(len(v)-1,-1,-1): s=v[i].split(',') if int(s[1])<=num: return s[0] break if __name__ == "__main__": chinese = '我是刺鸟 你是谁' i=0 while(i160): i+=1 q = ord(chinese[i:i+1]) p = p*256+q-65536 i+=1 print Pinyin(p)[/CODE] 运行结果: [img]http://ciniao.me/upload/attach/tbs-i8iakwhfro.jpg[/img]]]> http://ciniao.legu.cc/article.php?id=18 2011-09-05