python函数——基础

一、函数基础

  1. 函数体(功能代码块)
    • 函数是执行特定任务的代码块,通过调用函数名并传递参数(如果有的话)来执行这些任务。
  1. 函数的参数
    • 参数列表由一系列参数组成,使用逗号分隔。
    • 实参:调用函数时传递的参数。
    • 形参:函数定义时声明的参数。
    • 2.1 位置参数
      • 按照参数定义的顺序来传递值。
    • 2.2 关键参数
      • 通过指定参数名来传递值,无需遵循参数定义的顺序。
    • 2.3 默认参数
      • 在函数定义时给参数指定默认值,调用函数时如未传递该参数值,则使用默认值。默认参数必须放在非默认参数的右侧。
    • 2.4 不定长参数
      • 使用*args和**kwargs来接收任意数量的位置参数和关键字参数。
  1. 函数的返回值
    • 使用return语句从函数内部向外部返回数据。
    • 如果省略return或只有return而没有返回值,则Python默认返回None。
    • return可以放在函数中的任何位置,执行到return语句时,函数立即结束并返回结果。
    • 如果函数返回多个值,这些值将被打包成一个元组。

二、变量的作用域

  1. 变量的作用域
    • 变量起作用的代码范围称为变量的作用域。
  1. 1.5.1 局部变量
    • 在函数内部定义的变量,只在函数内部起作用。
    • 当函数执行结束后,局部变量自动删除,不能在函数外部访问。
  1. 1.5.2 全局变量
    • 变量可以同时被函数内外使用。
    • 在函数内部,如需修改全局变量的值,需使用global关键字声明。
  1. 查看变量作用域
    • 使用内置函数globals()和locals()可以查看全局变量和局部变量的字典表示。

示例代码

# 示例:函数与变量作用域  def my_function(a, b=10, *args, **kwargs):  # 位置参数a,默认参数b,不定长参数*args和**kwargs  local_var = "I'm a local variable"  print(f"a: {a}, b: {b}, args: {args}, kwargs: {kwargs}")  print(f"Local variable: {local_var}")  return a, b, args, kwargs  # 返回多个值  # 调用函数  
result = my_function(5, 20, 30, 40, key1="value1", key2="value2")  
print(result)  # 输出:(5, 20, (30, 40), {'key1': 'value1', 'key2': 'value2'})  # 示例:全局变量与局部变量  
a = 99  # 全局变量  def func1():  x, y = 2, 3  # 局部变量  print(x, y)  global b  # 声明b为全局变量  b = 8  print(locals())  # 查看局部变量  func1()  
print(a)  # 输出:99  
print(b)  # 输出:8,因为b在func1中被声明为全局变量并赋值为8

函数的深入学习与应用笔记(6-10页)

6. 函数的递归调用

在函数的学习过程中,我们了解到函数不仅可以调用其他函数,还可以调用自身,这就是函数的递归调用。递归函数是一种特殊的函数,它直接或间接地调用自身。递归函数必须包含一个或多个基准条件(终止条件),以便在达到某个特定条件时停止递归调用,否则会导致无限递归,最终导致程序崩溃。

示例


def factorial(n):  if n == 0 or n == 1:  return 1  else:  return n * factorial(n-1)  # 调用函数计算5的阶乘  
print(factorial(5))  # 输出:120

在这个例子中,factorial 函数用于计算一个数的阶乘。当 n 等于0或1时,函数返回1(基准条件)。否则,函数返回 n 乘以 n-1 的阶乘(递归调用)。

7. 不定长参数

在函数定义时,有时我们不确定函数会接收多少个参数。Python 提供了两种处理不定长参数的方式:*args 和 **kwargs。

  • *args:用于接收非关键字参数列表,并将它们作为元组处理。
  • **kwargs:用于接收关键字参数列表,并将它们作为字典处理。

示例


