Python程序设计基础:函数(二)

文章目录

  • 一、lambda()函数
  • 二、递归函数
  • 三、变量的作用域

一、lambda()函数

lambda()函数是一种简便的,将函数定义在同一行的函数方法。lambda()实际上生成了一个函数对象(匿名函数),它主要用于需要函数对象作为参数或函数比较简单且使用一次的场合。
lambda()函数的语法格式如下:

lambda 参数1,参数2...:<函数语句>

该函数的返回值即为函数语句的计算结果,且只能为一条语句。例如:

lambda x,y:x+y

在上式中,形参为x和y,函数的返回结果为x+y。
在这里插入图片描述
在前面有介绍过针对字典按照键进行排序,若要按照值进行排序,可以将lambda函数和sorted()函数结合起来使用。
在这里插入图片描述
在上述实例中,sorted()函数中存在两个参数,前面一个为需要进行排序的字典条目,后面一个key表示在排序时指定的排序关键字,而lambda()函数则是将字典中每个条目的值提取出来,然后结合key作为排序的对象。

二、递归函数

递归是指将相同的方式重复进行的过程,而递归函数则是在给定终止条件下,函数不断调用自身的过程,其中最常见的是求阶乘的过程。
在非负整数的前提下,当n等于1时,n的阶乘为1,当n大于等于1时,n为所有小于等于n的正整数的成绩,即n!,而对于n而言,n的阶乘又可以视作n与n-1的阶乘相乘,即n!=n*(n-1)!,这一乘法过程为递归重复进行。将其用python语言进行编写,内容如下:
在这里插入图片描述
在上述实例中,当n取值为1时,函数fun()返回结果为1,当n大于1时,将取其阶乘转化为求n-1的阶乘,直至最后n取值为1,该过程为递归过程,最后的终止条件为n==1。

除了上述例子外,常见的还有利用递归函数求斐波拉契数列,在斐波拉契数列中,前两个数均为1,从第三个数开始,每个数均等于前两个数之和,按照上述递归的思路,当n取值为1或2时,递归结束,当n大于2时,n=n-1+n-2,可视作求n-1和n-2,此时参数n取值不断变小,最后收敛至n取值为1和2,具体过程如下:
在这里插入图片描述

三、变量的作用域

在程序的编写过程中,我们通常需要定义相关的变量,在程序运行的过程中会对这些变量进行访问,但是变量并不是在程序中的所有位置都可以进行访问,访问权限取决于该变量是在哪里进行赋值的。
每个变量都存在自己的作用域,作用域意味着该变量在哪些位置可以被访问,哪些位置不可以被访问,两种基本的变量作用域为“局部变量”和“全局变量”。

局部变量
局部变量和函数是直接相关的,它通常被定义在函数的内部,每次函数调用都会创建一个新的作用域,此时可以在该作用域内访问局部变量,当从函数外部进行访问时,该变量会访问失败。
在这里插入图片描述
在上图中,x是在函数内部定义的局部变量,因此当从外部进行访问时,会出现代码报错,报错内容为x变量未被定义。

全部变量
和局部变量相对应,全部变量即为创建在函数外部,即程序主体部分的变量,它是全局可见的。
在这里插入图片描述
在上图中,x=1为全局变量,因此函数内部可以访问x,并返回x+x的计算结果,同时外部也可以直接使用print读取x的值并输出。

全局变量和局部变量同名
存在一种全部变量和局部变量同名的情况,此时在函数内部会优先访问局部变量。
在这里插入图片描述
在上图中,同时定义了局部变量x=2和全局变量x=1,函数f()可以同时访问这两个变量,此时这两个变量同名,因此在函数f()运行时会优先访问局部变量x=2,即第一个输出为2+2,而当从外部直接访问x时,访问的为全局变量,即x输出为1.

要想在上述情况下函数内先访问全局变量,只需要使用关键字global声明即可。
在这里插入图片描述
在上图函数中首先使用global访问全部变量x=1,然后使用x=2对x重新进行赋值,因此此时全局变量x取值变成了2,即第一个输出为2+2,第二个输出全局变量x也为2。

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

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

相关文章

前端食堂技术周刊第 93 期:7 月登陆 Web 平台的新功能、Node.js 工具箱、Nuxt3 开发技巧、MF 重构方案

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;橙橙冰萃美式 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来…

航顺HK32F030M怎么样 航顺HK32F030M应用领域介绍

