Python教学入门:函数

在这里插入图片描述

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

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

相关文章

pandas/python 一个实战小案例

上次写坦克游戏的时候,接触了一点pandas,当时只是简单了解了一下如何遍历行和列并获取值来替换图片,想更多了解pandas。正好有一些数据需要筛选,试试能不能用通过代码实现。虽然总的来说不复杂,但由于原始数据在命名、…

如何训练猫出门不害怕:耐心做好这些训练,轻松get能溜的小猫

一般我们外出见到的都是遛狗的,溜猫的相对少见,一方面是因为猫咪是喜欢安静独处的小动物,另一方面是糟乱的环境也容易引起猫咪的应激。对于是否应该“溜猫”,有两个极端的阵营。一些铲屎官认为应尊重猫的天性,胆小不爱…

如何使用AI写作扩写文章?看完这篇学会扩写

如何使用AI写作扩写文章?在数字化时代的浪潮下,人工智能(AI)已经深入渗透到我们生活的各个领域,其中,AI写作扩写技术更是以其高效、便捷的特点受到了广大用户的青睐。它不仅极大提升了写作效率,…

Leetcode算法训练日记 | day29

一、递增子序列 1.题目 Leetcode:第 491 题 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等&…

硬件?、嘉立创EDA画PCB规则设计

1、打开规则设计 设置单位为mil 点击全部 将安全距离设置为8mil,这个8mil是目前很多生产PCB的工厂可以做的,如果距离设置的更小也就是性能要求更高,相应的生产成本也高元件到元件的距离设置为20mil 2、设置导线的宽度规则,可以对v…

第G6周:CycleGAN实践

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、CycleGAN原理 (一)CycleGAN的原理结构: CycleGAN(循环生成对抗网络)是一种生成对抗网络&…

思维导图软件Xmind for Mac 中文激活版 支持M

XMind是一款非常受欢迎的思维导图软件,它应用了Eclipse RCP软件架构,注重易用性、高效性和稳定性,致力于帮助用户提高生产率。 Xmind for Mac 中文激活版下载 XMind的程序主体由一组插件构成,包括一个核心主程序插件、一组Eclipse…

文件后缀变成.halo? 如何恢复重要数据

.halo 勒索病毒是什么? .halo勒索病毒是一种恶意软件,属于勒索软件(Ransomware)的一种。这种病毒会加密用户计算机上的文件,并要求受害者支付赎金才能获取解密密钥,从而恢复被加密的文件。勒索软件通常会通…

力扣(leetcode) 42. 接雨水 (带你逐步思考)

力扣(leetcode) 42. 接雨水 (带你逐步思考) 链接:https://leetcode.cn/problems/trapping-rain-water/ 难度:hard 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多…

【方便 | 重要】#LLM入门 | Agent | langchain | RAG # 3.7_代理Agent,使用langchain自带agent完成任务

大型语言模型(LLMs)虽强大,但在逻辑推理、计算和外部信息检索方面能力有限,不如基础计算机程序。例如,LLMs处理简单计算或最新事件查询时可能不准确,因为它们仅基于预训练数据。LangChain框架通过“代理”(…

机器学习在安全领域的应用:从大数据中识别潜在安全威胁

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

Ubuntu20.04 ISAAC SIM仿真下载使用流程(4.16笔记补充)

机器:华硕天选X2024 显卡:4060Ti ubuntu20.04 安装显卡驱动版本:525.85.05 参考: What Is Isaac Sim? — Omniverse IsaacSim latest documentationIsaac sim Cache 2023.2.3 did not work_isaac cache stopped-CSDN博客 Is…

LeetCode in Python 704. Binary Search (二分查找)

二分查找是一种高效的查询方法&#xff0c;时间复杂度为O(nlogn)&#xff0c;本文给出二分查找的代码实现。 示例&#xff1a; 代码&#xff1a; class Solution:def search(self, nums, target):l, r 0, len(nums) - 1while l < r:mid (l r) // 2if nums[mid] > ta…

C++11 数据结构1 线性表的概念,线性表的顺序存储,实现,测试

一 线性表的概念 线性结构是一种最简单且常用的数据结构。 线性结构的基本特点是节点之间满足线性关系。 本章讨论的动态数组、链表、栈、队列都属于线性结构。 他们的共同之处&#xff0c;是节点中有且只有一个开始节点和终端节点。按这种关系&#xff0c;可以把它们的所有…

MC9S12A64 程序烧写方法

前言 工作需要对MC9S12A64 单片机进行程序烧写。 资料 MC9S12A64 单片机前身属于 飞思卡尔半导体&#xff0c;后来被恩智浦收购&#xff0c;现在属于NXP&#xff1b; MC9S12A64 属于16位S12系列&#xff1b;MC9S12 又叫 HCS12。 数据手册下载连接 S12D_16位微控制器 | N…

[大模型]TransNormerLLM-7B 接入 LangChain 搭建知识库助手

TransNormerLLM-7B 接入 LangChain 搭建知识库助手 环境准备 在 autodl 平台中租赁一个 3090/4090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其…

简单实用的备忘录小工具 记事提醒备忘效果超好

在这个信息爆炸的时代&#xff0c;我们每个人都需要处理大量的信息和任务。有时候&#xff0c;繁忙的生活和工作会让我们感到压力山大。幸运的是&#xff0c;现在有很多简单实用的软件工具&#xff0c;像得力的小助手一样&#xff0c;帮助我们整理思绪&#xff0c;提高效率&…

Redis系列1:深刻理解高性能Redis的本质

1 背景 分布式系统绕不开的核心之一的就是数据缓存&#xff0c;有了缓存的支撑&#xff0c;系统的整体吞吐量会有很大的提升。通过使用缓存&#xff0c;我们把频繁查询的数据由磁盘调度到缓存中&#xff0c;保证数据的高效率读写。 当然&#xff0c;除了在内存内运行还远远不够…

Docker 和 Podman的区别

文章目录 Docker 和 Podman的区别安装架构和特权要求运行容器方面安全性(root的权限)镜像管理方面命令方面Docker常用命令Podman常用命令 Docker 和 Podman的区别 安装 Docker安装&#xff1a;官方文档 Podman安装&#xff1a;官方文档 架构和特权要求 Docker使用client-se…

11、电科院FTU检测标准学习笔记-越限及告警上送功能

作者简介&#xff1a; 本人从事电力系统多年&#xff0c;岗位包含研发&#xff0c;测试&#xff0c;工程等&#xff0c;具有丰富的经验 在配电自动化验收测试以及电科院测试中&#xff0c;本人全程参与&#xff0c;积累了不少现场的经验 ———————————————————…
最新文章