def greet_students(*args, **kwargs):  for name in args:  print(f"Hello, {name}!")  for key, value in kwargs.items():  print(f"{key} is {value}")  # 调用函数  
greet_students("Alice", "Bob", age=20, grade=3)  
# 输出:  
# Hello, Alice!  
# Hello, Bob!  
# age is 20  
# grade is 3
8. 函数的默认参数

在函数定义时,可以为参数指定默认值。如果在调用函数时没有为这些参数提供值,那么将使用默认值。默认参数必须放在非默认参数的右侧。

示例:


def greet(name, greeting="Hello"):  print(f"{greeting}, {name}!")  # 调用函数  
greet("Alice")  # 输出:Hello, Alice!  
greet("Bob", "Hi")  # 输出:Hi, Bob!
9. 函数的应用场景

函数在编程中有着广泛的应用,以下是一些常见的应用场景:

  • 代码重用:将重复的代码块封装成函数,提高代码的可读性和可维护性。
  • 模块化编程:将复杂的程序拆分成多个函数,每个函数负责实现一个特定的功能,使得程序结构更加清晰。
  • 封装数据:通过函数来封装和处理数据,隐藏数据的细节和实现方式,只暴露必要的接口给外部使用。
  • 错误处理:在函数中实现错误处理机制,如异常捕获和处理,使得程序更加健壮和可靠。
10. 函数的扩展性

在设计函数时,我们应该考虑函数的扩展性。通过使用默认参数、不定长参数等方式,我们可以为函数留下扩展的空间,方便后续添加新的功能或参数。这样做不仅可以减少修改源代码的工作量,还可以提高程序的可扩展性和可维护性。

总结:

通过学习函数的递归调用、不定长参数、默认参数以及函数的应用场景和扩展性等方面的知识,我们可以更好地理解和使用函数这一重要的编程概念。在实际开发中,我们应该充分利用函数的优势来提高代码的质量和效率。

1. 变量作用域

1.5.1 局部变量

  • 定义:在函数内部定义的普通变量,只在函数内部起作用。
  • 特点:当函数执行结束后,局部变量自动删除,不能再使用。

1.5.2 全局变量

  • 定义:变量可以同时被函数内外使用。
  • 关键字:在函数内部,若要将局部变量变为全局变量,需使用global关键字。

示例


a = 99  # 全局变量  def func1():  a = 2  # 这里a是局部变量,若不加global,则与全局变量a无关  print("func1函数中的a值为%d" % a)  def func2():  global a  # 声明a为全局变量  a = 8  print("全局变量a的值为%d" % a)  func1()  # 输出func1函数中的a值  
func2()  # 输出全局变量a的修改后值  
print(a)  # 输出全局变量a的最终值

内置函数

  • globals():返回全局变量的字典。
  • locals():返回当前作用域内的局部变量的字典。
2. 函数参数

1.3.1 位置参数

  • 定义:调用函数时,根据函数定义的参数位置来传递参数。

1.3.2 关键参数

  • 定义:通过对形参赋值的方式传递参数,允许实参顺序与形参顺序不一致。

1.3.3 默认参数

  • 定义:函数定义时,参数列表中的某个形参有默认值,该参数为默认参数。
  • 注意事项:默认参数必须放在非默认参数的右侧。

1.3.4 不定长参数

  • 定义:当函数的参数数量不确定时,使用不定长参数。
  • 类型:
    • *args:接收非关键字参数,存储为元组。
    • **kwargs:接收关键字参数,存储为字典。
3. 函数嵌套

1.6 函数嵌套

  • 定义:在Python中,一个函数内部可以定义另一个函数,并在内部调用它,形成函数的嵌套调用。
4. 递归函数

1.7 递归函数

  • 定义:一个函数直接或间接地调用自身。
  • 特点:必须有明确的递归结束条件,否则会造成无限递归,导致栈溢出。

