CentOS SSH密钥设置

#需求场景一: www用户无密码登录root@remotehost 
passwd www  #root设置www用户密码 
su www && cd /home/www  #登录www用户并进入家目录 
ssh-keygen -b 1024 -t rsa  #生成公钥私钥 
cd /home/www/.ssh/ #进入公钥目录 
scp id_rsa.pub root@remotehost:/root/ #拷贝公钥到指定服务器 
ssh root@remotehost #登录指定服务器 
cat id_rsa.pub >> /root/.ssh/authorized_keys #将公钥加入审计文件中,如无.ssh需创建 

#需求场景二: root用户免密码登录root@remotehost 
ssh-keygen -b 1024 -t rsa  #登录root用户生成公钥私钥 
ssh-copy-id -i .ssh/id_rsa.pub root@remotehost #将公钥加入到指定服务器审计文件中
2

Yii防止重复提交并在提交成功后给出提示

如何防止重复提交,并在提交成功后给出提示?

//控制器(controller)中
Yii::app()->user->setFlash('submit','thanks');
$this->;refresh();

//视图(view)中
if(Yii::app()->user->hasFlash('submit')){
    echo Yii::app()->user->getFlash('submit');
}

一般我们是跳转到列表页,或用redirect跳到编辑页,就不需要了,如果还是要显示当前页
以上就有用了,比如在当前时显示,编辑或添加新的记录

Yii CDbCriteria的常用方法

这是Yii CDbCriteria的一些笔记和常用用法:

$criteria = new CDbCriteria;      
$criteria->addCondition("id=1"); //查询条件,即where id = 1  
$criteria->addInCondition('id', array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);  
$criteria->addNotInCondition('id', array(1,2,3,4,5));//与上面正好相法,是NOT IN  
$criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND  
$criteria->addSearchCondition('name', '分类');//搜索条件,其实代表了。。where name like '%分类%'  
$criteria->addBetweenCondition('id', 1, 4);//between 1 and 4   
$criteria->compare('id', 1);    //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,  
                                //即如果第二个参数是数组就会调用addInCondition  
/* 传递变量 */  
$criteria->addCondition("id = :id");  
$criteria->params[':id']=1;  
/* 一些public vars */  
$criteria->select = 'id,parentid,name'; //代表了要查询的字段,默认select='*';
$criteria->join = 'xxx'; //连接表  
$criteria->with = 'xxx'; //调用relations   
$criteria->limit = 10;    //取1条数据,如果小于0,则不作处理  
$criteria->offset = 1;   //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10  
$criteria->order = 'xxx DESC,XXX ASC' ;//排序条件  
$criteria->group = 'group 条件';  
$criteria->having = 'having 条件 ';  
$criteria->distinct = FALSE; //是否唯一查询

转自 http://www.neatstudio.com/show-1692-1.shtml

页面制作笔记(CSS篇)

设置页面整体样式:

body{margin:0;padding:0;font:12px Microsoft YaHei}

背景:

background-color: #FFCC66;
background-image: url("butterfly.gif");
background-repeat: no-repeat;平铺背景图像 repeat-x(图像横向平铺) repeat-y(图像纵向平铺) repeat(图像横向和纵向都平铺)
background-attachment: fixed;固定背景图像 scroll(非固定的)fixed(图像是固定在屏幕上的)
background-position: right bottom;放置背景图像 x y
缩写顺序值:[background-color] | [background-image] | [background-repeat] | [background-attachment] | [background-position]
缩写:background: #FFCC66 url("butterfly.gif") no-repeat fixed right bottom;

字体:

font-style: italic;  字体样式 normal(正常)、italic(斜体)或oblique(倾斜)
font-variant: normal;字体变化 normal(正常)或small-caps(小体大写字母)
font-weight: bold;   字体浓淡 normal(正常)或bold(加粗)
font-size: 30px;字体大小
font-family: Microsoft YaHei, arial, sans-serif; 字体族
font属性的值应按以下次序书写:
缩写顺序值:font-style | font-variant | font-weight | font-size | font-family
缩写:font: italic bold 30px arial, sans-serif;

文本:

text-indent: 20px;文本缩进
text-align: center;文本对齐 left center right
text-decoration:none;文本装饰 underline(下划线) line-through(删除线) overline(上划线)
letter-spacing: 6px;字符间距
text-transform:none;文本转换 capitalize(首字母大写) uppercase(全大写) lowercase(全小写)

