84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
今天看python的闭包。虽然知道怎么在程序里添加一个闭包 可是还是弄不明白 写程序的时候,怎么样合理的使用他。
要是想输出n的值 直接 print n 就好了 为什么还要用一个闭包来实现他?
大家有什么例子 在函数中 只能是闭包才可以实现,普通的函数没有办法做到的? 或者用了闭包 能让代码看起来更加优美的例子?
人生最曼妙的风景,竟是内心的淡定与从容!
pyhton 的装饰器呀
pyhton
看看这个,比较详细 Python中的闭包
假如我们的程序需要一个验证器,它是一个函数,检查输入字符串的长度小于100视为合法,否则抛出Exception异常,这样函数外部的调用者可以通过try-except来检查某次输入是否合法,那么这个验证器函数长这个样子:
Exception
try-except
def validator(s): if len(s) < 100: return raise Exception('Length of string must be less than 100!')
这样我们就可以在这些需要检查字符串长度小于100的地方使用这个验证器。但问题来了,如果我们的程序有多处需要用到这类验证器,以检测输入字符串长度必须满足小于n,比如有个地方需要检查长度小于16, 还有28、39等等,难道我们按照上面代码的写法写多个validator?即便这么做,名字也难取!
答案就是用函数工厂,用闭包来完成:
def max_length(n): def validator(s): if len(s) < n: return raise Exception('Length of string must be less than {0}!'.format(n)) return validator
这样,如果我们需要检查字符串长度小于16的验证器,max_length(16)就可以得到一个,如果是n,则max_length(n)。
max_length(16)
max_length(n)
这是个实际案例,来自 MongoKit in Flask
pyhton
的装饰器呀看看这个,比较详细 Python中的闭包
假如我们的程序需要一个验证器,它是一个函数,检查输入字符串的长度小于100视为合法,否则抛出
Exception
异常,这样函数外部的调用者可以通过try-except
来检查某次输入是否合法,那么这个验证器函数长这个样子:这样我们就可以在这些需要检查字符串长度小于100的地方使用这个验证器。但问题来了,如果我们的程序有多处需要用到这类验证器,以检测输入字符串长度必须满足小于n,比如有个地方需要检查长度小于16, 还有28、39等等,难道我们按照上面代码的写法写多个validator?即便这么做,名字也难取!
答案就是用函数工厂,用闭包来完成:
这样,如果我们需要检查字符串长度小于16的验证器,
max_length(16)
就可以得到一个,如果是n,则max_length(n)
。这是个实际案例,来自 MongoKit in Flask