生命在于学习——Python人工智能原理(4.7)

在这里插入图片描述

四、Python的程序结构与函数

4.4 函数

函数能将代码划分为若干模块,每一个模块可以相对独立的实现某一个功能,函数有两个主要功能,分别是降低编程难度和实现代码复用,函数是一种功能抽象,复用它可以将一个复杂的大问题分解为一系列简单的小问题,小问题再分解成更小的问题,是一种分而治之的思想运用。

4.4.1 函数定义

函数的定义即函数功能的实现过程,包含函数头与函数体两部分。使用def关键字定义函数,后跟函数名、参数和冒号。函数体缩进。
语法格式如下:

def 函数名(参数1,参数2):函数体return 返回值列表
其中,关键要点包括:
def:关键字,标志着函数的开始。
函数名:函数的唯一标识。
参数:参数列表中的参数是形式参数,形参只在函数体中有效。
形文档字符串:在函数体开始的第一个语句通常是一个字符串,用于描述函数的作用、参数、返回值等信息。
冒号:用于标记函数体的开始。
函数体:函数体包含了实现函数功能的代码块,由一行或多行代码组成。
返回值:标志函数的结束,将返回值赋给函数的调用者,可选的返回一个值,如果没有return,函数将返回none。

4.4.2 函数调用

函数被定义好之后不会立即执行,只有被程序调用时才会执行。
语法格式:
函数名(实参)
调用时,参数列表中给出实际要传入函数内部的参数,这类参数称为实际参数,即实参,实参可以是变量、常量、表达式、函数等。

4.4.3 参数传递

Python中函数的参数传递是指实参传递给形参的过程。python中函数支持以多种方式传递参数,包括位置传递,关键字传递,默认值传递,包裹传递,解包裹传递以及混合传递。

## 1. 位置传递(Positional Arguments)位置传递是最基本的参数传递方式,参数按照函数定义时的位置顺序依次传递给函数。**示例:**```python
def greet(first_name, last_name):print(f"Hello, {first_name} {last_name}")greet("John", "Doe")  # Hello, John Doe
markdown2. 关键字传递(Keyword Arguments)关键字传递允许调用者明确指定参数的名称和值,这样就不必关心参数的顺序。示例:def greet(first_name, last_name):print(f"Hello, {first_name} {last_name}")greet(last_name="Doe", first_name="John")  # Hello, John Doe
python3. 默认值传递(Default Argument Values)在函数定义时,可以为参数设置默认值。当调用函数时如果没有传递该参数,则使用默认值。示例:def greet(name, greeting="Hello"):print(f"{greeting}, {name}")greet("John")  # Hello, John
greet("Jane", greeting="Hi")  # Hi, Jane
python4. 包裹传递(Variable-Length Non-Keyword Arguments, *args)使用星号(*)前缀的参数可以收集所有额外的位置参数,并将它们作为元组传递给函数。示例:def sum_all(*numbers):return sum(numbers)print(sum_all(1, 2, 3, 4))  # 10
python5. 解包裹传递(Unpacking, * for lists/tuples and ** for dictionaries)解包裹允许将一个列表、元组或字典解包成多个参数。示例:def greet(name, greeting):print(f"{greeting}, {name}")args = ["John", "Hello"]
greet(*args)  # Hello, Johnkwargs = {"name": "Jane", "greeting": "Hi"}
greet(**kwargs)  # Hi, Jane
python6. 可变关键字参数传递(Variable-Length Keyword Arguments, **kwargs)双星号(**)前缀的参数可以收集所有额外的关键字参数,并将它们作为字典传递给函数。示例:def describe_person(name, **details):print(f"{name}:")for key, value in details.items():print(f"  {key}: {value}")describe_person("Alice", age=30, job="Engineer")  # Alice:#   age: 30#   job: Engineer
python7. 混合传递函数可以同时接受位置参数、关键字参数、默认值参数、可变参数等。示例:def describe_person(name, age, job=None, **details):print(f"{name} is a {age}-year-old {job or 'person'}:")for key, value in details.items():print(f"  {key}: {value}")describe_person("Bob", 25, job="Developer", city="New York", hobby="Coding")
4.4.4 函数返回值(Return Values)

在Python中,函数可以通过return󠁪语句来返回一个或多个值。如果函数没有显式地返回任何值,则默认返回None󠁪。返回值可以是任何数据类型,包括基本类型(如整数、字符串)、复杂类型(如列表、字典)甚至是自定义对象。示例:

def add(a, b):return a + bresult = add(3, 4)
print(result)  # 输出:7def get_user_info(name, age):return {"name": name,"age": age}user = get_user_info("Alice", 30)
print(user)  # 输出:{'name': 'Alice', 'age': 30}
4.4.5 python函数作用域(Scope)

函数作用域决定了变量的可见性和生命周期。Python中有以下几种作用域:1. 局部作用域(Local Scope):在函数内部定义的变量仅在该函数内部可见。函数执行完毕后,这些变量会被销毁。