链接伪类:

a:link 从未访问过的链接
a:visited 已访问过的链接
a:active 激活的链接
a:hover  鼠标悬停的链接

盒状:

margin:1px 2px 3px 4px; 外边距
padding:1px 2px 3px 4px;内边距
width:1px;宽度
height:2px;高度
float:left; 浮动 属性值可以是left、right或者none
clear:both; 控制浮动元素的后继元素的行为,属性的值可以是left、right、both或none
position:absolute;top: 50px;left: 50px;  元素定位 absolute(绝对定位),relative(相对定位)  可以通过属性left、right、top和bottom来设定
z-index: 1;层次堆叠

边框:

border-width: 1px;边框宽度
border-style: solid;边框样式
border-color: blue;边框颜色
缩写:border: 1px solid blue;

注(CSS3中常用属性):

border-radius:1px 2px 3px 4px; 设置圆角
box-shadow:0 1px 0 #BABABA;  设置阴影

安全宝 国内最优秀的免费CDN服务

安全宝网站保护系统为社区内的网站提供一站式的安全解决方案,网站在“零部署”、“零维护”的情况下,防止诸如XSS、SQL注入、木马、零日攻击、 僵尸网络等各种网站安全问题。同时,安全宝综合采用跨运营商智能调度、页面优化、页面缓存等技术,进一步提升访问速度,降低故障率,从而整体提升网站的用 户体验。在将来,星云融创将进一步以云计算为基础,专注于“后PC”时代基于Web的各种应用的安全问题,让Web应用因云计算而大放异彩,因安全宝而更 加专注。

安全宝目前实行的人工审核机制,新添加的域名需要等待官方的审核通过才可以使用,目前的免费CDN服务是被自动分配到香港新世界电讯数据中心加速,从Ping值来看加速效果明显,特别适合美国空间或者欧洲空间加速。

一、安全宝的免费CDN加速原理

1、访问到的网站的IP地址变成安全宝CDN服务器的IP地址,没备&*案的放在香港,备&*案不知道是不是可以调整到国内。

2、安全宝会缓存您网站的静态资源,例如:Javascript、CSS脚本、FLASH以及图片文件等,不过不会对HTML进行缓存。

3、安全宝CDN主要用的技术是:CSS,javaScript的自动最小化、异步资源加载、页面智能预加载、请求优先处理。

4、安全提供页面缓存服务,默认更新时间为30分钟,也可在安全宝配置页面中手动清除缓存。

安全宝Anquanbao加速原理

二、安全宝Anquanbao申请和添加域名CDN服务

1、安全宝官网:

首页:http://www.anquanbao.com

2、没有安全宝账户的朋友,先到官网注册一个账号,右上角有“免费注册”链接。

安全宝Anquanbao注册一个账号

3、然后单击右上角的“添加域名”,输入你要使用CDN的域名地址。

4、安全宝Anquanbao提供了更新NS和修改CNAME两种方式,两种方式主要区别是:

  • 1、NS即使用安全宝的NS,原来域名的NS地址失效。
  • 2、修改CNAME即保留原有的NS不变,只需做CNAME解析。
  • 3、官方不推荐使用CNAME,因为:CNAME的方式无法保护您域名的@记录。
  • 4、使用CNAME的方式会增加域名解析次数,降低网站访问速度。

5、部落是用的CNAME的方式接入安全宝的,本想再测试一下NS接入方式,但是看了一下安全宝的审核速度,我就放弃了。

6、如果要等我再添加一个域名设置为NS接入,恐怕得到下个月了。 当然也有朋友添加的域名审核通过的速度很快。

安全宝Anquanbao添加域名

7、接下来安全宝Anquanbao会扫描你的域名原有的DNS解析。

安全宝Anquanbao扫描DNS记录

8、稍等一会儿,安全宝Anquanbao就会显示出你的域名的DNS结果来了,确认一下是不正确。(点击放大)

安全宝Anquanbao确认结果

9、添加成功后,就看到等待服务审核中了。

安全宝Anquanbao等待审核

三、成功为域名启用安全宝免费CDN加速服务

1、大概过了N天后你的邮箱就会收到一封来自安全宝Anquanbao的服务审核通过的邮件了。

2、建议迟迟没有开通安全宝CDN的朋友,直接加安全宝的企业QQ要求开通,因为我发现这样的确有效果。

3、登录到安全宝Anquanbao网站管理页面后,可以看到域名显示“等待CNAME生效”。

