易截截图软件、单文件、免安装、纯绿色、仅160KB
热门标签: c c# c++ asp asp.net linux php jsp java vb Python Ruby mysql sql access Sqlite sqlserver delphi javascript Oracle ajax wap mssql html css flash flex dreamweaver xml
 最新文章 : Python

[原创]Python代码模块热更新机制实现(reload)

[原创]Python代码模块热更新机制实现(reload)
by AKara 2009-05-17 @ http://blog.csdn.net/akara @ akaras@163.com
---------------------------------------------------------------------
 
  对一个游戏来说,无论是client或server都非常需要一套代码热更新的机制。
它能大大提高开发效率,又能超乎玩家期望地在运营期在线修正bug和增添功能。
可谓必备机制。
---------------------------------------------------------------------
  在实现一个Python版本的热更新系统时,我走了不少弯路,钻了很多牛角尖,
完成了一个我看来有很多细节不够完善不够强大的版本,并在想做到'更完美'。
  直到和同事DX,KHF讨论后,才发现最重要的是明确热更新机制的目标是什么。
 
  往往我们善于将小事一件件做好,但却忘记问问自己为什么前行。
  我要作的热更新机制的目标是:
  (1)更新代码定义
  (2)不更新数据对象
  (3)不要依赖热更新机制解决所有问题。过于复杂的改动,重启进程
 
  具体到Python这个语言而言,目标便是:
  (1)更新类/函数及衍生对象:class/function/method/classm ......

使用C语言扩展Python(一)

开发环境:Ubuntu9.10,python2.6,gcc4.4.11,ubuntu下的python运行包和开发包是分开的,因此需要在新利得里面安装python-all-dev,从而可以在代码中引用python的头文件和库。2.下面是一个最简单的可以供python调用的c扩展模块,假设c程序文件名为foo.c:代码#include <Python.h>
static PyObject* foo_bar(PyObject* self, PyObject* args) {
    Py_RETURN_NONE;
}
static PyMethodDef foo_methods[] = {
    {"bar",(PyCFunction)foo_bar,METH_NOARGS,NULL},
    {NULL,NULL,0,NULL}
};
PyMODINIT_FUNC initfoo() {
    Py_InitModule3("foo", foo_methods, "My first extension module.");
}      我们可以将上述模块分成3个部分:1)c模块想对外暴露的接口函数。2)提供给外部的python程序使用的一个c模块函数名称映射表。3)c模块的初始化函数。模块的第一行将Python.h引入到模块中,这个文件将使得你的模块可以hook进python的解释器,从而可以为外部的 ......

使用C语言扩展Python(一)

开发环境:Ubuntu9.10,python2.6,gcc4.4.11,ubuntu下的python运行包和开发包是分开的,因此需要在新利得里面安装python-all-dev,从而可以在代码中引用python的头文件和库。2.下面是一个最简单的可以供python调用的c扩展模块,假设c程序文件名为foo.c:代码#include <Python.h>
static PyObject* foo_bar(PyObject* self, PyObject* args) {
    Py_RETURN_NONE;
}
static PyMethodDef foo_methods[] = {
    {"bar",(PyCFunction)foo_bar,METH_NOARGS,NULL},
    {NULL,NULL,0,NULL}
};
PyMODINIT_FUNC initfoo() {
    Py_InitModule3("foo", foo_methods, "My first extension module.");
}      我们可以将上述模块分成3个部分:1)c模块想对外暴露的接口函数。2)提供给外部的python程序使用的一个c模块函数名称映射表。3)c模块的初始化函数。模块的第一行将Python.h引入到模块中,这个文件将使得你的模块可以hook进python的解释器,从而可以为外部的 ......

python enumerate用法

python cookbook  
Recipe 2.5. Counting Lines in a File

     今日发现一个新函数
enumerate
。一般情况下对一个列表或数组既要遍历索引又要遍历元素时,会这样写:

for
i
in
range
(0
,
len
(list
)):

    print
i
,
list
[
i
]
 
