手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:python

php2python

极有意思的网站,比较适合我们这些初学者,当然是对PHP有一些基础的初学者
网站主把常用的一些PHP的函数,用Python实现了一遍(或者是显示Python的自有函数),方便我们查找例子

例如:PHP常用的addslashes函数,用来对特殊字符进行转义,

该网站则显示:

http://www.php2python.com/wiki/function.addslashes/
  1. def addslashes(s):  
  2.     d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"}  
  3.     return ''.join(d.get(c, c) for c in s)  
  4.   
  5. s = "John 'Johny' Doe (a.k.a. \"Super Joe\")\\\0"  
  6. print s  
  7. print addslashes(s)  
  8. #John 'Johny' Doe (a.k.a. "Super Joe")\  
  9. #John \'Johny\' Doe (a.k.a. \"Super Joe\")\\\  

实现方法虽然有点不一样,但对于我们这些初学者已经了解了很多用法,比如for in,join ,dict的get用法。当然还有定义函数的def方法。

这个网站是什么呢?http://www.php2python.com,黑黑,已经加入我的收藏夹了。感谢小缘缘的推荐

Tags: php, python, function

初学python

初学python,小缘缘出了几道题:
有一 list
a = [1, 2, 3, 4, 5, 6]
請將 a 依
0, 1
1, 2
2, 3
3, 4
4, 5
5, 6
打印輸出,
2.將a list 倒序成 [6, 5, 4, 3, 2, 1]
3.將a 中的偶數挑出 *2 ,結果為 [4, 8, 12]

基本上实现:

a=[1,2,3,4,5,6]

for i in a:
    print a.index(i),',',i

a.reverse();

print a

for i in a:
    if i%2==0
        print i*2

虽然都完成了,但小缘缘说回答的不好,他这样回复

for k,v in enumerate(a):
    print k,v
print a[::-1]
print [i*2 for i in a if not i%2]

当时我就傻眼了,后来缘缘又出了道题目:

造一個 200 個隨機正整數(1~15)的list
統計其中 正整數的出現次數,並排序輸出結果

开始的时候,不清楚random居然还要import。。。。

后来花了好久做出来:

>>> import random
>>> mylist = [random.randint(1,15) for i in range(1,200)]
>>> s={}
>>> for i in mylist:
    if not s.has_key(i):
        s[i]=0
    else:
        s[i]+=1

       
>>> cmplist = sorted(s.items(),key=lambda(d):d[1])
>>> result = cmplist[::-1]
>>> print result
[(8, 20), (13, 19), (12, 16), (9, 15), (6, 15), (3, 14), (2, 12), (14, 11), (4, 11), (15, 10), (7, 10), (11, 9), (5, 9), (1, 9), (10, 4)]

缘缘点评循环的时候,可以用Get比如

for i in mylist:
    s[i]=s.get(i,0)+1

然后说sorted可以有从大到小的倒排,后来找了一下资料,发现可以这样

sorted(d.items(),cmp=lambda x,y:cmp(x[1],y[1]),reverse=True)

第一次写python,鸭梨太大了。。。

Tags: python, import, random

又拍网架构-又一个用到python的网站

原文在这里:http://www.bopor.com/?p=652,我只是做个简单的转述。主要是因为这种架构在单台服务器上也可以做个参考,比如队列,当我一台服务器承受不了太大的访问时,我可以先把很多东西扔到队列里去,交由后台执行(当然是指一些比较重要而又不需要即时显示的。比如图片处理等 )

OK,不多说了,直接上原文的重点为:

分库设计,数据库拆分

XML/HTML代码
  1. 最初是由一台主库和一台从库组成,当时从库只用作备份和容灾,当主库出现故障时,从库就手动变成主库,一般情况下,从库不作读写操作(同步除外)。随着压力的增加,我们加上了memcached,当时只用其缓存单行数据。但是,单行数据的缓存并不能很好地解决压力问题,因为单行数据的查询通常很快。所以我们把一些实时性要求不高的Query放到从库去执行。后面又通过添加多个从库来分流查询压力,不过随着数据量的增加,主库的写压力也越来越大。  
怎么样对应用户和数据库呢?
· 按算法对应
· 按索引/映射表对应

分库会给你在应用的开发和部署上都带来很多麻烦。
· 不能执行跨库的关联查询
· 不能保证数据的一致/完整性
· 所有查询必须提供数据库线索
· 自增ID