航顺HK32F030M是一款基于ARM Cortex-M0内核的32位微控制器&#xff0c;具有高性能、低功耗、经济适用等特点。以下是颖特新关于航顺HK32F030M的详细介绍&#xff1a; 一、性能表现 航顺HK32F030M采用ARM Cortex-M0内核&#xff0c;主频最高可达64MHz&#xff0c;具有出色的计算…

【LeetCode】数据结构题解(10)[有效的括号]

有效的括号 &#x1f609; 1.题目来源&#x1f440;2.题目描述&#x1f914;3.解题思路&#x1f973;4.代码展示 &#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1…

leetcode 516. 最长回文子序列(JAVA)题解

题目链接https://leetcode.cn/problems/longest-palindromic-subsequence/description/?utm_sourceLCUS&utm_mediumip_redirect&utm_campaigntransfer2china 目录 题目描述&#xff1a; 暴力递归&#xff1a; 动态规划&#xff1a; 题目描述&#xff1a; 给你一个…

秒杀库存解决方案

电商系统中秒杀是一种常见的业务场景需求&#xff0c;其中核心设计之一就是如何扣减库存。本篇主要分享一些常见库存扣减技术方案&#xff0c;库存扣减设计选择并非一味追求性能更佳&#xff0c;更多的应该考虑根据实际情况来进行架构取舍。在商品购买的过程中&#xff0c;库存…

Redis——String类型详解

概述 Redis中的字符串直接按照二进制的数据存储&#xff0c;不会有任何的编码转换&#xff0c;因此存放什么样&#xff0c;取出来的时候就什么样。而MySQL默认的字符集是拉丁文&#xff0c;如果插入中文就会失败 Redis中的字符串类型不仅可以存放文本数据&#xff0c;还可以存…

工作经验总结:RH850中SP、LP、PC寄存器间联系与入栈出栈操作简单整理

一、RH850系列中SP、LP、PC寄存器简介 SP&#xff1a;栈顶寄存器&#xff0c;保存最新栈顶的地址 LP&#xff1a;链接寄存器&#xff0c;保存函数跳转的地址&#xff08;当没发生调用子函数的操作时候&#xff0c;你可以通过单步调试发现&#xff0c;该寄存器的值不变&#x…

Apache Maven简介安装及系统坏境配置eclipse配置Apache Maven---详细介绍

一&#xff0c;简介 Maven可以简化项目的构建和依赖管理&#xff0c;并提供了一种规范化和可复用的方式来管理Java项目。它广泛应用于Java开发领域&#xff0c;简单来说&#xff1a;它提供了一个简单而强大的方式来管理项目的构建、依赖关系和文档在企业级项目中被广泛采用。 1…

【状态模式】拯救if-else堆出来的屎山代码

前言 我想大家平时都在开发重都遇见过屎山代码&#xff0c;这些屎山代码一般都是由于复杂且庞大的if-else造成的&#xff0c;状态模式&#xff0c;是一种很好的优化屎山代码的设计模式&#xff0c;本文将采用两个业务场景的示例来讲解如何使用状态模式拯救屎山代码。 目录 前…

【Android Framework系列】第10章 PMS之Hook实现广播的调用

1 前言 前面章节我们学习了【Android Framework系列】第4章 PMS原理我们了解了PMS原理&#xff0c;【Android Framework系列】第9章 AMS之Hook实现登录页跳转我们知道AMS可以Hook拦截下来实现未注册Activity页面的跳转&#xff0c;本章节我们来尝试一下HookPMS实现广播的发送。…

2023上半年京东手机行业品牌销售排行榜(京东数据平台)

后疫情时代&#xff0c;不少行业都迎来消费复苏&#xff0c;我国智能手机市场在今年上半年也实现温和的复苏&#xff0c;手机市场的出货量回暖。 根据鲸参谋平台的数据显示&#xff0c;2023年上半年&#xff0c;京东平台上手机的销量为2830万&#xff0c;环比增长约4%&#xf…

ORACLE行转列、列转行实现方式及案例

ORACLE行转列、列转行实现方式及案例 行转列案例方式1.PIVOT方式2.MAX和DECODE方式3.CASE WHEN和GROUP BY 列转行案例方式1.UNPIVOT方式2.UNION ALL 行转列 案例 假设我们有一个名为sales的表&#xff0c;其中包含了产品销售数据。表中有三列&#xff1a;product&#xff08;…