# 示例代码(部分)  
def func1():  x, y = 2, 3  # 局部变量  print(x, y)  global b  b = 8  print(locals())  # 输出局部变量字典  func1()  
print(a)  # 输出全局变量a的值  
print(globals())  # 输出全局变量字典  # 输出结果(根据示例代码简化)  
# 2 3  
# {'y': 3, 'x': 2, 'b': 8}  
# 99  
# {'...': '...', 'a': 99, 'func1': <function func1 at ...>, 'b': 8, '...': '...'}

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

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

相关文章

C#.net6.0语言+B/S架构+前后端分离 手术麻醉信息管理系统源码

C#.net6.0语言&#xff0b;B/S架构前后端分离 手术麻醉信息管理系统源码 什么是手术麻醉信息管理系统 满足医院等级评级需求 满足电子病历评级需求 满足科室需求 术前 1、患者术前评估/诊断 2、术前讨论制定手术方案 3、手术准备 4、术前准备 术中 1、送手术室 2、麻…

数据库浅识及MySQL的二进制安装

数据库基础概念与MySQL二进制安装与初始化 使用数据库的必要性 数据库可以结构化储存大量数据信息&#xff0c;方便用户进行有效的检索访问 有效的保持数据信息的一致性&#xff0c;完整性&#xff0c;降低数据冗余 可以满足应用的共享和安全方面的要求 数据库基本概念 数据…

C语言经典算法题第一题

题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔 子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数 为多少&#xff1f; #include <stdio.h>int main() …

Swagger文档渲染,将Filter过滤器中抛出的异常错误消息返回前端显示

一、应用场景 在swagger通过/v2/api-docs获取到后端接口数据后&#xff0c;使用过滤器对/v2/api-docs请求进行拦截&#xff0c;然后对获取到的数据进行处理&#xff0c;当在处理过程中对Filter过滤器中抛出的异常错误消息进行捕获&#xff0c;并将捕获到的异常错误消息返回到前…

【SpringBoot3.x】自定义开发通用SDK

1. 前言 相信大家学习SpringBoot到现在&#xff0c;使用Maven构建项目时&#xff0c;会在pom.xml文件中引入各种各样的依赖&#xff0c;那么我们如何将自己常用的一些工具类库进行封装成starter或者SDK供其他项目使用呢&#xff0c;本博客就会带着大家一步一步创建自定义的SDK…

开源TinyFSM状态机适用于嵌入式工业平台吗?

文章目录 引言基于传统 C 实现的状态机TinyFSM 实现的对比现代 C 实现的状态机性能对比TinyFSM 性能测试传统 C 性能测试现代 C 性能测试 工业Misra C编程标准TinyFSM 的优缺点分析结论 引言 TinyFSM是一个为C设计的轻量级有限状态机开源库库。 在嵌入式系统开发中&#xff0c…

倍思突破氮化镓快充技术,为用户带来安全舒适体验

氮化镓,这个化学式为GaN的化合物,其高热稳定性和化学稳定性使其在多种极端环境中都能保持优良的性能,从而为其在电子器件领域的应用奠定了坚实的基础。 2018年前后开始,氮化镓快充充电器进入国内市场。作为第三代半导体材料的代表,氮化镓具有宽禁带的特性,其禁带宽度远大于传统…

Python连接Redis(简单连接、连接池连接、存取数据示例)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

数据中心:AI范式下的内存挑战与机遇

在过去的十年里&#xff0c;数据中心和服务器行业经历了前所未有的扩张&#xff0c;这一进程伴随着CPU核心数量、内存带宽(BW)&#xff0c;以及存储容量的显著增长。这种超大规模数据中心的扩张不仅带来了对计算能力的急剧需求&#xff0c;也带来了前所未有的内存功率密度挑战&…

Docker 从安装到使用的完整指南

目录 什么是 DockerDocker 的核心概念 镜像容器DockerfileDocker Compose Docker 的安装 在 Windows 上安装 Docker在 macOS 上安装 Docker在 Linux 上安装 Docker Docker 的基本使用 启动第一个容器管理容器构建自定义镜像使用 Docker Compose 高级主题 Docker 网络Docker 数…

