程序中很常见的一种场景就是根据某个控制变量的值来调用不同的函数或对象进行处理,某些语言中可以使用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()的作用就是把原函数的相关信息代入到新的函数中。

评论和分享

你好,2016!

发布在

从13年开始写博客,居然已经过了整整3年,自己都没想到能坚持这么久。虽然有些时候一个月只写一篇,但都是自己原创或者翻译的,也是对自己成长记录。按照以往的惯例,这篇文章应该是发布在1月1日的,但今年我竟然稀里糊涂的把这事记错了,以为农历新年时才写总结……

一句话形容2015:平凡而又充实的一年。

全年共阅读21本书,体重也终于上升到了59kg左右,至于收益率的目标……遇到了千股跌停的奇观基本也就达成一半。购物的、娱乐的倒是全部完成了,锻炼又是练练就断了,记账坚持的不错,如果每月能有点结余就更好了,真是收入多了支出也多了。

剩下的……嗯,把2015年目标改成2016年吧……

2015年最有成就感的:

  1. 自驾去海边,走的沿海山路,各种急弯各种坡路啊!以前坐车的时候感觉在山路上看海好美,可自己开车时候根本没办法去欣赏唉……
  2. 新的数据中心、计算中心、网站上线,其中各种曲折就不说了。

2015年最难过的:

  1. 都过去了。
    未来3年的规划已经初定,如果没什么意外的话,今年应该是属于“潜龙勿用”的阶段,打好基础才是关键。
    最后:

    你好,2016!

评论和分享

  • 第 1 页 共 1 页
作者的图片

Roy

微信公众号:hi-roy


野生程序猿


China