XML/HTML代码
  1. 如果要在节点数据库上使用自增字段,那么我们就不能保证全局唯一。这倒不是很严重的问题,但是当节点之间的数据发生关系时,就会使得问题变得比较麻烦。我们可以再来看看上面提到的评论的例子。如果photo_comments表中的comment_id的自增字段,当我们在DB- 2.photo_comments表插入新的评论时,得到一个新的comment_id,假如值为101,而User-A的ID为1,那么我们还需要在DB-1.user_comments表中插入(1, 101 …)。 User-A是个很活跃的用户,他又评论了User-C的照片,而User-C的数据库是DB-3。很巧的是这条新评论的ID也是101,这种情况很用可能发生。那么我们又在DB-1.user_comments表中插入一行像这样(1, 101 …)的数据。那么我们要怎么设置user_comments表的主键呢(标识一行数据)?可以不设啊,不幸的是有的时候(框架、缓存等原因)必需设置。那么可以以 user_id、 comment_id和photo_id为组合主键,但是photo_id也有可能一样(的确很巧)。看来只能再加上photo_owner_id了,但是这个结果又让我们实在有点无法接受,太复杂的组合键在写入时会带来一定的性能影响,这样的自然键看起来也很不自然。所以,我们放弃了在节点上使用自增字段,想办法让这些ID变成全局唯一。为此增加了一个专门用来生成ID的数据库,这个库中的表结构都很简单,只有一个自增字段id。当我们要插入新的评论时,我们先在ID库的photo_comments表里插入一条空的记录,以获得一个唯一的评论ID。当然这些逻辑都已经封装在我们的框架里了,对于开发人员是透明的。为什么不用其它方案呢,比如一些支持incr操作的Key-Value数据库。我们还是比较放心把数据放在MySQL里。另外,我们会定期清理ID库的数据,以保证获取新ID的效率。  

我这里只有一个小纲要,更多还是看原文吧。

最后介绍一下Yupoo的资料:

作为国内最大的图片服务提供商之一,Yupoo! 的 Alexa 排名大约在 5300 左右。同时收集到的一些数据如下:
带宽:4000M/S (参考)
服务器数量:60 台左右
Web服务器:Lighttpd, Apache, nginx
应用服务器:Tomcat
其他:Python, Java, MogileFS 、ImageMagick 等

关于 Squid 与 Tomcat
Squid 与 Tomcat 似乎在 Web 2.0 站点的架构中较少看到。我首先是对 Squid 有点疑问,对此阿华的解释是”目前暂时还没找到效率比 Squid 高的缓存系统,原来命中率的确很差,后来在 Squid 前又装了层 Lighttpd, 基于 url 做 hash, 同一个图片始终会到同一台 squid 去,所以命中率彻底提高了”
对于应用服务器层的 Tomcat,现在 Yupoo! 技术人员也在逐渐用其他轻量级的东西替代,而 YPWS/YPFS 现在已经用 Python 进行开发了。

名词解释:
YPWS–Yupoo Web Server YPWS 是用 Python开发的一个小型 Web 服务器,提供基本的 Web 服务外,可以增加针对用户、图片、外链网站显示的逻辑判断,可以安装于任何有空闲资源的服务器中,遇到性能瓶颈时方便横向扩展。
YPFS–Yupoo File System 与 YPWS 类似,YPFS 也是基于这个 Web 服务器上开发的图片上传服务器。

【Updated: 有网友留言质疑 Python 的效率,Yupoo 老大刘平阳在 del.icio.us 上写到 “YPWS用Python自己写的,每台机器每秒可以处理294个请求, 现在压力几乎都在10%以下”】

