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

news2024/11/14 11:38:00

在这里插入图片描述

四、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, John

kwargs = {"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 + b

result = add(3, 4)
print(result)  # 输出:7

def 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 = 5
    print(local_var)  # 可以访问local_var

my_function()  # 输出:5
print(local_var)  # 错误:NameError: name 'local_var' is not defined
python1. 全局作用域(Global Scope):在函数外部定义的变量拥有全局作用域,整个文件内都可以访问,除非在函数内部被重新定义为局部变量。global_var = 10

def access_global():
    print(global_var)

access_global()  # 输出:10

def modify_global():
    global global_var  # 使用global关键字声明使用全局变量
    global_var = 20

modify_global()
print(global_var)  # 输出:20
python1. 内置作用域(Built-in Scope):包含Python内置的名称(如len󠁪, range󠁪, str󠁪等),这些名称在任何地方都可以直接访问。2. 非局部作用域(Non-local Scope/Enclosing Scope):当一个函数嵌套在另一个函数内时,外层函数内的变量对内层函数而言是非局部变量。使用nonlocal󠁪关键字可以在内层函数中修改外层函数的变量。def outer():
    enclosed_var = 100
    
    def inner():
        nonlocal enclosed_var
        enclosed_var = 200
        print(enclosed_var)
    
    inner()
    print(enclosed_var)  # 输出也会是200,因为inner函数修改了enclosed_var

outer()

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 + b

def subtract(a, b):
    return a - b
python导入模块: 使用import󠁪语句可以导入模块,然后调用其中的函数。导入示例:import math_operations

result = math_operations.add(5, 3)
print(result)  # 输出:8

result = math_operations.subtract(10, 4)
print(result)  # 输出:6
python从模块导入特定函数: 使用from ... import ...󠁪语句可以直接导入模块中的特定函数,而无需每次调用时都加上模块名前缀。导入特定函数示例:from math_operations import add, subtract

result = add(7, 2)
print(result)  # 输出:9

result = subtract(15, 5)
print(result)  # 输出:10
python使用as关键字给模块或函数起别名: 可以使用as󠁪关键字给导入的模块或函数起别名,简化调用过程。别名示例:import math_operations as mo

result = mo.add(8, 2)
print(result)  # 输出:10

from math_operations import add as a, subtract as s

result = a(9, 3)
print(result)  # 输出:12

result = s(18, 8)
print(result)  # 输出:10

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

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

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

相关文章

JavaScript的学习之图片的切换

目录 一、寻找素材 二、编写简单的静态html页面 代码示例 效果展示 三、JS功能的实现 JS代码 完整代码 效果展示 一、寻找素材 随便去网上找几张图片素材 二、编写简单的静态html页面 代码示例 <!doctype html> <html><head><meta charset"…

【SpringBoot】SpringBoot使用mail实现登录邮箱验证

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、前期准备 1 开启邮箱服务 2 SpringBoot导入依赖 3 创建application.yml配置文件 4 创建数据库文件 5 配置redis服务 二、验证邮件发送功能 三、注册功能实现邮箱验证 1 创建User实体类 2 创建UserPa…

基于SpringBoot+vue闲置物品交易网站详细设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

ueditor解决无法抓取远程背景图片问题的方法(php)

背景 laravel后台经常有用到编辑器的地方&#xff0c;Dcat使用的一般都是UEditor编辑器。最近项目经理在秀米排版以后&#xff0c;将内容复制到UEditor编辑器保存后发现&#xff0c; 在网站页面中发现图片竟然展示失败。经过浏览器控制台发现&#xff0c;图片的域名还是秀米的…

LICEcap-开源GIF 屏幕录制工具

LICEcap-开源GIF 屏幕录制工具 开源GIF 屏幕录制工具 下载可以访问&#xff1a;https://www.cockos.com/licecap/ 点击Record&#xff0c;开始录制 点击Stop&#xff0c;停止录制 点击Record&#xff0c;进入该页面 display in animation&#xff08;在动画中显示&#xff09; …

【Python机器学习】自动化特征选择——单变量统计

添加更多特征会使所有的模型变得更加复杂&#xff0c;从而增大过拟合的可能性。 在添加新特征或处理一般的高位数据集时&#xff0c;最好将特征的数量减少到只包含最有用的那些特征&#xff0c;并删除其余特征&#xff0c;这样会得到泛化能力更好、更简单的模型。 对于如何判…

秋招倒计时?到底需要准备到什么程度?

秋招倒计时&#xff1f;需要准备到什么程度&#xff1f; 秋招&#xff0c;面向全国的毕业生&#xff0c;招聘的激烈程度可想而知&#xff01;按照往年时间&#xff0c;秋招通常从八月初开始&#xff0c;九月黄金期&#xff0c;十月中后期。距今刚好差不多60天&#xff0c;时间其…

堡垒机软件详细定义以及部分厂商汇总

随着大家对网络安全的重视&#xff0c;越来越多的企业开始采购堡垒机。堡垒机可以分为硬件堡垒机、软件堡垒机、软硬一体机。今天我们就来聊聊堡垒机软件详细定义以及部分厂商汇总。 堡垒机软件详细定义 堡垒机软件&#xff0c;又称为运维安全审计系统&#xff0c;其主要功能在…

算子级血缘和血缘查询管理

数据链路 血缘关系 应用场景&#xff1a;数据资产&#xff0c;数据开发&#xff0c;数据治理&#xff0c;数据安全等等 &#xff08;绿色箭头上面是数据治理&#xff09; 场景&#xff1a; 数据链路的高效盘点与理解 数仓模型的长效优化机制 风险影响的及时全面分析 重复…

Linux通用系统高危漏洞(CVE-2024-1086)修复案例

一、漏洞描述 2024年3月28日&#xff0c; Linux kernel权限提升漏洞&#xff08;CVE-2024-1086&#xff09;的PoC/EXP在互联网上公开&#xff0c;该漏洞的CVSS评分为7.8&#xff0c;目前漏洞细节已经公开披露&#xff0c;美国网络安全与基础设施安全局&#xff08;CISA&#x…

npm install报错Maximum call stack size exceeded

npm 报错 方案&#xff1a; npm cache clean --force npm install

【专业性强】地球科学SCI期刊,中科院2区,学术影响力大

一、期刊名称 GIScience & Remote Sensing 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;地球科学 影响因子&#xff1a;6.7 中科院分区&#xff1a;2区 三、期刊征稿范围 GIScience & Remote Sensing是一本完全开放获取的期刊&#xff0c;发表…

Java基础知识整理笔记

目录 1.关于Java概念 1.1 谈谈对Java的理解&#xff1f; 1.2 Java的基础数据类型&#xff1f; 1.3 关于面向对象的设计理解 1.3.1 面向对象的特性有哪些&#xff1f; 1.3.2 重写和重载的区别&#xff1f; 1.3.3 面向对象的设计原则是什么&#xff1f; 1.4 关于变量与方…

约课健身管理系统小程序源码

健身达人的智能助手 一款基于FastAdminThinkPHPUniapp开发的米扬约课健身管理系统&#xff0c;应用于健身房&#xff0c;健身工作室&#xff0c;运动会所&#xff0c;运动场馆&#xff0c;瑜伽馆&#xff0c;拳馆等泛健身行业的场馆中。米扬约课健身致力于为各种健身场馆打造真…

数学类-课程资料推荐-中科大教师首页

http://staff.ustc.edu.cn/~rui/cn/rui-course.html 数学分析讲义&#xff08;第一册&#xff09; (ustc.edu.cn)

C# 入门—基本语法

一、数据类型 C# 语言中内置了一些基本的数据类型&#xff0c;数据类型用来指定程序中变量可以存储的数据的类型&#xff0c;C# 中的数据类型可以大致分为三类&#xff1a; 值类型&#xff08;Value types&#xff09;&#xff1b;引用类型&#xff08;References types&…

Windows 电脑类别怎么区分?不同类别区分总结

电脑类别 Windows 电脑的类别有哪些&#xff1f;我们可以大致分为这三类&#xff1a;CopilotPC、AI PC、普通 PC。下面就来看看这些电脑类别的区别。 普通 PC 普通 PC 就是指那些标准的台式电脑或者笔记本电脑&#xff0c;它们是由中央处理器&#xff08;CPU&#xff09;以及…

期货日内交易口诀

1、向下差价法 前提&#xff1a;要判断准确后市是向下行情走势。被套后&#xff0c;等反弹到一定的高度&#xff0c;估计见短线高点了&#xff0c;先卖出&#xff0c;待其下跌一段后再买回。通过这样不断地高卖低买来降低成本&#xff0c;最后等总资金补回了亏损&#xff0c;完…

前端写代码真的有必要封装太好么?

前言 封装、代码复用、设计模式…… 这些都是方法&#xff0c;业务才是目的。技术始终是为业务服务的。能够满足业务需求&#xff0c;并且用起来舒服的&#xff0c;都是好方法。 不存在一套适用于所有项目的最佳代码组织方法&#xff0c;你需要结合业务&#xff0c;去不断地…

基于PHP+MySQL组合开发家政预约服务小程序源码系统 带完整的安装代码包以及搭建教程

系统概述 在当今数字化时代&#xff0c;家政服务行业也逐渐融入了科技的力量。为了满足市场需求&#xff0c;我们开发了一款基于 PHPMySQL 组合的家政预约服务小程序源码系统。该系统不仅提供了便捷的家政服务预约功能&#xff0c;还具备完整的安装代码包和详细的搭建教程&…