python -- 函数闭包

 1. LEGB规则

L: local 是局部作用域
E: Enclosed 是嵌套函数的外层函数作用域
G: Global 全局作用域
B:Build-In 内置作用域

变量的使用权重:局部变量 > 外层作用域变量 > 全局变量 > 内置变量

下面代码执行后,x变量的值分别为多少?

def outter():
    def innerA():
        x = 100
    
    def innerB():
        nonlocal x
        x = 250
    
    def innerC():
        global x
        x = 520
    
    x = 880
    
    innerA()
    print(f"调用完 innerA() 函数之后,x = {x}")
    
    innerB()
    print(f"调用完 innerB() 函数之后,x = {x}")
    
    innerC()
    print(f"调用完 innerC() 函数之后,x = {x}")
    
outter()
print(f"此时此刻,全局变量 x = {x}")

  答 : 
调用完 innerA() 函数之后,x = 880
调用完 innerB() 函数之后,x = 250
调用完 innerC() 函数之后,x = 250
此时此刻,全局变量 x = 520

2. 设计一个函数,每次调用传入一个参数,并返回所有参数的平均值。

解法1 :  用两个变量 count / value 

def make_average():total = 0count = 0def average(value):# 需要改变外层作用域的变量nonlocal total,counttotal += valuecount += 1res =  total / countprint(f"第{count}次调用,平均值等于:{res}")return averageave = make_average()
ave(5)
ave(6)

   解法2 :把传入的参数存入一个数组中

def make_average():values = []def average(value):values.append(value)total = sum(values)res = total / len(values)print(f"平均值是:{res}")return average
ave = make_average()
ave(5)
ave(8)

3 设计一个闭包函数,功能是每次调用返回一个斐波那契数列 (当前项的数值 为 前两项数值的和 0,1,1,2,3,5,8,13 .....)

def fib():# 初始前两位的值back1 = 0back2 = 1count = 0def func():nonlocal back1 ,back2 ,countcount += 1temp = back1back1 , back2 = back2 , back1 + back2print(f"调用第{count}次的值{temp}")return func
f =fib()
f()
f()
f()
f()
f()
f()

输出的值:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/65583.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS SDK开放能力,服务鸿蒙生态建设,打造优质应用体验

华为开发者大会2023(HDC.Together)于8月4日至6日在东莞松山湖举行,在HarmonyOS端云开放能力技术分论坛上,华为为广大开发者们介绍了HarmonyOS SDK开放能力在基础开发架构、功能特性等方面的变化之处,通过将常见的通用能…

前端性能优化之性能优化的指标和工具(chrome devtools、lighthouse、webpagetest)

文章目录 引言一、为什么要进行web性能优化二、RAIL测量模型1. 什么是RAIL2. 性能测量工具 三、性能测量工具的使用和性能指标以及优化目标1. Chrome DevTools1. 打开调试工具方式和配置2. network下的几个性能指标1. requests 请求总数2. transferred实际从服务器下载的数据量…

HCIP学习--BGP3

目录 前置内容 BGP下一跳的修改问题 BGP的属性 配置 PrefVal权重属性 负载分担 LocPrf 负载分担 NextHop AS-PATH Ogn 配置 MED 配置 BGP选路规则 BGP的社团属性 配置及解释 前置内容 HCIP学习--BGP1_板栗妖怪的博客-CSDN博客 HCIP学习--BGP2_板栗妖怪的博客…

Opencv将数据保存到xml、yaml / 从xml、yaml读取数据

Opencv将数据保存到xml、yaml / 从xml、yaml读取数据 Opencv提供了读写xml、yaml的类实现: 本文重点参考:https://blog.csdn.net/cd_yourheart/article/details/122705776?spm1001.2014.3001.5506,并将给出文件读写的具体使用实例。 1. 官…

服务器数据恢复-RAID5上层Hyper-V虚拟机数据恢复案例

服务器数据恢复环境: 一台Windows Server服务器,部署Hyper-V虚拟化环境,虚拟机的硬盘文件和配置文件存放在一台DELL存储中。该存储中有一组由4块硬盘组建的RAID5阵列,用来存放虚拟机的数据文件,另外还有一块大容量硬盘…

zabbix监控mysql数据库、nginx、Tomcat

文章目录 一.zabbix监控mysql数据库1.环境规划2.zabbix-server安装部署(192.168.198.17)3.zabbix-mysql安装部署(192.168.198.15)3.1 部署 zabbix 客户端3.2 服务端验证 zabbix-agent2 的连通性(192.168.198.17&#x…

React如何配置env环境变量

React版本: "react": "^18.2.0" 1、在package.json平级目录下创建.env文件 2、在‘.env’文件里配置环境变量 【1】PUBLIC_URL 描述:编译时文件的base-href 官方描述: // We use PUBLIC_URL environment variable …

LeetCode150道面试经典题--单词规律(简单)

1.题目 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 2.示例 pattern"abba" s "c…

SPI协议简介

什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速…

linux中的ifconfig和ip addr

在linux操作系统中ifconfig和ip addr都是显示网卡配置信息的命令,好多人有疑惑它们有什么区别呢 区别1:对于linux发行的版本不一样 ip addr是对新发行版本的linux使用会比较多;而ifconfig是老版本遇到使用的会比较多。 区别2:显…

stepin设置菜单icon的两种方式——基础积累

最近在看大佬写的stepin后台管理系统,框架是vue3antd3.xvite,下面记录一下,菜单图标的使用方法。 1.第一种方法就是使用antd中的icon图标 书写方式如下: {path: /,name: 首页,redirect: /analysis,meta: {title: 首页,renderMen…

【分布式存储】数据存储和检索~B+树

为什么数据存储结构重要 在存储系统中,其实不管数据是什么样的,归根结底其实都还是取决于数据的底层存储结构,而主要常见的就是数据库索引结构,B树、Redis中跳表、以及LSM、搜索引擎中的倒排索引。本质都是如何利用不用的数据结构…