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.mfbz.cn/a/74043.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT能代替搜索引擎吗?ChatGPT和搜索引擎有什么区别?

ChatGPT和搜索引擎是两种在信息获取和交流中常用的工具&#xff0c;ChatGPT是一种基于人工智能技术的聊天机器人&#xff0c;而搜索引擎是一种在互联网上搜索信息的工具。尽管它们都是依托互联网与信息获取和交流有关&#xff0c;部分功能重合&#xff0c;但在很多方面存在着明…

并发编程 - 线程池中的常见面试题

目录 1. 线程池相比于线程有什么优点 2. 线程池的参数有哪些 3. 线程工厂有什么用 4. 说一下线程的优先级 5. 说一下线程池的执行流程 6. 线程池的拒绝策略有哪些 7. 如何实现自定义拒绝策略 8. 如何判断线程池中的任务是否执行完成 1. 线程池相比于线程有什么优点 有…

2023.8.14论文阅读

文章目录 ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation摘要本文方法实验结果 DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection摘要本文方法实验结果 ESPNet: Efficient Spatial Pyramid of Dilated Convo…

ASR 语音识别接口封装和分析

这个文档主要是介绍一下我自己封装了 6 家厂商的短语音识别和实时流语音识别接口的一个包&#xff0c;以及对这些接口的一个对比。分别是&#xff0c;阿里&#xff0c;快商通&#xff0c;百度&#xff0c;腾讯&#xff0c;科大&#xff0c;字节。 zxmfke/asrfactory (github.c…

Stable Diffusion + AnimateDiff运用

1.安装AnimateDiff&#xff0c;重启webui 2.下载对应的模型&#xff0c;最好到c站下载&#xff0c;google colab的资源有可能会出现下载问题 https://civitai.com/models/108836 3.下载完成后&#xff0c;你可以随便抽卡了。 抽卡完成后固定seed&#xff0c;然后打开这个插件&…

Docker安装elasticsearch分布式搜索

文章目录 ☀️安装elasticsearch☀️1.部署单点es&#x1f338;1.1.创建网络&#x1f338;1.2.下载镜像&#x1f338;1.3.运行 ☀️2.部署kibana&#x1f338;2.1.部署&#x1f338;2.2.DevTools ☀️3.安装IK分词器&#x1f338;3.1.在线安装ik插件&#xff08;较慢&#xff0…

【报错】ModuleNotFoundError: No module named ‘websocket‘

1 报错 ModuleNotFoundError: No module named websocket 2 解决方法 pip install websocket 1 报错 AttributeError: module websocket has no attribute enableTrace 2 分析 一般是由于websocket的依赖包没有安装造成的。websocket.enableTrace()方法是在websocket-cli…

013 怎么激活win10系统?

1、搜索软件Windows PowerShell&#xff1a; 在“开始”菜单栏&#xff0c;搜索“Windows PowerShell.exe”,以管理员模式打开。 2、输入 三条命令&#xff1a; &#xff08;1&#xff09;slmgr /ipk VK7JG-NPHTM-C10JM-9MPGT-3A77T &#xff08;最后这个字符为秘钥&#xf…

Qt自定义对话框

介绍 自定义框主要通过对现有对话框QDialog类的派生&#xff0c;根据需求编写成员函数、重载信号函数、槽函数&#xff0c;进而实现在主QWidget中点击某个按钮后&#xff0c;一个对话框的弹出 流程 简化创建派生类 最后点击完成即可。 自定义ui界面&#xff0c;编写成员函数…

drawio导出矢量图

1.选中要导出的图 2.导出为pdf 3.用adobe打开pdf&#xff0c;另存为eps

【数据结构】“单链表”的练习题(二)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

spring security实践-全套代码

贴一套完整代码 电脑文件都被加密了&#xff0c;无法上传git&#xff0c;留一套在此&#xff0c;日后方便。 整个学习过程参考的spring security 1. 项目目录结构 2.初始化数据库 CREATE TABLE sys_user (id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 主键,user_name VAR…

欧拉OS 使用 CentOS 7 yum repo

一、下载CentOS的repo的yum文件 任何基于CentOS的yum的repo 的url是这样的&#xff1a; 但欧拉OS输出这个变量为&#xff1a;openEuler 20.03 (LTS-SP3) 那明显欧拉想要使用这个yum的url找不到这个版本&#xff0c; 所以直接讲这个变量替换为 7, Centos 7的7 然后执行&…

【设计模式】工厂模式

工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工厂模式&#xff0c;可以…

Java 正则表达式【匹配与分组基本原理】

简介 我们一般使用正则表达式是用来处理字符串的&#xff0c;不管是实际的开发中还是我们的算法竞赛中&#xff0c;使用正则表达式绝对可以大大提升我们的效率。 正则表达式&#xff08;regular expression&#xff09;其实就是对字符串进行模式匹配的技术。 快速入门 我们这里…

Idea的基本使用带案例---详细易懂

一.idea是什么 有专业人士说&#xff0c;idea是天生适合做微软&#xff0c;当时我还想肯定是夸大其词了&#xff0c;但当你用起来的时候确实很爽&#xff0c;&#x1f60a;&#x1f60a; ntelliJ IDEA是一种集成开发环境&#xff08;IDE&#xff09;&#xff0c;由JetBrains开发…

使用VLC轻松体验本地视频推流、拉流、播放功能

VLC 前言一、VLC是什么&#xff1f;二、VLC推流&#xff08;服务器推流&#xff09;VLC客户端拉流参考 前言 本章主要讲解如何通过VLC开源免费工具对本地视频实现推流、拉流、播放演示。 一、VLC是什么&#xff1f; VLC 是一款自由、开源的跨平台多媒体播放器及框架&#xf…

Altium DXP原理图转换成Orcad Capture

买了个开发板&#xff0c;原图是Altium DXP的&#xff0c;但是个人熟悉的Orcad&#xff0c;PCB无所谓了&#xff0c;反正都要重画&#xff0c;但是原理图是件大工程&#xff0c;重画还可能出问题&#xff0c;所以想着把DXP转成Capture格式&#xff0c;查阅了相关文档&#xff0…

滴滴Ceph分布式存储系统优化之锁优化

摘自&#xff1a;https://mp.weixin.qq.com/s/oWujGOLLGItu1Bv5AuO0-A 2020-09-02 21:45 0.引言 Ceph是国际知名的开源分布式存储系统&#xff0c;在工业界和学术界都有着重要的影响。Ceph的架构和算法设计发表在国际系统领域顶级会议OSDI、SOSP、SC等上。Ceph社区得到Red Hat…

iOS字体像素与磅的对应关系

注意&#xff1a;低于iOS10的系统&#xff0c;显示的字宽和字高比高于iOS10的系统小。 这就是iOS10系统发布时&#xff0c;很多app显示的内容后面出现…&#xff0c;因而出现很多app为了适配iOS10系统而重新发布新版本。 用PS设计的iOS效果图中&#xff0c;字体是以像素&#x…
最新文章