适合孩子学习用什么的落地灯?五款精品护眼大路灯分享

适合孩子学习用什么的落地灯&#xff1f;说到护眼落地灯&#xff0c;都会出现两种呼声&#xff1a;一种是认为是“智商税”&#xff0c;而另外一种则是妥妥的照明神器&#xff01;护眼大路灯到底是哪种定义呢&#xff1f;贵的护眼灯一定好吗&#xff1f; 这么年&#xff0c;护…

区块链技术:重塑金融市场监管的新引擎

一、引言 随着金融市场的不断发展和创新&#xff0c;监管面临的挑战也日益严峻。传统的监管模式已难以满足现代金融市场的需要&#xff0c;而区块链技术的出现为金融市场监管带来了新的机遇。本文将探讨区块链技术在金融市场监管中的作用&#xff0c;以及它如何重塑监管模式&a…

深入研究websocket直播中signature这个参数怎么来的,模拟自己生成一个

上一节课我们已经找到了生成signature这个字段的代码位置&#xff0c;就是这个B函数&#xff0c;嗯......听起来好像有点奇怪&#xff0c;但是它确实叫B啊&#xff0c;笑死。不管了&#xff0c;看一下里面的逻辑是啥。 注意e参数的内容是&#xff1a; {"app_name":…

【Academy】API测试API testing

API测试API testing 概述API侦察API文档发现API文档使用机器可读的API文档 标识API端点与API端点交互确定支持的HTTP方法确定支持的内容类型使用Intruder查找隐藏端点 查找隐藏参数大量分配漏洞识别隐藏参数测试大规模分配漏洞 防止API中的漏洞服务端参数污染测试查询字符串中的…

作业管理系统

摘 要 随着网络的发展&#xff0c;信息化时代的到来&#xff0c;在教学工作的过程中作用越来越明显&#xff0c;作业的及时发布&#xff0c;学生的及时提交&#xff0c;以及通过网上的批改和评分&#xff0c;都大大促进教学质量的发展&#xff0c;充分的利用网络来加强管理&am…

用类来实现输入和输出时间(时:分:秒)

编写程序&#xff1a; 运行结果&#xff1a; 程序分析&#xff1a; 这是一个很简单的例子。类Time中只有数据成员&#xff0c;而且它们被定义为公用的&#xff0c;因此可以在类的外面对这些成员进行操作。t1被定义为Time类的对象。在主函数中向t1对象的数据成员输入用户…

MongoDB基础知识

​ 文档是mongodb中的最初单元&#xff0c;类似于mysql中的行&#xff0c;集合可以看做一个具有动态模式的表&#xff0c;mongodb可以拥有多个互相独立的数据库&#xff0c;每个数据库&#xff0c;都拥有自己的集合&#xff1b;每一个文档都有一个特殊的健&#xff1a;“_id”&…

“一站式企业服务平台”的功能架构

为提升区域营商环境&#xff0c;为促进区域经济发展&#xff0c;实现资源高效配置&#xff0c;全国各区域政府及产业园区都越来越重视如何创新企业服务机制、提升企业服务水平&#xff0c;来保障区域内的企业稳定及帮扶企业高质量的发展。随着近年来大数据、人工智能等新一代信…

前端记录日志生成文件保存到本地

一、前言 项目上线后业务人员反馈说是打印数据不准确&#xff0c;通过websocket连接打印机服务去进行打印&#xff0c;会出现条码漏打的情况&#xff1b;通过后端日志和打印机日志均没有找到问题原因&#xff0c;猜测是websocket连接断开导致的问题。 也想通过前端日志去排查…

第9天:静态文件和媒体文件管理

第9天&#xff1a;静态文件和媒体文件管理 目标 管理静态资源&#xff08;如CSS、JavaScript、图片等&#xff09;和用户上传的文件。 任务概览 配置静态文件和媒体文件的存储路径。学习如何收集和压缩静态文件。 详细步骤 1. 配置静态文件和媒体文件的存储路径 在setti…