python--实验8 函数(2)

  1. 知识点

变量的作用域
  1. 定义:解释了局部变量和全局变量的概念。
  2. 局部变量
    1. 局部变量是在函数内部定义的变量。它们只在该函数内部可见,一旦函数执行完毕,这些变量就会被销毁。
    2. 例子:在函数内部通过赋值创建的变量。
  3. 全局变量
    1. 全局变量是在任何函数外部定义的变量。它们可以在整个程序范围内访问,包括函数内部。
    2. 如果在函数内部定义了一个与全局变量同名的局部变量,那么在函数内部将只访问局部变量。
  4. 内置作用域(Built-in Scope)

    • 内置作用域包含了Python解释器内置的函数和变量,如print()len()等。这些可以在程序的任何地方访问。
  5. 非局部作用域(Nonlocal Scope)

    • 非局部作用域是Python 3中引入的一个概念,用于在嵌套的函数中声明变量,使其在封闭作用域内可见,但又不属于全局作用域。
    • 使用nonlocal关键字声明的变量,可以在嵌套函数外部的函数内部修改其值。
  6. 类作用域(Class Scope)

    • 类作用域是类内部的变量,包括类属性和方法。这些变量对于类的实例和类方法是可见的。
  7. 模块作用域(Module Scope)

    • 模块作用域是指模块内部定义的变量,这些变量在模块内部是全局的,但在模块外部则需要通过模块名来访问。
  8. global关键字:在函数内部使用global声明全局变量,允许修改全局变量。

  1. 变量作用域工具函数globals()locals()函数用于获取不同作用域内的变量字典。

  1. nonlocal关键字:Python 3.x引入,用于在嵌套函数中修改外层函数的变量。

函数嵌套定义
  • 允许在一个函数内部定义另一个函数,称为内建函数。外部包含内建函数的称为外部函数。

 

函数的返回值
  • 函数可以返回一个或多个值,如果没有return语句,默认返回None

 

函数作为对象
  1. 赋值:可以把函数赋值给变量,通过变量名调用。

  1. 作为参数:可以把函数作为参数传递给另一个函数,如map函数。

  1. 作为返回值:函数可以返回另一个函数作为结果。

闭包
  • 闭包是可以访问创建时所在作用域的函数,即使该作用域的代码已经执行完毕。就是能够读取其他函数内部变量的函数。
装饰器(Decorators)
  • 装饰器是用于增加函数或方法功能的函数,本质上是闭包。
  • 装饰器遵循开放封闭原则,可以在不修改源代码的情况下增加功能。
  • 原理:
lambda函数
  • 匿名函数,用于定义单行、简洁的函数。冒号前面是形参,冒号后面是返回值
  • 可以包含多个参数,但只能有一个表达式。
  • 可以作为函数的返回值或序列、字典的元素。

实验  函数(2)

一、实验目的

  1. 掌握函数嵌套定义的用法
  2. 掌握特殊函数的定义和调用
  3. 掌握变量作用域

二、实验环境

本次实验需使用实验室提供的Windows主机环境+pycharm

实验内容

说明:基础题为必做题,提高题为选做题

1.(基础题)编写函数, 接收一个列表(包含10个整形数)和一个整形数k, 返回一个新列表.

   函数需求:

        - 将列表下标k之前对应(不包含k)的元素逆序;

        - 将下标k及之后的元素逆序;

代码:

def reverse_sublists(lst, k):return lst[:k][::-1] + lst[k:][::-1]# 测试代码
original_list = [i for i in range(1, 11)]  # 创建一个包含10个整数的列表
k = 3
new_list = reverse_sublists(original_list, k)
print(new_list)

2.(基础题)定义一个fn(n)函数,该函数可接收一个list作为参数,用于去除list中重复的元素。

程序代码:

def remove_duplicates(lst):return list(set(lst))# 测试代码
original_list = [1, 2, 2, 3, 4, 4, 5, 6, 6, 7]
new_list = remove_duplicates(original_list)
print(new_list)

3.(基础题)定义一个fn(n)函数,该函数返回一个包含n个不重复的0-100之间的整数的元组。

程序代码:

def unique_integers(n):return tuple(range(n))# 测试代码
n = 100
result = unique_integers(n)
print(result)

4.(基础题)编程实现1~5各数的平方。用lambda函数实现

提示:python 内置函数map

代码:

squares = list(map(lambda x: x**2, range(1, 6)))print(squares)

5.(基础题)定义一个函数fib(n),用递归的方式实现斐波那契数列第n项求解,并输出斐波那契数列前20项的内容。

程序运行效果如下图所示:

代码:

