python疑难杂症(10)---Python函数def的定义分类,包括内置函数、外置函数、匿名函数、闭包函数、生成器函数等

news2024/11/26 4:35:09

本部分详细讲解Python函数的定义、常见的函数类型,尤其是特色函数包括内置函数、外置函数、匿名函数、闭包函数、生成器函数等以及用法。后续将对这类函数重点讲解使用方法。

函数定义:

函数是大多数编程语言使用的一个概念,函数是一段具有一定功能程序体,可以被反复多次调用。函数包含以下特征:

1、函数名:用于标识函数的的字符串,并可以通过该函数名调用执行函数,实现其功能,在python中,使用def 开头,后面跟 ( 括号和参数。以:结束
如下:

def  outhello(string1):

    print( f'打印的字符串是:{ string1}')

outhello('python  hello!')

2、参数:输入给函数的值,这个是函数接收外部数据的接口,在函数内部可以使用参数进行操作或计算。

3、函数体:是一段可以执行的代码块。在函数体中可以进行各种操作、计算等。

4、返回值:函数可以返回处理结果,供调用者使用,是函数向外输出处理内容的接口,在python中通过return + 返回内容,结束函数的运行并返回后面的结果。当然函数也可以不返回内容,即return 后面为空。

Python函数类型

Python作为广泛使用的语言,其函数中有许多自己独有的函数类型特性。

自定义函数:

像上面那种就是比较普通的自定义函数,对于重复的功能,通过函数定义,减少代码工作量。

内置函数:

内置函数是Python 提供了可以直接使用,不需要使用import导入模块来装入内存的,如

print():用于将内容输出到标准输出(通常是控制台).

len():用于返回对象的长度或元素个数,例如字符串的字符数、列表的元素个数等.

type():用于返回对象的类型.

int():用于将一个数值或字符串转换为整数.

float():用于将一个数值或字符串转换为浮点数.

str():用于将对象转换为字符串.

list():用于将可迭代对象转换为列表.

tuple():用于将可迭代对象转换为元组.

dict():用于创建字典对象.

set():用于创建集合对象.

range():用于生成一个指定范围的数字序列.

input():用于从用户处获取输入.

内置函数,python有200多个,常用的有70个左右,具体个数因版本而已,越往后越多。

外置函数:

python的外置函数是指需要通过导入模块,才能调用的函数。python语言之所以广泛使用,是因为有着丰富的外置功能模块,每个模块可以实现一个主题的功能,而里面又包含很多函数供调用,例如pandas、numpy、string等

例如模块pandas中包含函数

data.shape            # 行数列数

data.dtypes           # 所有列的数据类型

data['id'].dtype      # 某一列的数据类型

data.ndim             # 数据维度

data.index            # 行索引

data.columns          # 列索引

data.values           # 对象值

其中dada为pd.DataFrame的数据类型。

又如:

import string

type(string) 

str_func = [i for i in dir(string)  if not i.startswith('_')]

print(str_func)

print(len(str_func))

输出:['Formatter', 'Template', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']

12

string模块中共有12个外置函数。

匿名函数

匿名函数是 lambda 表达式,是用于一次性的简单函数。例如:

lambda arg: expression

,其中, arg是函数的参数,可以是一个或多个;expression是函数的返回值,通常是一个简单的表达式,调用时,作为一个整体,首先将参数arg带入expression表达式,计算结果并返回。

num1 = lambda x, y: x * y

result1 = num1 (3, 5)

print(result1)  # 输出 15

Lambda函数可以用于对列表中的每个元素进行操作:

testlist = [1, 2, 3,]

squlist = list(map(lambda x: x**2, testlist))

print(squlist)  # 输出:[1, 4, 9]

Lambda函数通常与其他函数(例如map()、filter()等)一起使用,以提供简洁的操作,减少代码量。

闭包函数

闭包函数是指在一个函数内部定义了另一个函数,并且内部函数可以访问外部函数的变量。这种函数形式可以用来创建一些特定的函数,例如函数工厂或者装饰器。

def aaa(x):

    def bbb(y):

        return x * y

    return bbb

ride1= aaa(6)

result = ride1(9)

print (result)

# 输出54

此处是闭包函数,也是因为函数返回值不只是具体内容,也可以是函数的名称,此处就是返回内容是函数的名称,后面依照函数格式调用。这个以后在详细说明。

生成器函数

生成器函数使用 yield 关键字来定义,可以通过迭代器的方式逐步生成结果,而不是一次性生成所有结果。生成器函数不是立马生成所有数据,而是到需要数据的时候在生成,节省内存,能够记录状态 并通过next()函数,访问下一个状态。具备可迭代特性, 函数中包含yield语句,这个函数的执行结构就是“生成器”。

例如:

def fibonacci():

    a, b = 0, 1

    while True:

        yield a

        a, b = b, a + b

fib = fibonacci()

print(next(fib))  # 输出 0

print(next(fib))  # 输出 1

print(next(fib))  # 输出 1

这些是 Python 中常见的函数类型,每种类型都有不同的特点和用途。

欢迎收藏、点赞、和转发、你的阅读是我的前进动力。

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

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

相关文章

题目 2610: 第十二届省赛真题-杨辉三角形

题目描述: 下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下 数列: 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ... 给定一个正整数 N,请你输出数列中第一次出现 N 是在第几…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的海洋动物检测系统(Python+PySide6界面+训练代码)

摘要:开发海洋动物检测系统对于海洋生态环境监控具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个海洋动物检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5,展示了不同模…

Shell常用脚本:hadoop集群启动、停止、重启脚本

脚本内容以我搭建的hadoop集群为例,你们自用的时候自行根据你们的情况进行修改即可 hadoop-cluster-manager.sh #!/bin/bash # 1. 调用此脚本前,请使用ssh-keygen -t rsa、ssh-copy-id -f 目标机器这两个命令使得目标机器是免密登录的 # 2. ssh远程执行…

在 Rust 中使用 Serde 处理json

在 Rust 中使用 Serde 处理json 在本文中,我们将讨论 Serde、如何在 Rust 应用程序中使用它以及一些更高级的提示和技巧。 什么是serde? Rust中的serde crate用于高效地序列化和反序列化多种格式的数据。它通过提供两个可以使用的traits来实现这一点&a…

【机器学习300问】33、决策树是如何进行特征选择的?

还记得我在【机器学习300问】的第28问里谈到的,看决策树的定义不就是if-else语句吗怎么被称为机器学习模型?其中最重要的两点就是决策树算法要能够自己回答下面两问题: 该选哪些特征 特征选择该选哪个阈值 阈值确定 今天这篇文章承接上文&…

因为manifest.json文件引起的 android-chrome-192x192.png 404 (Not Found)

H5项目打包之后,总是有这个报错,有时候还有别的icon也找不见 一通调查之后,发现是因为引入了一个vue插件 这个插件引入之后,webpack打包的时候就会自动在dist文件夹中产生一个manifest.json文件这个文件里面主要就是一些icon地址的…

Hadoop学习3:问题解决

文章目录 问题解决1. ERROR: but there is no HDFS_NAMENODE_USER defined2. JAVA_HOME is not set and could not be found.3. Hadoop-DFS页面访问不了4. namenode格式化失败,或者dfs页面打开失败5. ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Ab…

【数据挖掘】实验1:R入门(内含详细R和RStudio安装教程)

实验1:R入门 一:实验目的与要求 1:根据上课PPT内容,掌握课堂知识并进行代码练习操作,提供练习过程和结果。 2:可COPY代码运行结果直接提交,如涉及到输出图等可截图。 二:实验内容 …

3D Gaussian Splatting for Real-Time Radiance Field Rendering(慢慢啃,还是挺复杂的)

三个关键要素 从相机配准的过程中得到的稀疏点云开始,使用3D Gaussian表示场景; 3D Gaussian: 是连续体积辐射场能够防止不必要的空空间优化。对 3D Gaussion进行交叉优化和密度控制: 优化各向异性血方差对场景精确表示。使用快速可视感知渲染算法来进行快速的训练…

InnoDB和MyISAM存储引擎

InnoDB mysql默认存储引擎 支持事务,行级锁(并发量大),外键约束,容量大,支持缓存,支撑主键自增, 全文检索,不存储表的总行数,需要sql逐行统计 MyISAM 不…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:RemoteWindow)

远程控制窗口组件,可以通过此组件控制应用窗口,提供启动退出过程中控件动画和应用窗口联动动画的能力。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 该组件为系统接口。…

k8s+zabbix

一,环境: 1),k8s部署,master和node节点都部署成功 二,部署: 1),安装python3(资源中有) wget https://www.python.org/ftp/python/3.7.4/Python-…

