Python教学入门:函数

news2024/11/26 2:27:01

在这里插入图片描述

在 Python 中,def 关键字用于定义函数。函数是一段可重用的代码块,用于执行特定的任务或操作。通过定义函数,可以将一段代码封装起来,使其可以在程序中被多次调用,提高代码的复用性和可维护性。
在这里插入图片描述
下面是 def 函数定义的基本语法结构:

def function_name(parameters):
    """Docstring"""
    # Function body
    # 可能包含多条语句
    return value

def:关键字用于声明函数的开始。
function_name:函数的名称,用于标识函数。
parameters:函数的参数列表,可以是零个或多个参数,多个参数之间用逗号分隔。
“”“Docstring”“”:函数的文档字符串(docstring),用于描述函数的作用、参数和返回值等信息。
return value:return 语句用于从函数中返回值,可以选择性地指定返回值。如果函数不需要返回值,可以省略 return 语句。
在这里插入图片描述

下面是一个简单的示例,演示了如何定义一个函数并调用它:

def greet(name):
    """This function greets the person with the given name."""
    print("Hello, " + name + "!")

# 调用函数
greet("Alice")  # 输出:Hello, Alice!

函数的参数传递

位置参数:
位置参数是最常见的参数传递方式,它按照定义时的顺序将参数传递给函数。调用函数时,传递的参数数量和顺序必须与函数定义时的参数数量和顺序一致。
在这里插入图片描述

def greet(name, message):
    print(f"{message}, {name}!")

# 调用函数
greet("Alice", "Hello")  # 输出:Hello, Alice!

关键字参数:
关键字参数允许在调用函数时使用参数名来传递参数,可以无需考虑参数的顺序。在函数定义时,可以使用 **kwargs 来表示一个字典,其中包含了所有额外的关键字参数。
在这里插入图片描述

def greet(**kwargs):
    for name, message in kwargs.items():
        print(f"{message}, {name}!")

# 调用函数
greet(Alice="Hello", Bob="Hi", Charlie="Hey")  # 输出:Hello, Alice! Hi, Bob! Hey, Charlie!

默认参数:
默认参数允许在定义函数时为参数指定默认值,如果调用函数时未提供该参数的值,则会使用默认值。
在这里插入图片描述

def greet(name, message="Hello"):
    print(f"{message}, {name}!")

# 调用函数
greet("Alice")  # 输出:Hello, Alice!
greet("Bob", "Hi")  # 输出:Hi, Bob!

可变数量参数:
可变数量参数允许函数接受任意数量的参数。在函数定义时,可以使用 *args 来表示一个元组,其中包含了所有额外的位置参数。
可变数量参数也被称为不定长参数,因为它们允许函数接受任意数量的参数,而不需要事先确定参数的数量。在 Python 中,可变数量参数使用 *args 来表示,它将额外的位置参数收集到一个元组中。这使得函数能够处理不同数量的参数,而不必为每种情况都定义不同的函数签名。
在这里插入图片描述

def greet(*names):
    for name in names:
        print(f"Hello, {name}!")

# 调用函数
greet("Alice", "Bob", "Charlie")  # 输出:Hello, Alice! Hello, Bob! Hello, Charlie!

什么是变量的作用域?

局部作用域(Local Scope):局部作用域是指在函数内部定义的变量,只能在函数内部被访问。这意味着它们的生命周期仅限于函数的执行期间。
在这里插入图片描述

def my_function():
    x = 10  # x 是局部变量
    print(x)

my_function()  # 输出:10
print(x)  # 报错,x 在函数外部不可访问

全局作用域(Global Scope):全局作用域是指在模块顶层定义的变量,可以在模块中的任何地方被访问。
在这里插入图片描述

x = 10  # 全局变量

def my_function():
    print(x)  # 函数中可以访问全局变量

my_function()  # 输出:10
print(x)  # 输出:10

嵌套作用域(Enclosing Scope):嵌套作用域是指在嵌套函数中访问的变量,例如一个函数内部包含另一个函数。内部函数可以访问外部函数中的变量,但外部函数无法访问内部函数的变量。

def outer_function():
    x = 10  # 外部函数的局部变量
    def inner_function():
        print(x)  # 内部函数可以访问外部函数的变量
    inner_function()

outer_function()  # 输出:10