安全宝Anquanbao审核通过

4、到你的域名管理处,删除原有的域名A记录和CNAME记录,添加一条安全宝的CNAME记录。

安全宝Anquanbao添加CNAME记录

5、注意:如果你的域名是:www.freehao123.com,那么CNAME记录就是:www.freehao123.com.aqb.so

6. 修改大概1小时生效,再次回到安全宝的域名管理界面,就可以看到“安全宝已经启用”的提示了。

安全宝Anquanbao成功启用了

四、安全宝配置:开启安全宝免费CDN加速

1、点击“安全宝配置”,再点击右上角的“启用安全宝”,将云web防火墙、极速CDN、Web加速等所有服务打开。(点击放大)

安全宝Anquanbao开启所有服务

2、注意@和www都要启用安全宝服务,在左上角可以选择。

安全宝Anquanbao设置www启用

五、安全宝Anquanbao免费CDN效果测试

1、官方好像是说添加了安全后1个小时内生效,但是我等了一天了,用Ping查看的用的IP还是美国IP。理论上讲,我已经将域名的A记录全部改成了安全宝的CNAME记录。

2、我又可以正常访问网站,这说明安全宝的CNAME记录已经生效了,否则我的网站就打不开了,但是我访问出来的IP还是我的Godaddy空间的IP。

3、没办法最后联系一下安全宝的客服一下子就解决了。所以如果有朋友也遇到我这样的情况,建议直接加企业QQ交流,很有效果。

4、用站长工具测试我启用了安全宝的CDN的域名,Ping的结果平均是50左右,是原来美国主机的Ping值的五分之一。

安全宝Anquanbao测试Ping值

5、电信联通都差不多,可以和国内的一些空间相媲美了。

安全宝Anquanbao速度很快

6、这里是我放在Godaddy空间上同网站三个域名,具体加速效果大家可以体验对比一下:

  • 1、没用CDN加速:http://s0su.com
  • 2、日本CDN加速:http://zhujis.com
  • 3、安全宝CDN:http://www.zhujii.com

7、打开上述网址时,建议每次访问一个网站都清空一次缓存,否则看不出对比效果。

六、安全宝CDN加速小结

1、安全宝免费的CDN加速效果不错,但是这里不得不吐槽一下安全宝的管理后台,虽然界面做得很“酷”很“炫”,但是实用性和操作的简便性有点折扣。

2、知道官方的设计人员有没有使用过这样的域名管理后台,有好几次我都找不到回到域名管理首页的按钮,在执行添加域名、设置DNS等经常需要手动输入。

3、另外不得不说的地方,就是安全宝为什么不出一个官方的操作教程,最好是加上图片的。查找了官方的帮助文档,很多都是很久以前的,有些还前后矛盾。

 

传送门: 安全宝

Muse 无须代码网页制作工具

Muse界面你可能是一名出色的网页设计师,但如果你不会写代码的话,设计好的网页还要请别人去制作。Adobe打算帮你解决这个问题。 Adobe刚刚发布了一个代号为“Muse{缪斯}”网站开发工具。Muse基于AIR平台,其目的是让设计师把精力放在设计上,让那些不懂代码的设计师 也可以制作、发布网站。

Muse主要包括四大功能

网站规划:Muse提供网站地图、主页面、以及覆盖整个网站的工具,你可以很快完成网站规划,为设计做好准备。

设计:让设计师专注于设计而不是工具。精确控制图片、文本、曲线等元素。用户可以使用和Photoshop或 Fireworks相仿的内置工具设计网页,实际上你可以导入整个PSD文件在Muse中编辑。Muse让用户简便的整合网页内容。用户可以在设计中自由 拖拽内容的位置,也可以点击‘添加HTML’直接添加视频、地图或者任何网页内容。Muse还内置了数量庞大的交互小工具,可以直接使用。

互动性:支持嵌入Google地图,Facebook feed等元素,结合内置工具可提高网站互动性。支持拖拽自定义导航菜单、幻灯片、面板等内容。Muse支持最新的Web标准,包括HTML5和 CSS3。另外,Muse与Adobe InDesign可以很好的相结合,创作出具有交互式内容和各种流行元素的Web站点。

网站发布:设计完网站之后,你可以在Muse内部预览上线后的效果,然后对网站进行浏览器兼容性等测试,没有问题的话就可以上线。同时,Adobe网站上也列举了好多 Muse 成品网站,专业美观。

