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

在这里插入图片描述

四、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/36246.shtml

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

相关文章

使用函数open()的例子

代码&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> int main(void) {int fd-1;char filename[]"test.txt";fdopen(filename,O_RDWR);if(-1fd){printf("Open file %s failure!,fd…

PyCharm左侧项目区域出现淡黄色背景如何解决

PyCharm左侧项目区域出现淡黄色背景如何解决 解决方法&#xff1a; 1、打开pycharm 文件 - > Setting-> 项目 -> 项目结构 2、添加内容根 为 你的项目根目录即可恢复

什么是港股通?港股通碎股如何进行交易佣金最低万0.8?

港股通是一种投资渠道&#xff0c;它允许符合条件的内地投资者通过内地的证券账户&#xff0c;间接地买卖在香港联合交易所上市的股票。这一机制是沪港通和深港通计划的一部分&#xff0c;旨在促进内地与香港资本市场的互联互通。 ### 港股通的特点包括&#xff1a; - 交易范…

无痛接入FastText算法进行文本分类(附代码)

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

API-其他事件

学习目标&#xff1a; 掌握其他事件 学习内容&#xff1a; 页面加载事件元素滚动事件页面尺寸事件 页面加载事件&#xff1a; 加载外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时触发的事件。 为什么要学&#xff1f;&#xff1f; 有些时候需要等…

OnlyOffice:为现代工作方式而生的办公套件

ONLYOFFICE官网链接&#xff1a;https://www.onlyoffice.com/zh/office-suite.aspx https://www.onlyoffice.com/zh/pdf-editor.aspx OnlyOffice 是一款开源的办公套件&#xff0c;它提供了一系列的办公工具&#xff0c;包括文档编辑器、表格编辑器和演示文稿编辑器。这些工具…

客户案例|某 SaaS 企业租户敏感数据保护实践

近年来&#xff0c;随着云计算技术的快速发展&#xff0c;软件即服务&#xff08;SaaS&#xff09;在各行业的应用逐渐增多&#xff0c;SaaS 应用给企业数字化发展带来了便捷性、成本效益与可访问性&#xff0c;同时也带来了一系列数据安全风险。作为 SaaS 产品运营服务商&…

韩国锂电池工厂火灾:行业安全警钟再次敲响

三天前&#xff0c;6月24日上午&#xff0c;韩国京畿道华城市一电池厂突发火灾&#xff0c;造成严重人员伤亡&#xff0c;其中包括多名中国籍员工。这一事件不仅令人痛心&#xff0c;更为全球锂电池行业安全敲响了警钟。 事发当天&#xff0c;电池厂内堆放锂电池成品的区域突然…

TypeError: %c requires int or char

踩坑&#xff1a;在用python写脚本查询sql数据时&#xff0c;使用%s来替换sql语句里的变量&#xff0c;结果一直报&#xff0c;而其他sql使用同样的方法正常&#xff0c;最后发现是因为sql语句里有模糊查询 like "%测试%"&#xff0c;这里的%被误以为%s&#xff0c;解…

Mendix 创客访谈录|Mendix开发制造业客户复杂应用的强大实力

本期创客 郑立 Eviden中国低代码服务团队负责人 大家好&#xff0c;我是郑立&#xff0c;目前担任Eviden中国低代码服务团队的负责人&#xff0c;Mendix是Eviden中国在低代码领域的最重要的合作伙伴&#xff0c;目前我们在多个制造业客户中推广和实施Mendix低代码项目&#xff…

[MQTT]Mosquitto的權限管理_使用者/密碼(pwfile)和訪問控制清單(aclfile)

延續Mosquitto的內網連接(intranet)和使用者/密碼權限設置文章&#xff0c;經解讀mosquitto官網文檔&#xff0c;在權限管理部分&#xff0c;除了設置使用者/密碼(pwfile)之外&#xff0c;還有訪問控制清單(Access Control List, aclfile)可以設置。經過測試&#xff0c;同時設…

Linux 中变量的取用与设定

优质博文&#xff1a;IT-BLOG-CN Linux是一个多人多任务的环境&#xff0c;每个人登录系统都能取得一个bash shell&#xff0c;每个人都能够使用bash下达mail这个指令来接收自己的邮箱等等。问题是&#xff0c;bash如何得知你的邮箱是那个文件&#xff1f;这就需要『变量』的帮…

基于Java的宠物领养管理系统【附源码】

摘 要 近些年来&#xff0c;随着科技的飞速发展&#xff0c;互联网的普及逐渐延伸到各行各业中&#xff0c;给人们生活带来了十分的便利&#xff0c;宠物管理系统利用计算机网络实现信息化管理&#xff0c;使整个宠物领养的发展和服务水平有显著提升。 本文拟采用IDEA开发工具…

《分析模式》漫谈07-怎样把一张图从不严谨改到严谨

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 下图是《分析模式》原书第2章的图2.10&#xff0c;里面有一些错误和考虑不周的地方&#xff1a; 2004中译本和2020中译本的翻译如下&#xff1a; 基本上都是照搬&#xff0c;没有改过…

【02-02】SpringMVC基于注解的应用

一、请求处理 1、常用注解 RequestMapping 作用&#xff1a;用来匹配客户端发送的请求&#xff08;用来处理URL映射&#xff0c;将请求映射到处理方法中&#xff09;&#xff0c;可以在类或者方法上使用。 用在类上&#xff0c;可以将请求模块化&#xff0c;避免请求方法中的…

【Java Web】三大域对象

目录 一、域对象概述 二、三大域对象 三、域对象使用相关API 一、域对象概述 一些可用于存储数据和传递数据的对象被称为域对象&#xff0c;根据传递数据范围的不同&#xff0c;我们称之为不同的域&#xff0c;不同的域对象代表不同的域&#xff0c;共享数据的范围也不同。 二、…

【小红书标题打造】规则+底层逻辑解析|辅助工具|爆款必备

前言 大家好&#xff0c;我是一名自媒体工具人&#xff0c;今天不是教大家去自己写标题&#xff08;现在这个时代自己写真没必要&#xff09;而是教大家了解爆款标题的相关知识以及辨别。后面会附赠 安装此文规则生成标题的输出工具。在这个工具发展庞大的时代&#xff0c;如果…

【知识图谱系列】一步步指导:安装与配置JDK和Neo4j的完美搭配

本文将提供详细的步骤&#xff0c;介绍如何下载、安装和配置Java开发工具包&#xff08;JDK&#xff09;以及流行的图形数据库Neo4j。将从选择合适的JDK版本开始&#xff0c;然后是下载和配置环境变量&#xff0c;接着以同样的方式处理Neo4j。最后&#xff0c;会通过一些检查步…

Windows应急响应靶机 - Web3

一、靶机介绍 应急响应靶机训练-Web3 前景需要&#xff1a;小苕在省护值守中&#xff0c;在灵机一动情况下把设备停掉了&#xff0c;甲方问&#xff1a;为什么要停设备&#xff1f;小苕说&#xff1a;我第六感告诉我&#xff0c;这机器可能被黑了。 这是他的服务器&#xff…

YouCompleteMe插件安装方法简述

一、前言 YouCompleteMe是VIM中进行C/C 开发的重要工具&#xff0c;可以极大提升linux下C/C开发效率。 YCM需要高版本的gcc (8.0以上版本&#xff0c;支持C17) 和 vim&#xff08;8.0以上&#xff0c;支持python3.6以上&#xff09; 二、编译gcc_8.3 1. 获取源码 wget https:…