Pyflame安装小记

发布在 Python

火焰图是一款性能调优工具,可以清晰的看出程序运行瓶颈在哪里。

pyflame则是由Uber开源出来的针对python程序生成火焰图的工具。

这里记录一下安装过程以及遇到的错误。

阅读全文

几道python面试题

发布在 Python

前几天去笔试,这里记录一下遇到的几个编程题,比较基础。

生成斐波那契数列并取前10项

1
2
3
4
5
6
7
8
9
10

def func(m):
n,a,b = 0,1,1
while n < m:
yield a
a,b = b,a+b
n += 1

for one in func(10):
print one

这个可以说是一道常见的简单算法题了,关键点就是理解a,b=b,a+b以及yield的作用。

阅读全文

numpy学习笔记

发布在 Python

简介

Numpy(发音”南派”而不是”努屁”)是一款用来进行科学计算的python库,可以方便快速的计算平均值、最大值、最小值、方差、标准差、向量运行等。相关库还有
Pandas,Scypi等。

阅读全文

使用requests来模拟HTTP请求本来是一件非常轻松的事情,比如上传图片来说,简单的几行代码即可:

1
2
3
4
5
6
7
8
9
import requests
files = {'attachment_file': ('1.png', open('1.png', 'rb'), 'image/png', {})}
values = {'next':"http://www.xxxx.com/xxxx"}
r = requests.post('http://www.xxxx.com/upload', files=files, data=values) # 成功
r = requests.post('http://www.xxxx.com/upload', files=files, data=values) # 失败
r = requests.post('http://www.xxxx.com/upload', files=files, data=values) # 失败
r = requests.post('http://www.xxxx.com/upload', files=files, data=values) # 失败
r = requests.post('http://www.xxxx.com/upload', files=files, data=values) # 失败
...

不过我今天在调试一个django程序的时候却遇到了大坑————为了偷懒,我直接在ipython中执行了上述代码,第一次提交的时候一切正常,但第二次之后提交就怎么也通过不了django的form验证。

阅读全文

服务器推送事件(server-sent events,SSE)是一种除websocket、ajax简单轮寻外另一种实现服务器数据主动推送数据到浏览器的方式。

这里,举一个的例子来说明如何使用基于pyhon的服务端来实现,为了简单我使用flask框架来实现。关键点有2个:

  1. HTTP响应头中包含content-type:text/event-stream
  2. 流响应
阅读全文

python中闭包示例

发布在 Python

概念上的东西这里就不详细解释了,为什么需要闭包(Closures)呢?个人理解就是某些情况下你需要在外部访问函数内部的变量时,闭包就该大显身手了。闭包的一种典型表现就是函数内部定义了新的函数。这里举几个例子以记录使用闭包时的几个注意点,例子来源于这里,大神用javascript写的示例,这里改成python的,也顺便说说遇到的坑。

阅读全文

程序中很常见的一种场景就是根据某个控制变量的值来调用不同的函数或对象进行处理,某些语言中可以使用case语句进行处理,在python可以使用getattr函数甚至if…elif…else来处理,除此之外,也可以使用字典来实现相同的功能,比如下面的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
animals = []
number_of_felines = 0
def deal_cat():
global number_of_felines
print "meow"
animals.append('feline')
number_of_felines += 1
def deal_dog():
print 'bark'
animals.append('canine')
def deal_bear():
print "hug"
animals.append('ursine')
token = {'cat': deal_cat, 'dog': deal_dog, 'bear': deal_bear}
#words = ['cat', 'dog', 'bear']
words = ['cat', 'dog', 'bear', 'cat']
for one in words:
token[one]()
#return token[one]()
nf = number_of_felines
print 'we met %d feline%s' % (nf, 's'[nf == 1:])
print 'the animals we net were:', ' '.join(animals)

阅读全文

celery使用小记

发布在 Python

之前的博客有关于celery以及相关概念的介绍,不过那篇文章没有具体的使用示例,今天补充一下。

目前celery的版本是3.1.19

这里我使用rabbitmq作为broker以及banckend。

阅读全文

关于functools.wraps的作用

发布在 Python

今天看代码时候有这么一段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from functools import wraps
def http_basic_auth(func):
'''定义httpbasicauth装饰器'''
@wraps(func)
def _decorator(request, *args, **kwargs):
authorization = request.META.get('HTTP_AUTHORIZATION','')
if authorization:
authmeth, auth = authorization.split(' ', 1)
if authmeth.lower() == 'basic':
auth = auth.strip().decode('base64')
username, password = auth.split(':', 1)
user = authenticate(username=username, password=password)
if user and user.is_superuser:
login(request, user)
return func(request, *args, **kwargs)
return HttpResponseForbidden()
return _decorator

作用就是为django实现http认证的装饰器,并且使用超级管理员才可以使用被装饰的接口。至于什么是装饰器、闭包、作用域这里就不多说了,有兴趣的可以参考http://www.imooc.com/learn/581 讲解的非常详细。

那么,这个函数中的@wraps(func)又是做什么的呢?这里就涉及到了装饰器的一个小细节问题:被装饰后的函数本质上已经不是原来的函数了,所以原函数的某些信息比如:__name____doc__等值就变了。而@wraps()的作用就是把原函数的相关信息代入到新的函数中。

评论和分享

作者的图片

Roy

君以国士待我,我必以国士报君。


野生程序猿


China