Adobe Muse 0.8 Beta7 更新内容:

 

1.Improved usability of text frames by drawing a selection highlight around them and fixing a bug where the text cursor didn’t blink in empty text frames
2.Fixed a bug where placing certain SWF files caused an export error. If you experienced this bug, a warning message will direct you to replace the failed SWF file.
3.Fixed a crashing bug that occurred when saving pages that contain certain HTML page items
4.Fixed a crashing bug when gradient fills are in graphic styles
5.Fixed a bug where selecting images in the layout failed to select the image in the assets panel

 

支持运行环境:Windows XP/Vista/Windows7

Adobe Muse 0.8 Beta7 下载:

(6.73MB)

Adobe Muse 需要AIR平台的支持:

Python性能鸡汤

阅读 Zen of Python,在Python解析器中输入 import this. 一个犀利的Python新手可能会注意到”解析”一词, 认为Python不过是另一门脚本语言. “它肯定很慢!”

毫无疑问:Python程序没有编译型语言高效快速. 甚至Python拥护者们会告诉你Python不适合这些领域. 然而,YouTube已用Python服务于每小时4千万视频的请求. 你所要做的就是编写高效的代码和需要时使用外部实现(C/C++)代码. 这里有一些建议,可以帮助你成为一个更好的Python开发者:

1. 使用内建函数:

你可以用Python写出高效的代码,但很难击败内建函数. 经查证. 他们非常快速.

 

2.使用join()连接字符串.

你可以使用 “+” 来连接字符串. 但由于string在Python中是不可变的,每一个”+”操作都会创建一个新的字符串并复制旧内容. 常见用法是使用Python的数组模块单个的修改字符;当完成的时候,使用 join() 函数创建最终字符串.

>>> #This is good to glue a large number of strings
>>> for chunk in input():
>>>  my_string.join(chunk)

3. 使用Python多重赋值,交换变量
这在Python中即优雅又快速:
>>> x, y = y, x
这样很慢:
>>> temp = x
>>> x = y
>>> y = temp

4. 尽量使用局部变量
Python 检索局部变量比检索全局变量快. 这意味着,避免 “global” 关键字.

5. 尽量使用 “in”
使用 “in” 关键字. 简洁而快速.
>>> for key in sequence:
>>>     print “found”

6. 使用延迟加载加速
將 “import” 声明移入函数中,仅在需要的时候导入. 换句话说,如果某些模块不需马上使用,稍后导入他们. 例如,你不必在一开使就导入大量模块而加速程序启动. 该技术不能提高整体性能. 但它可以帮助你更均衡的分配模块的加载时间.

7. 为无限循环使用 “while 1″
有时候在程序中你需一个无限循环.(例如一个监听套接字的实例) 尽管 “while true” 能完成同样的事, 但 “while 1″ 是单步运算. 这招能提高你的Python性能.
>>> while 1:
>>>    #do stuff, faster with while 1
>>> while True:

>>>    # do stuff, slower with wile True
8. 使用list comprehension
从Python 2.0 开始,你可以使用 list comprehension 取代大量的 “for” 和 “while” 块. 使用List comprehension通常更快,Python解析器能在循环中发现它是一个可预测的模式而被优化.额外好处是,list comprehension更具可读性(函数式编程),并在大多数情况下,它可以节省一个额外的计数变量。例如,让我们计算1到10之间的偶数个数:
>>> # the good way to iterate a range
>>> evens = [ i for i in range(10) if i%2 == 0]
>>> [0, 2, 4, 6, 8]
>>> # the following is not so Pythonic
>>> i = 0
>>> evens = []
>>> while i < 10:
>>>    if i %2 == 0: evens.append(i)
>>>    i += 1
>>> [0, 2, 4, 6, 8]

9. 使用xrange()处理长序列:
这样可为你节省大量的系统内存,因为xrange()在序列中每次调用只产生一个整数元素。而相反 range(),它將直接给你一个完整的元素列表,用于循环时会有不必要的开销。

10. 使用 Python generator:
这也可以节省内存和提高性能。例如一个视频流,你可以一个一个字节块的发送,而不是整个流。例如,
>>> chunk = ( 1000 * i for i in xrange(1000))
>>> chunk
<generator object <genexpr> at 0x7f65d90dcaa0>
>>> chunk.next()
0
>>> chunk.next()
1000
>>> chunk.next()
2000