def fib(n):if n <= 1:return nelse:return fib(n-1) + fib(n-2)# 输出斐波那契数列前20项
fibonacci_sequence = [fib(i) for i in range(1, 21)]
print(fibonacci_sequence)

6.(提高题) 输入日期,判断星座,并输出对应的星座标志。— 函数参数的传递

程序代码:

def zodiac_sign(day, month):sdate = [20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22]  # 星座判断列表conts = ['摩羯座', '水瓶座', '双鱼座', '白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座']signs = ['♑', '♒', '♓', '♈', '♉', '♊', '♋', '♌', '♍', '♎', '♏', '♐', '♑']index = (month, day)  # 将月份和日期组合成一个元组zodiac_index = sdate.index(index[0]) if index[1] <= sdate[0] else sdate.index(index[0]) - 1return conts[zodiac_index], signs[zodiac_index]# 测试代码
date_input = (24, 12)  # 假设输入日期为12月24日
zodiac, zodiac_symbol = zodiac_sign(date_input[1], date_input[0])
print(f"星座: {zodiac}, 星座标志: {zodiac_symbol}")

sdate=[20,19,21,20,21,22,23,23,23,24,23,22]     # 星座判断列表

conts =['摩羯座','水瓶座','双鱼座','白羊座','金牛座','双子座','巨蟹座','狮子座','处女座','天秤座','天蝎座','射手座','摩羯座']

signs=['','','','','','','','','','','','','']

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

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

相关文章

macbook触控栏养宠物:Touchbar pet for Mac 免费下载

macbook pro自从出了touchbar后&#xff0c;看起来是十分的炫酷&#xff0c;但平时却很少有人使用&#xff0c;为了让touchbar充分利用起来&#xff0c;Touch bar pet就横空出世了&#xff0c;可爱的画风&#xff0c;简单的玩法&#xff0c;让你可以在touchbar上也可以养一只自…

网络安全就业方向(非常详细)零基础入门到精通,收藏这一篇就够了

这里我整合并且整理成了一份【282G】的网络安全/红客技术从零基础入门到进阶资料包&#xff0c;需要的小伙伴文末免费领取哦&#xff0c;无偿分享&#xff01;&#xff01;&#xff01; 对于从来没有接触过网络安全的同学&#xff0c;我们帮你准备了详细的学习成长路线图。可以…

2.5 计算机网络

声明&#xff1a;文章参考的《系统架构设计师教程&#xff08;第二版&#xff09;》&#xff0c;如有侵权&#xff0c;本人将立即修改和删除。 利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来&#xff0c;并依靠网络软件以及通信协议实现…

p15 p16 c语言实现三子棋

具体的实现代码 game.c #include "game.h"void InitBoard(char board[ROW][COL], int row, int col) {int i 0;int j 0;for (i 0; i < row; i) {for (j 0; j < col; j) {board[i][j] ;}} }void DisplayBoard(char board[ROW][COL], int row, int col) …

【java实现结果集转为树结构,树转为扁平结构】

list转为树&#xff0c;树拉平 业务需求oracle实现树结构1、**Controller.java层** &#xff1a;前端调此处请求2、**service层&#xff1a;** 逻辑结构 &#xff08;zbjcpjService.java&#xff09;&#xff0c;重点&#xff1a;this.entityMapper.queryZbjcpjTree接口3、**ma…

【python算法学习1】用递归和循环分别写下 fibonacci 斐波拉契数列,比较差异

问题&#xff1a; fibonacci 斐波拉契数列&#xff0c;用递归和循环的方法分别写,比较递归和循环的思路和写法的差别 最直接的思路&#xff0c;是写递归方法 循环方法的稍微有点绕&#xff0c;我觉得问题主要是出在&#xff0c;总结循环的通项公式更麻烦&#xff0c;难在数学…

多目标螳螂搜索算法MOMSA求解无人机三维路径规划,可以自行修改障碍物位置(MATLAB代码)

无人机路径规划多目标优化求解是一个复杂的过程&#xff0c;涉及到多个目标的考量和优化算法的应用。以下是一些关键点和相关算法的概述&#xff1a; 1. **多目标优化策略**&#xff1a;在无人机路径规划中&#xff0c;需要同时考虑多个目标&#xff0c;如路径长度、安全性、飞…

关于delete和delete[ ]混用的未定义问题解释

我们知道delete用于释放一个动态空间&#xff0c;而delete[ ]用于释放多个动态空间&#xff0c;但是如果我们混用的话会导致什么问题&#xff1f;我在博客上看了许多文章&#xff0c;但不尽人意&#xff0c;因此写下这篇文章让你知其然知其所以然&#xff08;浅薄的解释&#x…

