2017.02
For Flask, to use the decorator, apply it as innermost decorator to a view function. When applying further decorators, always remember that the route()
decorator is the outermost.
2017.01
HTML的<select></select>
标签可以实现下拉选择框。
<select class="form-control">
<option value="admin" selected>admin</option>
<option value="admin">viewer</option>
<option value="admin">guest</option>
</select>
运行效果如下:
通过二进制的位操作,可以简化很多问题的分析。
例如现在有四个角色,分别为:读者,作者,编辑和管理员。有四个不同的权限使用四位的二进制数表示:
- 阅读权限:0001
- 写入权限:0010
- 修改权限:0100
- 删除权限:1000
每个角色的权限如下:
- 读者只能读,所以权限是0001
- 作者能读也能写,所以是0011
- 编辑能读能写能修改,所以是0111
- 管理员能读能写能修改能删除,所以是1111
要判断一个角色有哪些权限,人眼可以直接看对应的位置上面是0还是1,是0就是没有权限,是1就是有权限。在程序里面可以通过和对应权限的四位二进制数取位与操作。例如,0111编辑是否有写权限?因为0111 & 0010 = 0010 所以有写权限。只要角色的四位二进制数和权限的四位二进制数取位与,得到的结果还是权限的四位二进制数,那么就有这个权限。
正常情况下人有十根手指,所以一共可以计数1023个,但是一般在计数到第4个数的时候你就会挨打。明白二进制的自然知道我说的是什么意思。不明白二进制的,请看下面的动图:
Markdown在写作方面有非常好的优势,可以让写作的人不用关心格式,从而专注于要写的内容。但是Markdown不能进行缩进,这导致在一些大纲类的文本信息的显示上不太友好。Workflowy的出现可以解决这个问题。Workflowy只支持文本,界面极其简洁:
通过它来创建一个大纲,有助于理清思路。
在HTML的<form></form>
表单中,有一个属性叫做action
,它的值是空或者是一个URL的相对路径或绝对路径。如果为空,表单将会被提交到现在这个页面的URL;如果不为空,表单将会被提交到action的值对应的页面来处理。
理解这一点,那些喜欢在Flask中,把GET和POST写到一个Route,同时又要为GET带参数的人,需要特别注意。因为当你POST的时候,如果action不为空,参数可能会被丢失。
如果你想在局域网中共享一个文件,你可以通过Python 3快速完成:
- 打开终端或者CMD
cd
进入你需要分享的文件所在的文件夹- 输入
python3 -m http.server
回车 - 在另一台电脑上打开浏览器,输入上一台电脑的
ip地址:8000
例如:192.168.2.13:8000
- 下载文件
在Python中,使用yield
实现生成器。生成器的性质是只有在被迭代的时候才运行其内部的代码。这样可以大大降低内存的占用。除此之外,yield
还可以接收参数供生成器内部使用。
def generator(top):
index = 0
while index <= top:
value_from_out = yield index ** 2
print('来自外面的值为:{}'.format(value_from_out))
index += 1
power_2 = generator(10)
print(next(power_2))
print(next(power_2))
print(power_2.send("next(power_2) 相当于power_2.send(None)"))
print(next(power_2))
print(power_2.send('代码在函数和这里来回跳。'))
输出结果为:
0
来自外面的值为:None
1
来自外面的值为:next(power_2) 相当于power_2.send(None)
4
来自外面的值为:None
9
来自外面的值为:代码在函数和这里来回跳。
16
以上的运行方式,和协程非常的相似。
逆波兰式通过栈来实现对表达式的运算。例如:
中缀表达式: 5 + ((1 + 2) * 4) − 3
逆波兰式:5 1 2 + 4 * + 3 −
使用调度场算法可以将中缀表达式转换为逆波兰式。调度场算法是通过栈来实现的。操作数直接输出,符号需要判断优先级来判断应该直接压栈还是直接输出或者应该先将栈顶元素输出再压栈。