11. 了解itertools模块:
该模块对迭代和组合是非常有效的。让我们生成一个列表[1,2,3]的所有排列组合,仅需三行Python代码:
>>> import itertools
>>> iter = itertools.permutations([1,2,3])
>>> list(iter)
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

12. 学习bisect模块保持列表排序:
这是一个免费的二分查找实现和快速插入有序序列的工具。也就是说,你可以使用:
>>> import bisect
>>> bisect.insort(list, element)
你已將一个元素插入列表中, 而你不需要再次调用 sort() 来保持容器的排序, 因为这在长序列中这会非常昂贵.

13. 理解Python列表,实际上是一个数组:
Python中的列表实现并不是以人们通常谈论的计算机科学中的普通单链表实现的。Python中的列表是一个数组。也就是说,你可以以常量时间O(1) 检索列表的某个元素,而不需要从头开始搜索。这有什么意义呢? Python开发人员使用列表对象insert()时, 需三思. 例如:>>> list.insert(0,item)
在列表的前面插入一个元素效率不高, 因为列表中的所有后续下标不得不改变. 然而,您可以使用list.append()在列表的尾端有效添加元素. 挑先deque,如果你想快速的在两插入或时。它是快速的,因为在Python中的deque用双链表实现。不再多说。 :)

14. 使用dict 和 set 测试成员:

检查一个元素是在dicitonary或set是否存在 这在Python中非常快的。这是因为dict和set使用哈希表来实现。查找效率可以达到O(1)。因此,如果您需要经常检查成员,使用 set 或 dict做为你的容器.
>>> mylist = ['a', 'b', 'c'] #Slower, check membership with list:
>>> ‘c’ in mylist
>>> True
>>> myset = set(['a', 'b', 'c']) # Faster, check membership with set:
>>> ‘c’ in myset:
>>> True

15. 使用Schwartzian Transform 的 sort():

原生的list.sort()函数是非常快的。 Python会按自然顺序排序列表。有时,你需要非自然顺序的排序。例如,你要根据服务器位置排序的IP地址。 Python支持自定义的比较,你可以使用list.sort(CMP()),这会比list.sort()慢,因为增加了函数调用的开销。如果性能有问 题,你可以申请Guttman-Rosler Transform,基于Schwartzian Transform. 它只对实际的要用的算法有兴趣,它的简要工作原理是,你可以变换列表,并调用Python内置list.sort() – > 更快,而无需使用list.sort(CMP() )->慢。

16. Python装饰器缓存结果:
“@”符号是Python的装饰语法。它不只用于追查,锁或日志。你可以装饰一个Python函数,记住调用结果供后续使用。这种技术被称为memoization的。下面是一个例子:

>>> from functools import wraps
>>> def memo(f):
>>>    cache = { }
>>>    @wraps(f)
>>>    def  wrap(*arg):
>>>        if arg not in cache: cache['arg'] = f(*arg)
>>>        return cache['arg']
>>>    return wrap
我们也可以对 Fibonacci 函数使用装饰器:
>>> @memo
>>> def fib(i):
>>>    if i < 2: return 1
>>>    return fib(i-1) + fib(i-2)

这里的关键思想是:增强函数(装饰)函数,记住每个已经计算的Fibonacci值;如果它们在缓存中,就不需要再计算了.

17. 理解Python的GIL(全局解释器锁):
GIL是必要的,因为CPython的内存管理是非线程安全的。你不能简单地创建多个线程,并希望Python能在多核心的机器上运行得更快。这是因为 GIL將会防止多个原生线程同时执行Python字节码。换句话说,GIL將序列化您的所有线程。然而,您可以使用线程管理多个派生进程加速程序,这些程 序独立的运行于你的Python代码外。

18. 像熟悉文档一样的熟悉Python源代码:
Python有些模块为了性能使用C实现。当性能至关重要而官方文档不足时,可以自由探索源代码。你可以找到底层的数据结构和算法。 Python的源码库就是一个很棒的地方:http://svn.python.org/view/python/trunk/Modules

结论:
这些不能替代大脑思考. 打开引擎盖充分了解是开发者的职责,使得他们不会快速拼凑出一个垃圾设计. 本文的Python建议可以帮助你获得好的性能. 如果速度还不够快, Python將需要借助外力:分析和运行外部代码.我们將在本文的第二部分中涉及.

第二部分

