我的编程空间,编程开发者的网络收藏夹
学习永远不晚

函数(三)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

函数(三)

闭包函数

定义:函数内部函数对外部作用域而非全局作用域的引用

两张函数参数的方式

  • 使用参数

    def func(x)
      print(x)
    func(1)
    func(1)
    1
    1
    • 包给参数
def outter(x)
    def inner()
        print(x)
    return inner
f = outter(1)
f()
1

闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域。

import requests
def outter(url):
    def get():
        response = requests.get(url)
        print(f'done:{url}')
    return get
baidu=outter('https:www.baidu.com')
baidu()
    
done: https://www.baidu.com

装饰器

装饰器指:未被装饰器对象添加额外的功能。

注意:1,装饰器本身其实是可以任意可调用的对象

​ 2,被装饰的对象可以是任意可调用的对象

为什么需要装饰器

​ 如果我们已经上线了一个项目,我们需要修改某一个方法,但是我们不想修改方法的使用方法,这个时候可以使用装饰器。因为软件的维护应该遵循开放封闭原则,即软件一旦上线运行后,软件的维护对修改源代码是封闭的,对扩展功能指的是开放的。

注意:1,不修改被装饰对象的源代码

​ 2,不修改被装饰对象的调用方式

怎么用装饰器

  • 传参方式:改变调用方式

  • 传参方式:包给函数——外包

    mport time
    
    
    def time_count(func):
        # func = 最原始的index
        def wrapper(*args, **kwargs):
            start = time.time()
            res = func(*args, **kwargs)
            end = time.time()
            print(f"{func} time is {start-end}")
    
            return res
        return wrapper
    
    
    @time_count  # home = time_count(home)
    def home(name):
        print(f"welcome {name} to home page")
        time.sleep(1)
    
        return name
    
    
    @time_count  # index = time_count(index)
    def index():
        print('welcome to index')
        time.sleep(1)
    
        return 123
    
    
    res = home('egon')
    print(f"res: {res}")
    welcome egon to home page
    <function home at 0x102977620> time is -1.0005171298980713
    res: egon

    装饰器模板

    def deco(func):
      def wrapper(*args,**kwargs)
          res = func(*args,**kwargs)
          return res
      return wrapper

    无参装饰器

    is_login_dict = {'username':None}
    def login_deco(func):
        def wrapper(*args,**kwargs):
            if not  is_login_dict['username']:
                username = input('请输入你的用户名').strip()
                if username != 'john':
                    print('非法输入')
                    return
                is_login_dict['username']=username
                res = func(*args,**kwargs)
                return res
            else:
                res = func(*args,**kwargs)
                return res
        return wrapper
    
    @login_deco
    def withdraw():
        print('from withdraw')
    withdraw()
    withdraw()
    withdraw()

有参装饰器

is_login_dict = {'username': None}

def auth(origin):
    
    def login_deco(func):

        def wrapper(*args, **kwargs):  # 赋值后的time_sleep

            if origin == 'file':

                if not is_login_dict['username']:

                    username = input('请输入你的用户名》》》').strip()

                    if username != 'fanping':
                        print('非法登录')

                        return

                    is_login_dict['username'] = username

                    res = func(*args, **kwargs)  # 真正的time_sleep

                    return res
                else:
                    res = func(*args, **kwargs)  # 真正的time_sleep

                    return res

            elif origin == 'mongodb':
                print('非法登录')
                
            else:
                print('dsb')


        return wrapper
    
    return login_deco


# f = origin('file')  # login_deco
# shopping = f(shopping)
# shopping()


@auth('file')
def shopping():
    print('from shopping')


@auth('mongodb')
def withdraw():
    print('from withdraw')

注意:装饰器给函数增加功能吗,但是不改变函数内部的语法,不改变函数调用方式

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

函数(三)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

函数(三)

闭包函数定义:函数内部函数对外部作用域而非全局作用域的引用两张函数参数的方式使用参数def func(x) print(x)func(1)func(1)11包给参数def outter(x) def inner() p
2023-01-31

Python入门之三角函数atan2()函数详解

描述atan2() 返回给定的 X 及 Y 坐标值的反正切值。语法以下是 atan2() 方法的语法:import math math.atan2(y, x)注意:atan2()是不能直接访问的,需要导入 math 模块,然后通过 math
2022-06-04

javascript怎么求三角函数

在数学中,三角函数是一种经常出现的函数类型,它可以帮助我们计算三角形的边长、角度和高度等等。在计算机编程中,JavaScript也提供了一些内置的三角函数来帮助开发者进行相关计算。在本文中,我们将介绍JavaScript的三角函数及其用法。JavaScript的三角函数可以使用Math对象的静态方法进行调用。该对象提供了sin、cos、tan、asin、acos、atan等方法
2023-05-14

Python入门之三角函数sin()函数实例详解

描述 sin()返回的x弧度的正弦值。 语法 以下是sin()方法的语法:importmath math.sin(x)注意:sin()是不能直接访问的,需要导入math模块,然后通过math静态对象调用该方法。 参数 x--一个数值。 返
2022-06-04

Python入门之三角函数tan()函数实例详解

描述tan() 返回x弧度的正弦值。语法以下是 tan() 方法的语法:import math math.tan(x)注意:tan()是不能直接访问的,需要导入 math 模块,然后通过 math 静态对象调用该方法。参数x -- 一个数值
2022-06-04

PYTHON中三种取整函数(// int

>>> 5//31>>> -5//3-2>>> int(5.3)5>>> int(5.6)5>>> round(5.3)5>>> round(5.6)6//运算取整时保留整数的下界,int则是剪去小数部分,只保留前面的整数,即向零取整,ro
2023-01-31

c++三角函数怎么表示

c++ 中使用 cmath 头文件来表示三角函数,它提供了 sin()、cos()、tan() 等函数来计算三角函数值。参数以弧度为单位,要使用度数需转换为弧度。用法示例:将度数转换为弧度,计算三角函数值,输出结果。C++ 中表示三角函数
c++三角函数怎么表示
2024-05-15

C++中的三角函数详解

C++中的三角函数详解三角函数是数学中的基本函数之一,在计算机编程中也有广泛应用。C++作为一种强大的编程语言,提供了一系列用于计算三角函数的函数和库。本文将详细介绍C++中的三角函数,包括sin、cos、tan、asin、acos、ata
C++中的三角函数详解
2023-11-18

python(3)模块、函数式 、三元运

一、模块和模块的常用方法__name__判断是否为主文件>>> print __name__   #判断是否是主文件,如果是主文件就返回_main___main____file__返回当前.py文件的路径cat /root/1.pyprin
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录