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. 最短路径之Bellman-Ford——解决负权边

    Bellman-Ford算法非常简单,核心代码四行,可以完美的解决带有负权边的图. for(k=1;k<=n-1;k++) //外循环循环n-1次,n为顶点个数 for(i=1;i<=m; ...

  2. Guitar Pro里的编谱方式怎么用?

    今天来教大家如何使用Guitar Pro中的编谱方式来让我们的乐谱更加美观整齐耐看,我们一起get起来吧! 相信我们每一个人在使用Guitar Pro进行编曲创作时,都会碰到这种情况,在乐谱上,会看到 ...

  3. strcpy函数解析

    char * strcpy( char *strDest, const char *strSrc ) { assert((strDest != NULL)&&(strSrc != NU ...

  4. 【NET Core】.NET Core中读取json配置文件

    在.NET Framework框架下应用配置内容一般都是写在Web.config或者App.config文件中,读取这两个配置文件只需要引用System.Configuration程序集,分别用 Sy ...

  5. GO | KEGG的注释是怎么来的?

    但凡是做过基因表达数据分析的(芯片.RNA-seq,scRNA-seq),肯定是跑过基因集功能注释和通路富集的,因为它是研究未知基因集的利器. 但跑过之后老板肯定会给反馈,通常得到的注释都是没有太多意 ...

  6. Mysql增量恢复

    mysqldump增量恢复何时需要使用备份的数据? 备份最牛逼的层次,就是永远都用不上备份.--老男孩 不管是逻辑备份还是物理备份,备份的数据什么时候需要用?===================== ...

  7. Javascript 智能输入数字且保留小数点后三位

    html: <input type="text" name="cprice" placeholder="最多保留小数点后三位" onk ...

  8. DFS 之 全排列

    题目描述输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 我们可以模拟出n个盒子和n张卡片,我们需要将n张卡片分别放到n个盒子里,且每个盒子只能放1张卡 ...

  9. 有关两个jar包中包含完全相同的包名和类名的加载问题

    首先从表现层介绍,后续后深入原理. 1,先简单介绍maven如何生成jar文件方便测试 <plugin> <artifactId>maven-assembly-plugin&l ...

  10. flask请求上下文

    先看一个例子: #!/usr/bin/env python # -*- coding:utf-8 -*- import threading # local_values = threading.loc ...