有益的提醒,静态编译的代码仍然重要. 仅例举几例, Chrome,Firefox,MySQL,MS Office 和 Photoshop都是高度优化的软件,我们每天都在使用. Python作为解析语言,很明显不适合. 不能单靠Python来满足那些性能是首要指示的领域.  这就是为什么Python支持让你接触底层裸机基础设施的原因, 将更繁重的工作代理给更快的语言如C. 这高性能计算和嵌入式编程中是关键的功能. Python性能鸡汤第一部分讨论了怎样高效的使用Python. 在第二部分, 我们將涉及监控和扩展Python.

1. 首先, 拒绝调优诱惑

调优给你的代码增加复杂性. 集成其它语言之前, 请检查下面的列表. 如果你的算法是”足够好”, 优化就没那么迫切了.
1. 你做了性能测试报告吗?
2. 你能减少硬盘的 I/O 访问吗?
3. 你能减少网络 I/O 访问吗?
4. 你能升级硬件吗?
5. 你是为其它开发者编译库吗?
6.你的第三方库软件是最新版吗?

2. 使用工具监控代码, 而不是直觉
速度的问题可能很微妙, 所以不要依赖于直觉. 感谢 “cprofiles” 模块, 通过简单的运行你就可以监控Python代码
“python -m cProfile myprogram.py”

我们写了个测试程序. 基于黑盒监控. 这里的瓶颈是 “very_slow()” 函数调用. 我们还可以看到 “fast()” 和 “slow()”都被调用200次. 这意味着, 如果我们可以改善 “fast()” 和 “slow()” 函数, 我们可以获得全面的性能提升. cprofiles 模块也可以在运行时导入. 这对于检查长时间运行的进程非常有用.


3. 审查时间复杂度
控制以后, 提供一个基本的算法性能分析. 恒定时间是理想值. 对数时间复度是稳定的. 阶乘复杂度很难扩展.

O(1) -> O(lg n) -> O(n lg n) -> O(n^2) -> O(n^3) -> O(n^k) -> O(k^n) -> O(n!)

4. 使用第三方包

有很多为Python设计的高性能的第三方库和工具. 下面是一些有用的加速包的简短列表.

1. NumPy: 一个开源的相当于MatLab的包
2. SciPy: 另一个数值处理库
3. GPULib: 使用GPUs加速代码
4. PyPy: 使用 just-in-time 编译器优化Python代码
5. Cython: 將Python优码转成C

6. ShedSkin: 將Python代码转成C++


5. 使用multiprocessing模块实现真正的并发
因为GIL会序列化线程, Python中的多线程不能在多核机器和集群中加速. 因此Python提供了multiprocessing模块, 可以派生额外的进程代替线程, 跳出GIL的限制. 此外, 你也可以在外部C代码中结合该建议, 使得程序更快.

注意, 进程的开销通常比线程昂贵, 因为线程自动共享内存地址空间和文件描述符. 意味着, 创建进程比创建线程会花费更多, 也可能花费更多内存. 这点在你计算使用多处理器时要牢记.


6. 本地代码

好了, 现在你决定为了性能使用本地代码. 在标准的ctypes模块中, 你可以直接加载已编程的二进制库(.dll 或 .so文件)到Python中, 无需担心编写C/C++代码或构建依赖. 例如, 我们可以写个程序加载libc来生成随机数.

然而, 绑定ctypes的开销是非轻量级的. 你可以认为ctypes是一个粘合操作系库函数或者硬件设备驱动的胶水. 有几个如 SWIG, Cython和Boost 此类Python直接植入的库的调用比ctypes开销要低. Python支持面向对象特性, 如类和继承. 正如我们看到的例子, 我们可以保留常规的C++代码, 稍后导入. 这里的主要工作是编写一个包装器 (行 10~18).


总结:

我希望这些Python建议能让你成为一个更好的开发者. 最后, 我需要指出, 追求性能极限是一个有趣的游戏, 而过度优化就会变成嘲弄了. 虽然Python授予你与C接口无缝集成的能力, 你必须问自己你花数小时的艰辛优化工作用户是否买帐. 另一方面, 牺牲代码的可维护性换取几毫秒的提升是否值得. 团队中的成员常常会感谢你编写了简洁的代码. 尽量贴近Python的方式, 因为人生苦短. :)

英文原文:http://blog.monitis.com/index.php/2012/02/13/python-performance-tips-part-1/

英文原文:http://blog.monitis.com/index.php/2012/03/21/python-performance-tips-part-2/

OSCHINA原创翻译,出处:OSCHINA