Python程序员的进化
以前本站发布过一篇《程序员的进化》,以一种幽默的代码展现方式调侃了程序。下面这篇是关于Python程序员的。以阶乘为例,很有意思。
目录
新手程序员
第一年的刚学完Pascal的新手
第一年的刚学完C语言的新手
第一年刚学完SICP的新手
第一年刚学完Python的新手
爱偷懒的程序员
更懒的 Python 程序员
Python 专家
Python 黑客
专家级程序员
英语系的专家级程序员
Web 设计者
Unix 程序员
Windows 程序员
公司里的程序员
新手程序员
def factorial(x):
if x == 0:
return 1
else:
return x * ...
如何使用Python操作摄像头
用过USB摄像头的都知道,你需要使用鼠标来操作它,比如截个图,录个像什么的,要点N次鼠标,对于我们那些不喜欢多次点击鼠标的人来说,这是一件很boring的事情,所以,本文将教你如何使用Python来操作摄像头。
这里,我们需要三个Python库: VideoCapture, PIL 和 pygame。使用这三个库你可以非常容易的编写一个摄像头程序。之所以使用pygame,其目的就是因为这个库可以处理视频帧(fps)。下面是代码:
from VideoCapture import Device
import ImageDraw, sys, pygame, time
from pygame.locals import *
from PIL import ImageEnhance
res = (640,480)
pygame.init()
cam = Device()
cam.setResolution(res[0],res[1])
screen = pygame.display.set_mode((640,480))
pygame.display.set_caption(' ...
某Python实现的尾部递归
mailper 在2009年4月26的文章里《Guido认为程序员大多数工作不需要递归》谈及递归不是编程的基础。并且在python中并没有实现尾部递归Tail Recurssion。
但是,今天我们却看见了某Python实现的尾部递归
:)
用Python写NCurses UI
Ncurses是一个能提供基于文本终端窗口功能的动态库. Ncurses可以:
可以使用整个屏幕
创建和管理一个窗口
使用8种不同的彩色
为您的程序提供鼠标支持
使用键盘上的功能键
Ncurses可以在任何遵循ANSI/POSIX标准的Unix/Linux系统上运行,除此之外,它还可以从系统数据库中检测终端的属性,,并且自动进行调整,提供一个不受终端约束的接口。因此,Ncurses可以在不同的系统平台和不同的终端上工作的非常好。
mc工具集就是一个用ncurses写的很好的例子,而且在终端上系统核心配置的界面同样是用ncurses编写的. 下面就是它们的截图:
当然,在我们这篇文章中,我们不会教你怎么写NCurses程序,我们只是想告诉你如何用Python来写Ncurses的程序,示例会非常简单,点到为止。
在此之前,我们先简单的回顾一下如何使用Python的一些简单的语法。
先看看一个最简单的Python程序:
print "How easy is this?"
x = 1
y = 2
z = x + y
print "Result of x + ...
Python调用C语言函数
使用Python的ctypes,我们可以直接调用由C直接编译出来的函数。其实就是调用动态链接库中的函数。为什么我们需要这样做呢,因为有些时候,我们可能需要一个性能上比较讲究的算法,有些时候,我们可以在Python中使用已经有了的现成的被封闭在动态链接库中的函数。下面是如何调用的示例。
首先,我们用一个乘法来表示一个算法功能。下面是C的程序:
int
multiply(int num1, int num2)
{
return num1 * num2;
}
如果在Windows下,你可能需要写成下面这个样子:
#include <windows.h>
BOOL APIENTRY
DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
return TRUE;
}
__declspec(dllexport) int
multiply(int num1, int num2)
{
return ...
Python处理中文的时候的一些小技巧
相信第一次处理中文的朋友们可能都会对中文的encoding 和程序的报错很头疼。
如果你像我一样希望能够把事情尽快做好而不去深究,你可能会写一些异常处理的代码把 UnicodeEncodingError糊弄过去先,但当你开始怀疑有多少encoding出错的信息被你丢弃的时候,可能你会很惊奇。于是,你还是会想坐下来,(洗把脸)然后面对自己必须弄懂什么是utf-8,什么是 ‘gb2312’, 什么是 ‘gbk’ 和其中的猫腻。正如有时候猛撕小伤口上邦迪胶布的快感一样,有时候当你认真面对一些你平时一直回避的问题的时候(其实有时候需要的不是勇气), 你反而会觉得“不过如此”,并且能够一劳永逸的解决问题。
关于Python处理Unicode,我所能找到的最言简意赅的入门教程是:
Unicode In Python, Completely Demystified (揭秘Python Unicode)
简要罗列一下最重要最实用的点:
Solution
Decode early (尽早decode, 将文件中的内容转化成 unicode 再进行下一步处理)
Unicode eve ...
Python中实现多属性排序
我们有一组记录:
list_records =
(
(department, name, salary),
(department, name, salary),
...
(department, name, salary)
)
然后我们想进行类似 MS – Excel 里的 “then sort by” 中的功能一样先基于department排序,然后再在部门内按照salary排序。
其他编程语言可能相对复杂,我这里写出一个用Python实现的最简方法(也许有比这个还短的,来挑战吧)
list_records.sort(
key = lambda l: (l[0], l[2])
)
这个就是函数是编程的好处,可以无中生有的构造出一个没有名字的inline函数。假设我们有另外一个dictionary_age 是保存的 { name: ages }, 我们还可以简单的实现基于外部属性进行排序。例如,如果我们想先按照部门排序,然后在部门里按照年龄排序,我们可以写:
list_record.sort(
key = lambda l:( l[0], dictionary_age ...