def my_function():local_var = 5print(local_var)  # 可以访问local_varmy_function()  # 输出:5
print(local_var)  # 错误:NameError: name 'local_var' is not defined
python1. 全局作用域(Global Scope):在函数外部定义的变量拥有全局作用域,整个文件内都可以访问,除非在函数内部被重新定义为局部变量。global_var = 10def access_global():print(global_var)access_global()  # 输出:10def modify_global():global global_var  # 使用global关键字声明使用全局变量global_var = 20modify_global()
print(global_var)  # 输出:20
python1. 内置作用域(Built-in Scope):包含Python内置的名称(如len󠁪, range󠁪, str󠁪等),这些名称在任何地方都可以直接访问。2. 非局部作用域(Non-local Scope/Enclosing Scope):当一个函数嵌套在另一个函数内时,外层函数内的变量对内层函数而言是非局部变量。使用nonlocal󠁪关键字可以在内层函数中修改外层函数的变量。def outer():enclosed_var = 100def inner():nonlocal enclosed_varenclosed_var = 200print(enclosed_var)inner()print(enclosed_var)  # 输出也会是200,因为inner函数修改了enclosed_varouter()

python理解函数作用域对于编写清晰、可维护的代码至关重要,它帮助我们控制变量的可见范围,避免命名冲突。

4.5 匿名函数(Lambda Functions)

匿名函数,通常被称为lambda函数,在Python中是一种简洁的方式用于定义小型、一次性使用的函数。这种函数不需要使用def󠁪关键字来定义,而是使用lambda󠁪关键字。lambda函数的主要用途是在需要小函数的地方,特别是在作为参数传递给高阶函数时,如map()󠁪, filter()󠁪, sorted()󠁪等。

语法:lambda arguments: expression
python示例:# 使用lambda函数进行平方计算
square = lambda x: x ** 2
print(square(5))  # 输出:25

使用lambda函数对列表进行排序

students = [("Alice", 28), ("Bob", 22), ("Charlie", 30)]
students.sort(key=lambda student: student[1])
print(students)  # 输出:[('Bob', 22), ('Alice', 28), ('Charlie', 30)]

4.6 模块化编程

模块化编程是一种将程序分解成独立部分的方法,每个部分负责特定的功能。在Python中,模块就是包含Python定义和语句的文件。通过将代码组织成模块,可以提高代码的可读性、可重用性和可维护性。

创建模块: 创建一个.py󠁪文件即为创建一个模块,例如math_operations.py󠁪。模块内容示例:# math_operations.py
def add(a, b):return a + bdef subtract(a, b):return a - b
python导入模块: 使用import󠁪语句可以导入模块,然后调用其中的函数。导入示例:import math_operationsresult = math_operations.add(5, 3)
print(result)  # 输出:8result = math_operations.subtract(10, 4)
print(result)  # 输出:6
python从模块导入特定函数: 使用from ... import ...󠁪语句可以直接导入模块中的特定函数,而无需每次调用时都加上模块名前缀。导入特定函数示例:from math_operations import add, subtractresult = add(7, 2)
print(result)  # 输出:9result = subtract(15, 5)
print(result)  # 输出:10
python使用as关键字给模块或函数起别名: 可以使用as󠁪关键字给导入的模块或函数起别名,简化调用过程。别名示例:import math_operations as moresult = mo.add(8, 2)
print(result)  # 输出:10from math_operations import add as a, subtract as sresult = a(9, 3)
print(result)  # 输出:12result = s(18, 8)
print(result)  # 输出:10

python模块化编程是Python编程中的一项重要技能,它有助于保持代码的整洁和高效,同时也便于团队协作和代码复用。

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

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

相关文章

深拷贝与浅拷贝的理解

深拷贝和浅拷贝是复制对象时的两种不同方式,它们之间的区别在于它们如何处理对象的引用类型成员。 浅拷贝(Shallow Copy) 浅拷贝是指创建一个新对象,这个新对象是对原对象的字段的一个精确副本。对于字段中的基本数据类型&#…

【C#】找不到属性集方法。get只读属性用了反射设置setValue肯定报错

欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 背景 找不到属性集方法。get只读属性用了反射设置setValue肯定报错 报错…

IPFoxy Tips:匿名海外代理IP的使用方法及注意事项

在互联网上,隐私和安全问题一直备受关注。为了保护个人隐私和数据安全,使用匿名代理IP是一种常用的方法。匿名代理IP可以隐藏用户的真实IP地址,使用户在访问网站时更加隐秘和安全。 本文将介绍匿名代理IP的基本原理和核心功能。 基本原则 匿…

2024期权交易佣金手续费最低是多少?期权交易有哪些成本?

显性成本 期权交易的显性成本包含期权交易的佣金和交易所费用,分别支付给券商和交易所,统一由券商代收。 佣金 期权佣金是期权交易时支付给券商的费用,佣金通常以交易金额的一定比例计算,可以是固定费用,也可以是滑…

用两个钟,我又在VMWARE上搞了一套内部网配置

最近要学es,所以打算自己用虚拟机搞个NAT,又搞了两个钟。为了不再费劲尝试,也为了造福大众,所以选择搞一份NAT笔记!!!! 1.初始化网关和DNS 我们给网关配置一个地址192.168.96.1&…