但是这种方法有些累赘,使用
内置enumerrate函数会有更加直接,优美的做法,先看看enumerate的定义:

 
def
enumerate
(collection
):

    'Generates an indexed series: 
(0,coll[0]), (1,coll[1]) ...'
     
     i
=
0

     it
=
iter
(collection
)
     while
1
:

     yield
(i
,
it
.
next
())

     i
+=
1
 
enumerate会将数组或列表组成一个索引序列。使我们再获取索引和索引内容的时候更加方便如下:

for
index

text
in
enumerate
(list
......

关于Python中函数重载问题的思考

全文来自:IT工程技术网 http://www.systhinker.com/html/91/n-11591.html
昨天和飞天舞者讨论静态类型语言和动态类型语言优劣比较的时候,说到Python没有重载机制的问题。
后来想想挺有意思的,把思考的经过记录下来,欢迎拍砖。
重载(overload)和覆盖(override),在C++,Java,C#等静态类型语言类型语言中,这两个概念同时存在。前者是为了让同一个函数名(方法名)匹配不同的参数(个数不同,类型不同);后者是为了实现多态,在相同名称的函数(方法)和参数,在不同的类中(父类,子类),有不同的实现。
Python是动态类型语言,不能简单地说它支持或者不支持重载,我的思考结果是,重载仍然存在,只是以不同的方式呈现。原来我们理解的重载,都是在静态类型语言中,关心参数个数以及参数类型;在动态类型语言里的重载根本不需要关心参数类型,只需要关心参数个数。而在Python里,关心参数个数的重载是由默认参数和传递参数名称来实现的。这样,程序员就没有必要自己来写两个名称一样而参数不同的函数了!事实上,在同一个模块或者同一个类中,写两个名称相同的方法的时候(参数个数是否相同不重要),后面的那个方法会简单覆盖前面的方面;其次,在子类继承父类时 ......

Python字典按value排序

myDict = { 'item1' : [ 7, 1, 9], 'item2' : [8, 2, 3], 'item3' : [ 9, 3, 11 ] }
def sortDic(Dict,valuePostion):
return sorted(Dict.items(),key=lambda e:e[1][valuePostion])
//按value的第3个值排序
sortDic(myDict,2)
[('item2', [8, 2, 3]), ('item1', [7, 1, 9]), ('item3', [9, 3, 11])]
//按value的第1个值排序
sortDic(myDict,0)
[('item1', [7, 1, 9]), ('item2', [8, 2, 3]), ('item3', [9, 3, 11])]
......

UBUNTU10.04安装stackless python运行高性能服务器

以下"#"开头是Ubuntu终端命令
1。首先安装Ubuntu10.04
参考 http://wiki.ubuntu.org.cn/
2。修改root用户密码
3。使用root登陆系统
 
4。Ubuntu默认已经安装python2.6.5
 
5。下载stackless
查看网址 http://zope.stackless.com/download/sdocument_view
# cd /usr/src
# wget http://www.stackless.com/binaries/stackless-265-export.tar.bz2
# tar jxvf stackless-265-export.tar.bz2
 
6。预先安装一些模块依赖的开发库
6.1 要安装zlib的开发库,没有zip组件可跑不了easy_install
# apt-get install zlib1g-dev
6.2 要安装readline的开发包,Python需要他
# apt-get install libreadline5-dev
6.3  还有openssl, bdb和bzip2的开发包
# apt-get install libssl-dev
# apt-get install libdb-dev
# apt-get install libbz2-dev
6.4 安装编译工具
# apt-get install build-essential
 
7。编译python-2.6.5-stackless,安装到/opt目录
# cd /usr/src/python-2.6.5-stackless/
# ./configure --prefix=/opt/stackless --with-readline --with-zlib=/usr/include
# make
# make install
 
8。修改系 ......
总记录数:695; 总页数:116; 每页6 条; 首页 上一页 [6] [7] [8] [9] 10 [11] [12] [13] [14] [15]  下一页 尾页
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号