内置作用域(Built-in Scope):内置作用域是指 Python 中预先定义的一些内置函数和对象,例如 print()、len() 等。这些内置函数和对象可以在任何地方被访问。

print("Hello, world!")  # 内置函数在任何地方都可以访问

函数的特殊形式

匿名函数(lambda 函数):
匿名函数是一种特殊的函数形式,它使用 lambda 关键字来创建,通常用于简单的函数操作。它们可以在需要函数对象的任何地方使用,并且通常用于作为参数传递给高阶函数。

在这里插入图片描述

# lambda 函数的语法:lambda parameters: expression
# 创建一个简单的匿名函数,计算两个数的和
add = lambda x, y: x + y
print(add(3, 5))  # 输出:8

# 在排序函数中使用 lambda 函数
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])  # 按元组中的第二个元素排序
print(pairs)  # 输出:[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

生成器函数:
生成器函数是一种特殊的函数形式,它使用 yield 关键字来生成一个值序列。当调用生成器函数时,它会返回一个生成器对象,可以逐个地产生值而不必一次性生成所有值,从而节省内存空间。

# 定义一个简单的生成器函数,生成斐波那契数列
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

# 调用生成器函数,返回一个生成器对象
fib_gen = fibonacci()

# 逐个生成斐波那契数列的值
for i in range(10):
    print(next(fib_gen))  # 通过 next() 函数获取下一个值

递归函数
递归是一种常见的问题解决技巧,通常用于解决可以被拆解为更小相同问题的问题。递归函数在问题的解决过程中,通过逐步缩小问题的规模,最终达到一个简单的基本情况,然后开始回溯,将所有解决子问题的结果合并为最终的解决方案。
在这里插入图片描述

def factorial(n):
    if n == 0:  # 基本情况:0 的阶乘为 1
        return 1
    else:
        return n * factorial(n - 1)  # 递归调用自身,缩小问题规模

# 调用递归函数
result = factorial(5)
print(result)  # 输出:120

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

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

相关文章

安装docker的PHP环境NLMP环境在国产deepin操作系统上

1: 先安装docker 安装完后执行,权限设置 sudo usermod -aG docker $USER或者sudo usermod -aG docker kentrl#添加当前用户到Docker用户组中 sudo newgrp docker#更新用户组数据,必须执行否则无效 sudo systemctl restart docker 先看目录结构: 2:按照目录结构挂载磁盘,…

MLP/CNN/RNN/Transformer主流深度学习模型的区别

1. 多层感知机(MLP) 核心特征: 结构:MLP 是一种基本的前馈神经网络,包含一个输入层、一个或多个隐藏层以及一个输出层。每层由全连接的神经元组成。用途:适用于简单的分类和回归任务。限制:不适用于处理序列数据或图像数据,因为它不具备处理输入之间时间或空间关系的能…

IDEA @Autowired不显示红线

IDEA 中,Autowired 显示红线一般情况是注入 Mapper 或者 Dao 时出现的,如下图: 这个报错是因为 Mapper 或者 Dao 上没有加 Repository 或者 Mapper,Autowired 注入时就判断为这不是一个 Bean。 不建议通过加上面两个注解的方式解…

python自动化之网易自动点歌

这个代码是是使用的pyautogui库和pyperclip库完成的,这个库是开源的地址如下:https://github.com/asweigart/pyautogui这里详细的用法想学习的可以到这看看 下面是代码: import pyautogui import subprocess import pyperclip import time i…

ubuntu设置扩充swap交换空间

Swap是指Linux系统中的交换分区,类似于Windows的虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存来使用,从而解决内存不足的问题。交换分区,它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行! …

【uniapp】微信小程序2024手机号快速验证及无感登录教程(内附代码)

组件:手机号快速验证组件 适用对象:企业/个体 费用:0.03元/次 目录 前言思路前端后端代码无感登录onload事件无感登录方法登录判断后端mini_login2 最后 前言 最近注册了公司,可以注册具有支付能力的小程序了,各种材料…

用了 18 个月时间,做 AI 应用从 0 到 200 万用户,从亏损到盈利(4000 字全面复盘)

前言 距离上次《离职一年,收入10倍增长》总结到现在已经过去了 22 个月。在这段时间里我经历了从高峰跌到谷底又慢慢回弹。组建团队后经历了 10 个月的连续亏损,目前已经连续 12 个月盈利,专注于 AI 应用小程序方向,已累计 200 多…

