#装饰
import types
def shucai(n):
print('蔬菜价格7')
if type(n)==types.FunctionType:
return n()+7
return n+7
def feiniu(n):
print('精品肥牛12')
if type(n)==types.FunctionType:
return n()+12
return n+12
@feiniu
@shucai
def guodi():
print('锅底38')
return 38
print(guodi) #类 import 类名可以调用其它模块
class leu():
def __init__(self):
name=None
def show(self,s):
print(self.name,s)
u=leu()
u.name='张三'
u.show('hhah') print('内嵌函数')
def outer():
x=1
def inner():
print('in inner')
print(x)
print(locals())
inner()
b=outer()
#函数是python中的一级对象
#函数作为参数
def add(x,y):
return x+y
def sub(x,y):
return x-y
def apply(func,x,y):
return func(x,y)
print(apply(sub,1,5))#和其他变量一样,函数名就是变量标签
print('-------------')
def outerl():
def inner():
print('inside inner')
return inner
fl=outerl()
fl()
print('------闭包---------')
def outer(x):
def inner():
print(x)
return inner
print1=outer(1)
print2=outer(2)
print1()
print2()
print('---装饰器---------') def outer2(some_func):
def inner():
print('before func')
ret =some_func()
return ret +1
return inner def foo2():
return 1
decorated=outer2(foo2)
print(decorated())
#装饰器其实就是一个以函数作为参数并返回一个替换函数可执行函数 class Coordinate:
def __init__(self,x,y):#初始化参数
self.x=x
self.y=y
def __repr__(self):#重写方法
return 'coord'+str(self.__dict__)
#a=Coordinate(3,4)
#print(a)
def add2(a,b):
return Coordinate(a.x+b.x,a.y+b.y)
def sub2(a,b):
return Coordinate(a.x-b.x,a.y-b.y)
one=Coordinate(100,200)
two=Coordinate(300,200)
print(add2(one,two))
print(sub(one,two))
#函数装饰器@符号的应用
#@在定义函数的时候使用
#无参数装饰器
def foo(func1):
print('decorator foo')
return func1
@foo
def bar():
print('bar')
bar()
#可以把函数对象作为参数

python3 使用装饰器,及函数作为参数的更多相关文章

  1. python:带参数的装饰器,函数的有用信息

    一.带参数的装饰器,函数的有用信息 def func1(): '''此函数的功能是完成的登陆的功能 return: 返回值是登陆成功与否(true,false) ''' print(333) func ...

  2. python通过装饰器检查函数参数的数据类型的代码

    把内容过程中比较常用的一些内容记录起来,下面内容段是关于python通过装饰器检查函数参数的数据类型的内容. def check_accepts(f): assert len(types) == f. ...

  3. python3.7 装饰器

    #!/usr/bin/env python __author__ = "lrtao2010" #python3.7 装饰器 #装饰器 ''' 定义:本质就是一个函数,作用是为其他函 ...

  4. Day11 Python基础之装饰器(高级函数)(九)

    在python中,装饰器.生成器和迭代器是特别重要的高级函数   https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...

  5. (转)Python3.5——装饰器及应用详解

    原文:https://blog.csdn.net/loveliuzz/article/details/77853346 Python3.5——装饰器及应用详解(下)----https://blog.c ...

  6. 使用python装饰器计算函数运行时间的实例

    使用python装饰器计算函数运行时间的实例 装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率 今天就来见识一下 python 装饰器,到底是怎么工作的. 本文主要是 ...

  7. 关于Python装饰器内层函数为什么要return目标函数的一些个人见解

    https://blog.csdn.net/try_test_python/article/details/80802199 前几天在学装饰器的时候,关于装饰器内层函数调用目标函数时是否return目 ...

  8. diango中让装了装饰器的函数的名字不是inner,而是原来的名字

    让装了装饰器的函数的名字不是inner,而是原来的名字 from functools import wraps def wrapper(func): @wraps(func) # 复制了原来函数的名字 ...

  9. 装饰器1、无参数的装饰器 2、有参数的装饰器 3、装饰器本身带参数的以及如果函数带return结果的情况

     装饰器分成三种: 1.无参数的: 2.有参数的: 3.装饰器本身带参数的. 装饰器decorator又叫语法糖 定义:本质是函数,器就是函数的意思.装饰其他函数.就是为其他函数添加附加功能. 原则: ...

随机推荐

  1. python基础之初始函数

    首先,为什么要使用函数? 函数的本质来说,就是写一串代码具有某些功能,然后封装起来,接下来可以很方便的调用 例如...然后... # s = '金老板小护士'# len(s) #在这里需求是求字符串s ...

  2. 搞懂Redis复制原理

    前言 与大多数db一样,Redis也提供了复制机制,以满足故障恢复和负载均衡等需求.复制也是Redis高可用的基础,哨兵和集群都是建立在复制基础上实现高可用的.复制不仅提高了整个系统的容错能力,还可以 ...

  3. 什么是 Serverless 应用引擎?优势有哪些?

    Serverless 应用引擎(Serverless App Engine,简称 SAE)是面向应用的 Serverless PaaS 平台,能够帮助 PaaS 层用户免运维 IaaS,按需使用,按量 ...

  4. Volatile可见性 与 Synchronization原子性的优化

    Volatile可见性 比如现在我们有这样一段代码:线程等待另一个线程将数据装载完就输出success,可是最后程序一直卡在while循环里没有往下执行. public class VolatileD ...

  5. BASH的保护性编程技巧

    BASH的保护性编程技巧   shell常用逻辑判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d file 若文件存在且是一个目 ...

  6. MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化)

     一.什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息. 二.索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提 ...

  7. 定义一个javascript库的兼容标准

    1. 定义一个库的兼容标准, 比如说是ie6+? 还是ie8+? 还是ie9.2. 原生知识储备,至少你不完整的读过一个库的代码.3. DOM操作和事件上的问题更多的是hack技巧,并不是算法,也不是 ...

  8. ubuntu终端安装ss

    大概就是这样

  9. shell条件嵌套(if条件语句)

    [注意1]:和Java.PHP等语言不一样,sh的流程控制不可为空,如: 代码如下: <?php if (isset($_GET["q"])) { search(q); } ...

  10. Tensorflowlite移植ARM平台iMX6

    一.LINUX环境下操作: 1.安装交叉编译SDK (仅针对该型号:i.MX6,不同芯片需要对应的交叉编译SDK) 编译方法参考:手动编译用于i.MX6系列的交叉编译SDK 2.下载Tensorflo ...