Python之路,Day4 - Python基础4 (new版)

  • 装饰器
user_status = False #用户登录后改为True

def login(func): #传入想调用的函数名

    def inner():
_username = 'alex' #假装这是DB里存的用户信息
_password = 'abc!23' #假装这是DB里存的用户信息
global user_status if user_status == False:
username = input('user:')
password = input('password:') if username == _username and password == _password :
print('welcome login...')
user_status = True
else:
print('wrong username or password!')
else:
print('用户已登录,验证通过...') if user_status:
func() #执行传入的函数名的函数 return inner #返回内层函数的内存地址 def home():
print('----首页----') def america():
print('----欧美专区----') def japan():
print('----日韩专区----') @login #相当于henan = login(henan) ,返回inner
def henan():
print('----河南专区----') henan()
  • 装饰带参数的函数  支持多个参数
user_status = False #用户登录后改为True

def login(func): #传入想调用的函数名

    def inner(*args,**kwargs):
_username = 'alex' #假装这是DB里存的用户信息
_password = 'abc!23' #假装这是DB里存的用户信息
global user_status if user_status == False:
username = input('user:')
password = input('password:') if username == _username and password == _password :
print('welcome login...')
user_status = True
else:
print('wrong username or password!')
else:
print('用户已登录,验证通过...') if user_status:
func(*args,**kwargs) #执行传入的函数名的函数 return inner #返回内层函数的内存地址 def home():
print('----首页----') def america():
print('----欧美专区----') @login
def japan():
print('----日韩专区----') @login #相当于henan = login(henan) = inner
def henan(style):
print('----河南专区----',style) henan('3p')
japan()
  • 装饰器带参数
user_status = False #用户登录后改为True

def login(author_type): #传入想调用的函数名
def outer(func):
def inner(*args,**kwargs):
_username = 'alex' #假装这是DB里存的用户信息
_password = 'abc!23' #假装这是DB里存的用户信息
global user_status if user_status == False:
username = input('user:')
password = input('password:') if username == _username and password == _password :
print('welcome login...')
user_status = True
else:
print('wrong username or password!')
else:
print('用户已登录,验证通过...') if user_status:
func(*args,**kwargs) #执行传入的函数名的函数 return inner #返回内层函数的内存地址
return outer def home():
print('----首页----') def america():
print('----欧美专区----') @login('wx')
def japan():
print('----日韩专区----') @login('qq') #相当于 xx = login('qq') = outer, henan = xx(henan) = inner
def henan(style):
print('----河南专区----',style) henan('3p')
japan()

Python全栈之路----函数进阶----装饰器的更多相关文章

  1. Python全栈之路----函数进阶----名称空间

    又名name space,顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的=地方 名称空间共3种,分别如下 ...

  2. Python全栈之路----函数进阶----迭代器

    我们已经知道,可以直接作用于 for 循环的数据类型有以下几种: 一类是集合数据类型,如 list , tuple , dict , set ,str 等: 一类是 generator ,包括生成器和 ...

  3. Python全栈之路----函数进阶----作用域的查找空间

    n = 10 def func(): n = 20 print('func:',n) def func2(): n = 30 print('func2:',n) def func3(): print( ...

  4. Python全栈之路----函数进阶----闭包

    关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数).而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数.当其中一个这样的内部函数在包含它们之外被调用时,就会形成闭 ...

  5. Python全栈之路----函数进阶----生成器

    生成器特点: 不能立即产生,取一次创建一次 只能往前走 等到走到最后,就会报错 >>> a = [i for i in range(1000)] >>> a [0, ...

  6. Python全栈之路----函数进阶----列表生成式

    列表生成式 现在有个需求,看列表[0,1,2,3,4,5,6,7,8,9],要求你把列表里每个值都加1,你怎么实现?你可能会想到两种方法. 二逼青年版 >>> a = [0,1,2, ...

  7. Python全栈开发之8、装饰器详解

    一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了.转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5486253.html 一.装饰器 装饰器可以使函数执 ...

  8. 巨蟒python全栈开发-第15天 装饰器

    一.今日内容总览 关于函数的装饰器1.装饰器(重点,难点)(要求:反复写,代码不多但是很绕) 开闭原则:(比如,菜单是拆散的,一点点搞的,用友拆散自己的功能,以后就不用开发了) (1)对功能的扩展开放 ...

  9. Python全栈之路----函数----返回值

    函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句,把结果返回. def stu_register(name,age,course='PY',country='CN'): prin ...

随机推荐

  1. Build Tool

    building tool: 一.building tools 为什么主流? Gradle 是目前比较流行的构建工具之一,Android Studio 中集成的就是 Gradle,并针对 Androi ...

  2. JS求任意字符串中出现最多的字符以及出现的次数

    我爱撸码,撸码使我感到快乐!大家好,我是Counter本节讲讲如何利用JS来查找任意给定的字符串,求字符串中出现次数最多的字符,出现的次数.直接上代码了,该注释的都注释啦.非常轻松加愉快.效果如下: ...

  3. Machine Learning--week2 多元线性回归、梯度下降改进、特征缩放、均值归一化、多项式回归、正规方程与设计矩阵

    对于multiple features 的问题(设有n个feature),hypothesis 应该改写成 \[ \mathit{h} _{\theta}(x) = \theta_{0} + \the ...

  4. vi删除当前行的字符

    x 删除当前光标下的字符dw 删除光标之后的单词剩余部分.d$ 删除光标之后的该行剩余部分.dd 删除当前行

  5. ubuntu14.04 anaconda tensorflow spyder(python3.5) + opencv3

    windows上用的tensorflow是依赖于python3.5,因此在linux下也配的3.5 一. 在Anaconda官网上下载Anaconda3-4.0.0-Linux-x86_64.sh文件 ...

  6. robot framework---时间控件取值

    项目中遇到日期控件定位不了,网上各种找,并没有适合我的,目前通过Javascript已解决了,再次做个记录,方便自己日后查找,如有同样问题的同学也可以有个参考! 先说明,不同的定位方式是看开发同学如何 ...

  7. datatables弹窗报错信息屏蔽方法

    在使用datatables的时候,总是会弹出这样的warning: Error: DataTables warning: table id=data_table- Requested unknown ...

  8. 2016 Russian Code Cup (RCC 16), Final Round B - Cactusophobia

    B - Cactusophobia 思路: 点双联通分量+最大流 用tarjan求出每个点双联通分量 对于大小大于1的点双联通分量,它就是个环,那么源点和这个环相连, 容量为环的大小减一,这个环和环上 ...

  9. C++ #和##运算符

    原文:https://blog.csdn.net/mitu405687908/article/details/51084441 #和##运算符 #:构串操作符 构串操作符#只能修饰带参数的宏的形参,它 ...

  10. Maven项目中使用本地JAR包

    <dependency> <groupId>com.TEST</groupId> <artifactId>hm-test</artifactId& ...