图片处理层
接下来的 Image Process Server 负责处理用户上传的图片。使用的软件包也是 ImageMagick,在上次存储升级的同时,对于锐化的比率也调整过了(我个人感觉,效果的确好了很多)。”Magickd“ 是图像处理的一个远程接口服务,可以安装在任何有空闲 CPU资源的机器上,类似 Memcached的服务方式。
我们知道 Flickr 的缩略图功能原来是用 ImageMagick 软件包的,后来被雅虎收购后出于版权原因而不用了(?);EXIF 与 IPTC Flicke 是用 Perl 抽取的,我是非常建议 Yupoo! 针对 EXIF 做些文章,这也是潜在产生受益的一个重点。
图片存储层
原来 Yupoo! 的存储采用了磁盘阵列柜,基于 NFS 方式的,随着数据量的增大,”Yupoo! 开发部从07年6月份就开始着手研究一套大容量的、能满足 Yupoo! 今后发展需要的、安全可靠的存储系统“,看来 Yupoo! 系统比较有信心,也是满怀期待的,毕竟这要支撑以 TB 计算的海量图片的存储和管理。我们知道,一张图片除了原图外,还有不同尺寸的,这些图片统一存储在 MogileFS 中。
对于其他部分,常见的 Web 2.0 网站必须软件都能看到,如 MySQL、Memcached 、Lighttpd 等。Yupoo! 一方面采用不少相对比较成熟的开源软件,一方面也在自行开发定制适合自己的架构组件。这也是一个 Web 2.0 公司所必需要走的一个途径。

Tags: 架构, python, php, mq

Python 3.0 一个巨大的改变

通常情况下,一个开发语言的新版本都会保持向后兼容原来的老版本,但是在2000年,Python语言的创始人Guido van Rossum宣布,他将跨入一个新的Python版本,3.0版本将不会向后兼容。现在Python 3.0 RC候选版本已经发布,正式版本将在这个月月底发布。

开发者也许会无法接受语言新版本的用法和老的代码不兼容,但是对于Rossum来说,激进的升级是必要的。语言如果能用无数种方式做同一件事情,那么应该做的工作没有人真正做到了。

3.0的发布是一个重要动作,Rossum说,这是要让python语言有更好的基础向前迈进。

Python 3.0 改变了什么?

从某种意义来说,Python已经成为自身成功的受害者。Rossum说,“最初的想法中,Python的使用范围很小,我真的没有想到Python是如此成功,正在各种各样的应用中使用,从web应用编程到科学计算,以及所有的一切类型程序。”

Van Rossum于1990年创建Python,作为一个开源,可扩展,高层次的语言,他还需要处理一些系统管理的职责。如今Python是世界上最流行的语言之一。08年3月,奥地利研究者Anton Ertl通过在新闻组发贴数量来统计语言的热门程度,Python排在第三位,仅次于C和Java之后。

今天,最容易来教别人如何编程的语言是python,python是使用起来最简单的语言之一,而且很优雅。

但是Python的简单正在遏制自己的增长,在整个90年代,不停有新的功能和属性进入python语言,但是不一致开始在整个平台上显现出来。 Rossum说,我们开始慢慢逝去了简单的优势,我们必须打破向后兼容性,停止语言定义的膨胀,虽然这种转变发生的非常缓慢,几乎难以察觉。

Python语法改变有一系列的列表,有些改变很小,可能被忽略,有些程序员可以迅速接受:比如去除print语句,加入print()函数实现相同的功能。同样的还有exec语句,已经改为exec()函数。去除了<>,全部改用!=。详细可以查看:Python 3.0 抢“鲜”体验。

如何转换?

Python 2.6作为过渡版本,2.6可以帮助开发者找到过时的程序代码,为3.0版本做准备,同时还有一个python 2.0到python 3.0的代码转换工具

当然也有很多人置疑python 3.0是否必要,有可能升级被大多数不愿意转换老代码的开发商忽视,因此,它可能失去其地位,类似于微软的vista没有取代windows xp成为事实流行标准。

比如编写打印软件的Aahz Maruch负责的工程,Page DNA项目,有超过20万行代码需要转换,这是将是一个巨大的工作,Maruch说道,我们将等待几年后的自动翻译工具来改善,我们甚至没有谈到3.0,打算等它发布两三年以后。

今天Python主要的实现是CPython,这是一个用C写的Python翻译器,而且还有其他的Python实现,比如JPython(Python in Java),IronPython ( 用微软.net通用运行时语言编写的Python),以及PyPy(一个用 Python写的Python翻译器).

不管怎样,Python的核心开发团队对推广Python 3.0非常有信心,Rossum认为人们使用2.6从现在开始不到一年就会转移到3.0版本上,他同时建议:你如果开始一个新的Python项目,你绝对应该使用3.0.

让我们祝Python 3.0取得成功。
本文来自CNBETA.COM,原文:http://www.cnbeta.com/articles/67482.htm

Tags: python, web, 改进, 兼容

Records:912