【多模态】BEiT v2

链接:https://arxiv.org/pdf/2208.06366 论文:BEIT V2: Masked Image Modeling with Vector-Quantized Visual Tokenizers Introduction Motivation:Masked image modeling (MIM) 任务在自监督表征学习上取得了不错的成绩,但是现…

教师资格证考试面试报名流程

文章目录 前言面试报名流程一、登录官网二、选择报考省份三、注册报名账号四、确认考试承诺五、填报个人信息六、上传个人照片七、查看个人信息八、面试报名九、等待审核十、考试缴费最后(必看)附录1. 中小学教师资格考试网2. 广东省教资考试报名通知&am…

Linux加固-权限管理_chattr之i和a参数

一、参数i i:如果对文件设置了i属性,不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置了i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。(相当于把文件给锁住了,…

【Mysql】多表、外键约束

多表 1.1 多表简述 实际开发中,一个项目通常需要很多张表才能完成。 例如一个商城项目的数据库,需要有很多张表:用户表、分类表、商品表、订单表… 1.2 单表的缺点 1.2.1 数据准备 创建一个数据库 db3 CREATE DATABASE db3 CHARACTER SET utf8;数据库…

Segment any Text:优质文本分割是高质量RAG的必由之路

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

基于qemu_v8 + optee400构建自定义app

构建基于libckteec的tls安全通信应用程序,应用目录结构 $ tree -L 2 . ├── libp11 │ ├── libp11-libp11-0.4.12 │ ├── mk_optee_three_part.sh │ └── out ├── openssl │ ├── mk_optee_three_part.sh │ ├── openssl-1.1.1w │ …

vue项目中封装element分页组件

我们都知道封装组件是为了方便在项目中使用,全局封装之后哪个模块使用直接复制就行了,分页在后台项目中用到的地方也是很多的,所以我们就全局封装一下分页组件,以后也方便在项目中使用,接下来封装的这个分页也是elemen…

clean code-代码整洁之道 阅读笔记(第十四章)

第十四章 逐步改进——对一个命令行参数解析程序的案例研究 ps:本章设计代码示例所以篇幅会较长,推荐直接看原文,思路、代码讲解的很清楚 本章示例:解析命令行参数的工具 —— Args Args的简单用法 public static void main(Stri…

vue中动态绑定样式名的方式有几种?

在Vue中可以使用动态绑定样式名的方式有几种,具体取决于你的需求和使用的场景。 使用对象语法: 可以通过在data中定义一个变量,然后在模板中使用对象语法来动态绑定样式名。 <template><div :class="{ active: isActive }">Hello Vue!</div> &l…

网络文化经营许可证(文网文)办理全面讲解

随着互联网时代的飞速发展&#xff0c;互联网早已渗透到人们的生活中&#xff0c;各类直播、短视频成为大家生活娱乐必不可少的一部分。注册一家从事互联网行业的企业是一个不错的选择。那互联网企业需要办理什么证件资质呢&#xff1f;在互联网行业从事盈利文化活动必须持有网…

【精品方案】智能制造之路(93页PPT)

引言&#xff1a;智能制造之路&#xff1a;革新制造业的引领之旅 随着科技的迅猛发展&#xff0c;特别是人工智能、物联网、大数据等技术的不断进步&#xff0c;制造业正迎来一场深刻的变革。智能制造&#xff0c;作为这场变革的核心&#xff0c;正逐步成为推动产业升级和转型发…

MySQL为什么不建议使用多表JOIN

一、典型回答 之所以不建议使用JOIN查询&#xff0c;最主要的原因就是JOIN的效率比较低。 MySQL是使用了嵌套循环&#xff08;Nested-Loop Join&#xff09;的方式实现关联查询的&#xff0c;简单点说就是要通过两层循环&#xff0c;用第一张表做外循环&#xff0c;第二张表做内…

大模型课程资料-全网最火29套全栈大模型项目实践

29套AI全栈大模型项目实战&#xff0c;人工智能视频课程-多模态大模型&#xff0c;微调技术训练营&#xff0c;大模型多场景实战&#xff0c;AI图像处理&#xff0c;AI量化投资&#xff0c;OPenCV视觉处理&#xff0c;机器学习&#xff0c;Pytorch深度学习&#xff0c;推荐系统…

【LLM】一分钟带你了解Agent工作流四范式

文章目录 1. 大模型直接生成-generation2. 大模型充当工具使用-tool3. 大模型执行思维链-Planning4. 多大模型Agent合作-multiagent collaboration 1. 大模型直接生成-generation 通过提示词&#xff0c;大模型直接生成想要的结果&#xff1a; 2. 大模型充当工具使用-tool …

无人机在农业方面应用的局限性

无人机在农业方面的应用虽然带来了许多便利和效率提升&#xff0c;但也存在一些局限性。以下是对这些局限性的清晰归纳和分点表示&#xff1a; 飞行受限&#xff1a; 无人机在飞行过程中受到一定限制&#xff0c;例如在森林、城市等复杂地形或建筑物密集区域&#xff0c;其空间…