zoukankan      html  css  js  c++  java
  • python3 使用装饰器,及函数作为参数

    #装饰
    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()
    #可以把函数对象作为参数
  • 相关阅读:
    OAccflow集成sql
    集成备注
    CCflow与基础框架组织机构整合
    Jeecg_Jflow整合记录
    Problem opening .cshtml files
    The document cannot be opened. It has been renamed, deleted or moved.
    js中!和!!的区别及用法
    hdu 4757 Tree(可持久化字典树)
    Tomcat 学习进阶历程之Tomcat架构与核心类分析
    BZOJ 3000(Big Number-Stirling公式求n!近似值)
  • 原文地址:https://www.cnblogs.com/QI1125/p/7528886.html
Copyright © 2011-2022 走看看