1.闭包:
函数内部的子函数返回,在外部调用子函数时,其实函数已经结束,但是在调用子函数时,函数内部的局部变量任然有效。

 1 def fun():
 2     n = 10
 3     def fun1():
 4         print('n为:', n)
 5     return fun1
 6 
 7 f = fun()
 8 print(f)
 9 f()
10 
11 <function fun.<locals>.fun1 at 0x000001DF0E6DFA60>
12 n为: 10

--------------------------------------------------

2.装饰器:
参考:http://www.cnblogs.com/alex3714/articles/5765046.html

软件开发的一个原则:开放-封闭 原则
    开放:对现有功能的扩展开放
    封闭:已实现的功能代码块不应该被修改

------------------

# 对河南和欧美专区认证,若是已经登录过,就不需要在登录。

# 2.1.语法糖 装饰器 

 1 user_state = False
 2 def login(func):
 3     def inner():
 4         _username = 'alice'
 5         _password = '123'
 6         global user_state
 7         if user_state == False:
 8             username = input('username:').strip()
 9             password = input('password:').strip()
10 
11             if username == _username and password == _password:
12                 print('welcome to login...')
13                 user_state = True
14             else:
15                 print('wrong username or password')
16         else:
17             print('用户已经登录,认证通过')
18         if user_state == True:
19             func()
20     return inner
21 
22 def home():
23     print('-----首页-----')
24 @login # america=login(america)
25 def america():
26     print('-----欧美专区-----')
27 
28 def japan():
29     print('-----日韩专区-----')
30 @login # henan=login(henan)
31 def henan():
32     print('-----河南专区-----')
33 
34 home()
35 henan()
36 america() 
37 
38 -----首页-----
39 username:alice
40 password:123
41 welcome to login...
42 -----河南专区-----
43 用户已经登录,认证通过
44 -----欧美专区-----
语法糖 装饰器

相关文章: