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

news2024/11/16 23:53:12

在这里插入图片描述

四、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/1864704.html

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

相关文章

“基于下垂的多电源分布式控制系统设计”,高分资源,匠心制作,查重5%,下载可用。强烈推荐!!!

“基于下垂的多电源分布式控制系统设计”,高分资源,匠心制作,查重5%,下载可用。强烈推荐!!! 摘要 社会的进步与发展,人们对于能源的需求和依赖越来越大。与此同时,国家…

仓颉编程语言 -- 初识(一)

官网 文档 原生智能化 内嵌AgentDSL的编程框架,自然语言&编程语言有机融合;多Agent协同,简化符号表达,模式自由组合,支持各类智能应用开发。 天生全场景 轻量化可缩放运行时,模块化分层设计&#xf…

python selenium 下载

查看浏览器版本 下载地址: 新版本下载地址 https://googlechromelabs.github.io/chrome-for-testing/ 历史版本也可以用这个下载地址 http://chromedriver.storage.googleapis.com/index.html 找到对应的版本 126.0.xxx 下载

Python自动化聊天机器人库之wechaty使用详解

概要 随着社交媒体和即时通讯工具的普及,自动化聊天机器人的需求日益增加。Wechaty 是一个开源的聊天机器人框架,支持多种聊天平台,包括微信、WhatsApp、Telegram 等。它旨在帮助开发者快速构建和部署聊天机器人,具有强大的功能和易用的接口。本文将详细介绍 Wechaty 库,…

ISCC2024--pwn

ISCC2024 练武题 chaos 考点:基础UAF 分析 1.首先将附件放入IDA查看主函数功能,进入菜单函数: 注意到选项5不太一样,跟进该功能模块的函数查看: 分析得到该功能存在UAF漏洞,system(/bin/sh) 执行的前…

告别手机废片,这几款APP让你随手出大片

想象一下,你站在壮丽的风景前,满怀期待地按下手机相机的快门,但得到的照片却总与眼前美景有所差距。 是不是觉得手机的原生相机有时候并不那么“给力”? 今天,我们就来一起探讨一下手机原生相机的不足之处,…

AI智能体 | 扣子Coze 工作流中如何嵌入代码,看这一篇就够了

Coze的工作流中除了能嵌入大模型,插件,图像流,其他工作流外,还能嵌入代码。嵌入代码的好处是对一些复杂的返回结果进行二次处理。 Coze的代码支持js和python两种语言。这次用python来做演示介绍 在节点中选择代码 弹出对话框如下…

Ollama:一个在本地部署、运行LLM大型语言模型的工具

Ollama部署、运行大型语言模型 概述 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计的工具。 官方网站:https://ollama.com/ Github:https://github.com/ollama/ollama 安装 Ollama支持macOS、Linux和Win…

汇凯金业:预测黄金现货涨跌趋势的关键方法

在金融市场中,黄金现货作为一种重要的避险资产,价格波动受到全球经济、货币政策、市场情绪等多重因素的影响。要有效预测黄金现货的涨跌趋势,不仅需深刻理解这些因素,还需掌握一系列的分析技巧。本文将详细介绍一些关键的分析方法…

【日记】希望文竹长得越来越好吧(856 字)

正文 为什么昨天给老师提早说了今天上课…… 今天都要忙死了。不论上午下午都手忙脚乱。上午之前的存量客户来开新账户,流程卡在客户经理尽调那里。恰好那个客户经理还是部门主管,我们没一个人敢催。向副行长汇报情况,又跟客户说。客户跟他们…

RK3588 Android13 TvSetting 中增加 WebView 切换菜单

前言 电视产品,客户要求在设置中设备偏好设置子菜单下增加一个 WebView切换菜单,一开始不知道怎么下手,后来想起来在设置开发者选项里有一个类似的菜单, 去把实现逻辑搞出来应该就ok。 效果图 TvSetting 部分修改文件清单 packages/apps/TvSettings/Settings/res/values…

秋招突击——6/24——复习{完全背包问题——买书,状态转换机——股票买卖V}——新作{两数相除,LRU缓存实现}

文章目录 引言复习完全背包问题——买书个人实现 状态转换机——股票买卖V个人实现参考实现 新作两数相除个人实现 新作LRU缓存实现个人实现unordered_map相关priority_queue相关 参考实现自己复现 总结 引言 今天知道拼多多挂掉了,难受,那实习就是颗粒无…

申瓯通信在线录音管理系统任意文件读取漏洞复现

简介 申瓯通信设备有限公司在线录音管理系统 download 接口处任意文件读取漏洞,未经身份验证攻击者可通过该漏洞读取系统重要文件、数据库配置文件等等,导致网站处于极度不安全状态。 漏洞复现 FOFA语法: title="在线录音管理系统" 访问界面如下所示: POC: /m…

推荐一本RMS包作者写的我正在追读的书《Regression Modeling Strategies》

熟悉我的粉丝都清楚,我很少推荐书,这次推荐这本书是我目前正在读的,这是本老书了,关于回归模型的,我觉得写的很好。 写这本书的就是RMS包的作者,这是他早些年写的书,我们可以结合他写的书来加深…

mechanize - 自动化与HTTP web服务器的交互操作

1、前言 随着自动化测试的普及与落地推广,出现了众多知名的自动化测试工具,如Selenium 、Robot Framework、Playwright等。本文将介绍一款在Python环境下的mechanize库,这个库能够模拟浏览器行为,支持发送HTTP请求、解析HTML页面和…

Day13—大语言模型

定义 大语言模型(Large Language Models)是一种基于深度学习的自然语言处理(NLP)模型,用于处理和生成人类语言文本。 一、认识NLP 什么是NLP ​ NLP(Natural Language Processing)&#xff0…

vue3+crypto-js插件实现对密码加密后传给后端

最近在做项目的过程中又遇到了一个新的问题,在实现后端管理系统的个人信息页面中,涉及到修改密码的功能,刚开始我直接通过传参的方式将修改的密码传入给后端,可是后端说需要将原密码、新密码以及确认密码都进行加密处理&#xff0…

高铝粉煤灰提取氧化铝可实现资源最大化利用 我国政府重视程度高

高铝粉煤灰提取氧化铝可实现资源最大化利用 我国政府重视程度高 高铝粉煤灰,是指氧化铝含量大于37%的粉煤灰,高铝粉煤灰提取氧化铝,是以高铝粉煤灰为原料,提取氧化铝的技术,可以提高我国氧化铝供应能力,实现…

C语言的学习发展路线(都是干货)

哈喽,大家好呀~我又回来了,前期比较忙,没有时间来更文,现在给大家推荐了一个C语言的学习路线,供大家一起学习啦! 1. 环境搭建与工具篇 选择编译器:常用的编译器有gcc、Clang、Visual Studio等。…

Linux rpm包管理

rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager (RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志&am…