Hadoop大数据处理技术-Linux相关命令

​7.Linux常用命令 1)Windows中的dir:列出当前目录下所有的文件和目录 2)cd:改变当前目录 cd命令并不能直接实现这种跳跃转换目录的功能 它只能让你在当前目录和其子目录之间来回切换 就像在一张平面地图上移动一样 如果想跨目录…

【Excel】使用VBA宏简单自定义Excel软件界面

改行做经济师学习Excel,偶有心得,摘录于此,备忘。 言简意赅,仅供自用。 1 实现效果 在Excel的左上角可添加按钮,该按钮的功能可由我们自己通过编写代码定义,能实现特定功能,并且在所有打开的…

Web端Webrtc,SIP,RTSP/RTMP,硬件端,MCU/SFU融合视频会议系统方案分析

Web端视频融合,会议互通已经是视频会议应用的大趋势,一是目前企业有大量的老视频会议硬件设,二新业务又需要Web端支持视频会议监控直播需求,迫切需要一个融合对接的方案,即能把老的设备用起来,又能对接新的…

界面组件Telerik UI for WPF 2024 Q1新版亮点 - 全新DateRangePicker组件

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等,创建的应用程序可靠且结构良好,非常容易维护,其直观的API将无缝地集成Visual Studio…

通过ABAP 程序自动创建ADSO模型-第一弹

学习新东西从来都是一件快乐的事情!! 前言 今天我讲一个很好玩的东西,那就是通过ABAP程序去自动生成BW的ADSO模型。我相信做过BW建模的小伙伴们都知道,BW模型建模是最基础且核心的部分,一旦设计出错,将会影…

电脑上删除的文件怎么恢复?这三个策略能帮到你!

“我很好奇,如果我在电脑上删除了一个比较重要的文件,还有机会恢复它吗?应该怎么做才能恢复这个文件呢?” 在使用电脑时,我们会将很多重要的数据或文件都保存在电脑上。如果电脑文件删除后我们才意识到文件是误删了&am…

面试官最怕你懂的Kafka面试题,一招致胜!

👩🏽‍💻个人主页:阿木木AEcru 🔥 系列专栏:《Docker容器化部署系列》 《Java每日面筋》 💹每一次技术突破,都是对自我能力的挑战和超越。 目录 一、前言Kafka的优点Kafka的使用场景…

赞:java使用easy-excel导入模板下载提供用户进行导入

就是我们在点击导入的时候,一般都是有一个模板的,我们需要下载这个模板,然后再按照这个excel模板填充数据之后,再导入。 那么导出模板下载,说白了和前面一篇 赞:java使用easy-excel导出数据的通用模板思路…

Linux——日志的编写与线程池

目录 前言 一、日志的编写 二、线程池 1.线程池基本原理 2.线程池作用 3.线程池的实现 前言 学了很多线程相关的知识点,线程控制、线程互斥、线程同步,今天我们将他们做一个总结,运用所学知识写一个较为完整的线程池,同时…

算法打卡day38

今日任务: 1)完全背包理论基础(卡码网52. 携带研究材料) 2)518.零钱兑换II 3)377. 组合总和 Ⅳ 4)复习day13 完全背包理论基础(卡码网52. 携带研究材料) 题目链接:52. 携带研究材料(第七期模拟…

go语言是如何实现协程的

写在文章开头 go语言的精华就在于协程的设计,只有理解协程的设计思想和工作机制,才能确保我们能够完全的利用协程编写强大的并发程序。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专…

51-M.2 B Key-5G模块 (U)SIM卡电路设计

视频链接 M.2 B Key-5G模块 &(U)SIM卡电路设计01_哔哩哔哩_bilibili M.2 B Key-5G模块 &(U)SIM卡电路设计 1、5G模块 &(U)SIM卡相关概念 1.1、5G模块(RM500Q-GL) R…

✯✯✯绍兴ISO9001认证:打造卓越质量管理的核心引擎✯✯✯

🌈绍兴ISO9001认证:🌺打造卓越质量管理的💗核心引擎🥕 🚈在绍兴这座历史悠久、🍅文化底蕴深厚的城市中,🏣企业间的竞争日趋激烈。💁‍♂️为了在这场激烈的&a…