【Mysql】事务与索引

目录 MySQL事务 事务的特性 并发事务的问题? 事务隔离级别? MySQL索引 数据结构 索引类型 聚簇索引与非聚簇索引 聚集索引的优点 聚集索引的缺点 非聚集索引的优点 非聚集索引的缺点 非聚集索引一定回表查询吗(覆盖索引)? 覆盖索引 联合索…

传输层协议介绍(tcp,udp),可靠性和不可靠性

目录 传输层协议 介绍 tcp协议 介绍 面向连接 可靠性 面向字节流 udp协议 介绍 无连接 不可靠 面向数据报 可靠和不可靠 可靠 不可靠 传输层协议 介绍 传输层是计算机网络体系结构中的第四层,它负责在网络中的不同主机之间提供端到端的数据传输 传输…

Web 常用的 扩展开发框架

当谈到提升浏览器功能和用户体验时,浏览器扩展成了一股强大的力量,备受用户青睐。在众多的Web扩展开发框架中,WXT和Plasmo凭借其丰富的工具和特性,以及简化的开发流程,成为开发者们的首选。在本文中,我们将…

基于 Jenkins 搭建一套 CI/CD 系统

一、CI/CD环境介绍 本次要实现如下效果,开发人员完成功能开发并提交代码到gitlab仓库,jenkins自动完成拉取代码、编译构建、代码扫描(sonarqube)、打包,再自动化完成部署到Tomcat服务器提供访问。 环境准备三台Centos…

jupyter 修改文件保存位置 步骤

一、找到配置文件位置 打开Anaconda Prompt,输入: jupyter notebook --generate-config 根据得到的路径,以记事本方式打开配置文件 二、修改路径 在文件中输入: c.NotebookApp.notebook_dir E:\\deepLearning\\Jupyter_files…

离线下载的pytorch/torchvision/torchaudio

链接:https://download.pytorch.org/whl/torch_stable.html 下载pytorch-torchvision-torchaudio等一系列一定要版本匹配,并且如果是在gpu上跑的话,一定要都是cu版本 参考链接:https://blog.csdn.net/AiTanXiing/article/detail…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的输电线路设备检测系统(深度学习+UI界面+Python代码+训练数据集)

摘要:本篇博客详细介绍了如何运用深度学习构建一个先进的输电线路设备检测系统,并附上了完整的实现代码。该系统利用了最新的YOLOv8算法作为其核心,同时也对之前版本的YOLOv7、YOLOv6、YOLOv5进行了性能比较,包括但不限于mAP&…

如何解决由触发器导致 MySQL 内存溢出?

由触发器导致得 OOM 案例分析过程和解决方式。 作者:龚唐杰,爱可生 DBA 团队成员,主要负责 MySQL 技术支持,擅长 MySQL、PG、国产数据库。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编…