大数据学习之Spark基础

Spark基础 简述 1、spark作业执行的特点&#xff1a; &#xff08;1&#xff09;只有遇到行动算子的时候&#xff0c;整个spark作业才会被触发执行 &#xff08;2&#xff09;遇到几次&#xff0c;执行几次 2、RDD: 弹性分布式数据集 弹性&#xff1a;数据量可大可小 RDD类似…

插片式远程 I/O模块:Profinet总线耦合器在SIMATIC Manager配置

XD9000是Profinet总线耦合器&#xff0c;单个耦合器最多可扩展32个I/O模块&#xff01;本文将详细介绍如何在SIMATIC Manager中配置插片式远程 I/O模块的Profinet总线耦合器&#xff0c;帮助您更好地应用这一技术。 一、SIMATIC Manager软件组态步骤&#xff1a; 1、创建工程&…

什么是敏捷本地化

快速、敏捷的多语言产品和服务交付正逐渐成为众多行业的常态。在这种情况下&#xff0c;重点从传统的期望&#xff08;即在合理的时间框架内翻译大量内容&#xff09;转变为翻译工作量非常大的小片段&#xff0c;通常在2-3到12-24小时之间&#xff0c;通常在周末或假期。 Logr…

IntelliJ IDEA自定义菜单(Menus)、任务栏(toolbars)详细教程

一、自定义菜单 1、打开Settings&#xff0c;找到Menus and Toolbars 2、点击右边的Main Menu&#xff0c;点击号&#xff0c;选择Add Action 3、弹出Add Action弹窗&#xff0c;搜索或者选择你要添加的指令 二、自定义工具栏 1、右键IDEA上方的工具栏空白位置&#xff0c;选…

计算机网络体系结构解析

OSI参考模型 与 TCP/IP模型 如图所示 TCP/IP模型有几层 应用层&#xff1a;只需要专注于为用户提供应用功能 HTTP、SMTP、Telnet等&#xff0c;工作在操作系统中的用户态&#xff0c;传输层及以下工作在内核态传输层&#xff1a;为应用层提供网络支持&#xff08;TCP、UDP传…

vue3实现在style中使用响应式变量

vue2的时候需要在style模块中访问script模块中的响应式变量&#xff0c;为此不得不使用css变量去实现。现在vue3已经内置了这个功能啦&#xff0c;可以在style中使用v-bind指令绑定script模块中的响应式变量。 示例 <template><div><span>hello </span&…

40个高阶ChatGPT学术论文指令集(附GPT使用链接)

我精心挑选的40个顶尖ChatGPT学术论文指令集&#xff0c;无疑将成为你撰写论文和开展研究的珍贵资源&#xff0c;极力推荐你珍藏起来&#xff01;这些建议极具实用价值&#xff0c;能有效提高你的研究工作效率&#xff0c;使得论文撰写过程轻松许多。 在开始前&#xff0c;提示…

8、matlab彩色图和灰度图的二值化算法汇总

1、彩色图和灰度图的二值化算法汇总原理及流程 彩色图和灰度图的二值化算法的原理都是将图像中的像素值转化为二值&#xff08;0或1&#xff09;&#xff0c;以便对图像进行简化或者特定的图像处理操作。下面分别介绍彩色图和灰度图的二值化算法的原理及流程&#xff1a; 1&a…

Python功能制作之获取CSDN所有发布文章的对应数据

大家好&#xff0c;今天我要分享的是一个实用的Python脚本&#xff0c;它可以帮助你批量获取CSDN博客上所有发布文章的相关数据&#xff0c;并将这些数据保存到Excel文件中。此外&#xff0c;脚本还会为每篇文章获取一个质量分&#xff0c;并将这个分数也记录在Excel中。让我们…

多周期路径的约束与设置原则

本节将回顾工具检查建立保持时间的原则&#xff0c;接下来介绍设置多周期后的检查原则。多周期命令是设计约束中常用的一个命令&#xff0c;用来修改默认的建立or保持时间的关系。基本语法如下 默认的建立时间与保持时间的检查方式 DC工具计算默认的建立保持时间关系是基于时钟…

Python实战:拥有设闹钟功能的可视化动态闹钟的实现

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

6-5,web3浏览器链接区块链(react+区块链实战)

6-5&#xff0c;web3浏览器链接区块链&#xff08;react区块链实战&#xff09; 6-5 web3浏览器链接区块链&#xff08;调用读写合约与metamask联动&#xff09; 6-5 web3浏览器链接区块链&#xff08;调用读写合约与metamask联动&#xff09; 这里就是浏览器端和智能合约的交…