__getattr__ 与 __getattribute__ 的区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class C:
def __getattr__(self, name):
return '[private]' + object.__getattribute__(self, name)

def __getattribute__(self, name):
if name.startswith('_'):
raise AttributeError('name is not exist')
return object.__getattribute__(self, name)

c = C()
c._name = 'guanyu'
print(c._name)

c.age = 88
print(c.age)

本地搭建静态服务器

http-server(node)

http-server命令可以访问当前文件夹,可以-p设置端口号(默认为8080),-a设置ip地址。
这个命令基于node,所以需要事先安装node,然后使用npm全局安装http-server。

less做个径向菜单

在慕课网发现了一个有意思的课程,叫 数学知识在CSS动画中的应用 。用到的数学知识是如何计算圆上每个点的坐标。统一名称,中间的菜单叫触发菜单,四周发散的菜单叫子菜单。

慕课网通过jquery计算子菜单的坐标,控制相应的css属性,来实现这一功能。
有关计算,又有关css属性,那么css预处理器便是一个不错的选择。

python 关于dict的总结

总结了一些关于字典的小技巧或者注意的地方。

使用zip创建字典

创建字典有以下三种方法

1
2
3
dict(a=1, b=2, c=2)
dict([(a,1), (b,2), (c,3)])
dict({a:1, b:2, c:3})

推荐使用第二种方法结合zip创建

1
2
3
key = 'abcde'
value = range(1, 6)
dict(zip(key, value))

nodejs中EventEmitter

在模块events中,定义了一个EventEmitter,可以使用var EventEmitter = require('events');访问它。基本上所有发送事件的对象都是继承自EventEmitter。有基本属性和方法如下。

pdb调试与sublime快捷键设置

python pdb调试以及sublime3快捷键设置

pdb调试

如果对gdb比较熟悉的话,pdb就很容易上手。以一个demo快速了解常用的调试命令。

1
2
3
4
5
6
7
8
9
def test(a):
while True:
if a > 10:
break
a += 1
return a

if __name__ == '__main__':
test(1)

iterr, yield与enumerate的模拟实现

模拟实现一个enumerate函数

1
2
3
4
5
6
def myEnumerate(seq, start=0):
results = []
n = start
for i in seq:
results.append((n, i))
return results

返回一个list, 如果list数据过多,则占用内存太大。而迭代器每次只需要很小的内存。再往下看迭代器。