Python中zip()函数用法举例
2010 年 12 月 4 日定义:zip([iterable, ...])
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压),看下面的例子就明白了:
1 2 3 4 5 6 7 8 9 | >>> a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = zip(a,b) [(1, 4), (2, 5), (3, 6)] >>> zip(a,c) [(1, 4), (2, 5), (3, 6)] >>> zip(*zipped) [(1, 2, 3), (4, 5, 6)] |
对于这个并不是很常用函数,下面举几个例子说明它的用法:
继续阅读
PHP的文件缓存(File Cache)
2010 年 11 月 27 日紧接着上一次的话题,通过Yahoo Finance API获取股票数据,由于每次获取数据时间都比较久,对于放置的首页的东西,这么长时间的等待肯定是不可接受的,由于数据更新并不频繁,所以想到了用缓存的方法提高速度。常用的缓存方法有牛X基于内存的memcached,还有基于数据库的(用mysql或者sqlite),最常用的是基于文件的缓存。
先来看看调用的方法,再考虑如何实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | include('CFileCache.php'); $stock = array( '上证指数'=>'000001.ss', '深圳成指'=>'399001.sz', '香港恒生'=>'0011.hk', '日经指数'=>'^N225', '英国FTSE'=>'^FTSE', '法国CAC'=>'^FCHI', '德国DAX'=>'^GDAXI', '纳斯达克'=>'^IXIC', '道琼指数'=>'INDU', ); $cache = new CFileCache; if($cache->get('stocks') === false){ $widget = new FinanceWidget($metals); $data = $widget->run(false); echo $data; $cache->set('stocks',$data,1800); }else{ echo $cache->get('stocks'); } |
OK,大致流程就如您所看到的,先尝试从缓存中获取数据,如果获取成功则直接输出,失败的话从API获取数据并设置缓存和过期时间。
需要实现的基本方法就是get()和set()两个方法咯
继续阅读
通过Yahoo Finance API获取股票数据
2010 年 11 月 25 日最近要做的一个网站需要在首页显示世界各大股票交易场所的综合指数,于是搜集了点这方面的资料,今天把研究的结果放出来。
提供财经方面讯息,做的比较好的应该是Google财经和Yahoo财经了,综合考虑还是Yahoo的接口比较好用
API使用方法比较简单,举个例子:
http://finance.yahoo.com/d/quotes.csv?s=^XAU&f=snd1l1c6
返回数据:
”^XAU”,”PHLX Gold/Silver “,”11/24/2010″,213.51,”+1.01″
很典型的CSV数据,比较好处理。“s”指的是股票的代码(Symbol),“f”是要获取的数据选项,上面例子返回的数据分别是“代码”,“股票名称”,“最后更新时间”,“指数”,“变动”。完整的参数列表参见下面表格(对财经方面知道不多,所以不翻译了,以免误导别人):
继续阅读
介绍几个PHP代码检测的工具
2010 年 11 月 21 日1、php-cpd
功能描述:检测你代码中复制粘贴的部分( Copy/Paste Detector),位代码重构提供一定指导
安装:linux下比较简单,我用的是fedora,只要
yum install php-cpd就可以了,windows用户可以用pear来安装:
pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear install phpunit/phpcpd
python的enumerate函数
2010 年 11 月 9 日这个是python的一个内建函数,看书的时候发现了他,mark一下
当我们既需要遍历索引同时需要遍历元素的时候,可以考虑使用enumerate函数,enumerate函数接受一个可遍历的对象,如列表、字符串
比如我们有一个["one","two","there"]的列表,我们需要在列表的每个元素前面加上他的编号
1 2 3 4 5 6 7 8 | i = 0 seq = ["one","two","three"] for element in seq: seq[i] = '%d: %s' % (i, seq[i]) i += 1 print seq ['0: one', '1: two', '2: three'] |
Fedora下用配置nginx+fastcgi+php+mysql开发环境
2010 年 11 月 7 日最近玩linux,渐渐喜欢上用它了,忽然发现装了插件的GEdit还是很给力的,好了,废话不多少,今天来介绍下如何在linux下搭建自己的开发平台
我使用的是系统是Fedora 13,因为实际部署环境的关系,服务器选择nginx,安装过程都是通过yum而不是编译安装,这样方便升级和管理
需要的库:
- Nginx
- MySQL
- PHP
- spawn-fcgi
此外还有php必须的一些扩展,如果不是编译安装的话,我们需要自己来安装了
- GD
- Mcrypt
- DOM
- memcache
- eaccelerator
下面是安装命令,其他需要的库可自行安装。
1 2 | yum install nginx mysql-server spawn-fcgi yum install php-cli php-pdo php-mysql php-mcrypt php-mbstring php-gd php-xml php-pecl-memcache php-eaccelerator |
Tips: 为什么用spawn-fcgi而不用网上大部分人推荐的php-fpm?spawn-fcgi不光支持php,还支持诸如Python和Ruby这样的语言,另外就是它不需要重新编译,而php-fpm要自己编译过
对于一个开发环境来说已经可以满足需求了
都安装完成之后,我们需要编辑nginx的配置文件,让他支持fcgi,配置文件位于/etc/nginx/nginx.conf
继续阅读
VirtualBox在NAT模式下设置端口转发
2010 年 10 月 28 日在VirtualBox的NAT模式下要实现主机和虚拟机的通信,除了Bridge模式外就是端口转发了,VirtualBox提供了VBoxManage这样一个工具来管理VirtualBox的配置
VBoxManage是一个命令行运行的程序,可以在安装目录找到。
比如我们要映射22端口(sshd)到宿主计算机的2222端口,以通过主机控制虚拟机,免除来回在主机和虚拟机间切换的麻烦。
命令格式如下:
VBoxManage modifyvm “虚拟机名称” –natpf网卡编号 “服务名称,类型,宿主IP,宿主端口,虚拟机IP,虚拟机端口”
比如我的虚拟机是Fedora 13,网卡编号一般是1,则命令如下
1 2 | cd path\to\virtualbox VBoxManage modifyvm "Fedora 13" --natpf1 "ssh,tcp,,2222,,22" |
如果不想要这个服务了,用下面的命令进行删除:
VBoxManage modifyvm “Fedora 13″ –natpf1 delete “ssh”
以上命令适用于VirtualBox 3.2.0及以上的版本,如果是3.2一下的版本,则需要执行以下三条命令:
1 2 3 | VBoxManage setextradata "Fedora 13" "VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/Protocol" TCP VBoxManage setextradata "Fedora 13" "VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/GuestPort" 22 VBoxManage setextradata "Fedora 13" "VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/HostPort" 2222 |
其中”Fedora 13″是虚拟机名称,”e1000″是网卡类型(具体参加虚拟机的网卡设置),紧接着的”0″是网卡编号,”ssh”是配置名称
如果要删除设置,命令格式与上面的一样,只要把后面的值留空即可