python基础07——函数,想重复使用自己的代码就写个函数吧

news2025/2/28 19:58:04

目录

  • 1 函数定义与调用
    • 1.1 自定义模块函数
    • 1.2 函数的返回值 return
  • 2 参数的传递方式
    • 2.1 位置参数
    • 2.2 默认值参数
    • 2.3 关键参数
    • 2.4 可变长度参数(收集和分配参数)
      • 2.4.1 收集位置参数
      • 2.4.2 分配位置参数,函数参数的序列解包
      • 2.4.3 收集关键字参数
      • 2.4.4 分配关键字参数
  • 3 变量的作用域
    • 3.1 局部变量
    • 3.2 全局变量
    • 3.3 global:可以将局部变量变成全局变量
  • 4 匿名函数 Lambda
    • 4.1 lambda函数和filter函数连用
    • 4.2 lambda函数和map函数连用
    • 4.2 应用场景
  • 5 递归
  • 6 内置函数
    • 6.1 数据类型相关
    • 6.2 逻辑判断相关
      • 6.2.1 all()函数
      • 6.2.2 any()函数
    • 6.3 数学相关
  • 7 模块函数
    • 7.1 导入模块
    • 7.2 random模块
    • 7.3 math模块

1 函数定义与调用

  • 函数定义:def return 语句,形参
  • 函数调用:实参
    • 实参是实际占用内存地址的实实在在的参数,而形参只是意义上的一种参数,在定义的时候是不占内存地址的
def 函数名(参数1,参数2...:
    代码块(函数要实现的功能)
    return 返回值
#其中,函数的参数和返回值不是必须要写的,如果一个函数没有reutrn语句(也就是没有返回值),它实际上有一个隐式return语句,返回值为None,类型为'NoneType'。
  1. 函数没有给定参数和返回值
    print函数打印出来的东西只是给你看一下,是nonetype没有数据类型,没有输出,结果不能参与运算
  • 案例一
    在这里插入图片描述
  • 案例二
def PR():
    print("===================")
    print("人生苦短,我学Python")
    print("===================")

在这里插入图片描述

  1. 函数给定参数,没有给返回值
    在这里插入图片描述

1.1 自定义模块函数

  1. 编写想要封装进模块的函数
  2. 把这些函数放到一个空的ipynb文件里
  3. 重命名(给文件取名),另存为.py格式
  4. 查看Python的搜索路,把 .py文件放到任意一个搜索路径的文件夹里(只需要放一个可以)
import sys
sys.path   #查看Python的搜索路径
  1. 导入模块,通过模块调用里面的函数

1.2 函数的返回值 return

  1. print函数打印出来的东西只是给你看一下,是nonetype没有数据类型,没有输出,结果不能参与运算
  2. 将函数处理结果送出函数外部,可以进行接收
  3. 当函数运行到return,函数终止
  4. 返回多个值, 多个变量加逗号分隔

在这里插入图片描述

2 参数的传递方式

2.1 位置参数

按照位置传参,位置参数

在这里插入图片描述

2.2 默认值参数

函数定义阶段直接赋值了的形参
在这里插入图片描述

如果调用的时候为参数指定值,则指定值覆盖默认值,按照指定值进行计算
在这里插入图片描述

2.3 关键参数

函数调用阶段按照形参名赋值的实参
在这里插入图片描述
注意:当位置参数和关键字参数混用,位置参数在前,关键字参数在后

在这里插入图片描述

2.4 可变长度参数(收集和分配参数)

就是说只指定一个参数,然后允许调用函数时传入任意数量的参数。

  • 在定义的时候,一颗星表示收集位置参数,两颗星表示收集关键字参数
  • 在调用的时候,一颗星表示分配位置参数,两颗星表示分配关键字参数

2.4.1 收集位置参数

*args 把多余的位置参数以元组的形式储存
在这里插入图片描述

2.4.2 分配位置参数,函数参数的序列解包

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.4.3 收集关键字参数

**args 把多余的关键字参数以字典的形式存储
在这里插入图片描述

2.4.4 分配关键字参数

在这里插入图片描述

3 变量的作用域

3.1 局部变量

  • 函数内部的变量叫做局部变量, 局部变量只能在函数内部被使用, 用完就释放

在这里插入图片描述

  • 当局部变量和全局变量名字相同时, 自定义函数内优先使用局部变量
    在这里插入图片描述

  • 自定义函数内部有局部变量的用局部变量,没有局部变量的,用全局变量
    在这里插入图片描述

3.2 全局变量

  • 在自定义函数外边定义的变量叫做全局变量
  • 全局变量能在函数的任意位置被使用

3.3 global:可以将局部变量变成全局变量

  • 可以使用global关键字在函数内部定义一个全局变量, 全局变量能在函数的任意位置被使用
  • 如果在自定义函数中修改全局变量,那么就需要使用global进行声明,否则出错

4 匿名函数 Lambda

Lambda函数是自定义函数的一种,专指用关键字” lambda”定义的无名短函数。

a = lambda x,y,z: x+y+z
a(1,2,3)
#out:6

在这里插入图片描述

4.1 lambda函数和filter函数连用

ilter()过滤后,返回的是结果为真(即不等于0)的对象

'''
filter函数:

 - filter()有两个参数。第一个参数可以是一个函数,也可以是一个None。
	
	 - 如果是第一个参数是函数的话,则将第二个迭代数据里的每一个元素作为函数的参数进行计算,把返回True的值筛选出来;
	 - 如果第一个参数为None,则直接将第二个参数中为True的值筛选出来。
ilter()过滤后,返回的是结果为真(即不等于0)的对象
'''
temp = filter(None,[1,2,0,False,True])

list(temp)  #filter保留结果为真的原数据,筛除结果为假的原数据
#[1, 2, True]

案例:

#写一个筛选奇数的过滤器
def is_odd(n):
    return n%2
list(filter(is_odd,range(10)))

#使用lambda简化上述函数
list(filter(lambda n:n%2,range(10)))

4.2 lambda函数和map函数连用

map()遍历,返回的是计算结果

'''
map:映射
map()也有两个参数,仍然一个是函数,一个是可迭代序列,将序列的每一个个元素作为函数的参数进行运算加工,直到可迭代序列每个元素加工完毕,返回所有加工后的元素构成的新序列。
map()遍历,返回的是计算结果
'''
[*map(lambda x:x%2,range(10))]
#out: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

4.2 应用场景

  1. python编写一些程序的脚本时,使用lambda就可以省下来定义函数的过程。比如写一个简单的脚本管理服务器,就没有必要定义函数,再去调用它。直接使用lambda函数,可以使程序更加简明。
  2. 一些只需要调用一两次的函数,就没有必要为了想个合适的函数名字而费精力了,直接使用lambda函数就可以省去取名的过程。
  3. 阅读普通函数,通常需要跳到开头def定义的位置,使用lambda函数可以省去这样的步骤。

5 递归

函数自己调用自己,注意递归停止条件

#累加
def add_sum(n):
    if n == 1:
        return 1
    else:
        return n+add_sum(n-1)
add_sum(10)
#out: 55

6 内置函数

可以直接用函数名调用

6.1 数据类型相关

int() , bool() , float() , str() , list() , set() , tuple() ,dict() ,type()

在这里插入图片描述

6.2 逻辑判断相关

6.2.1 all()函数

如果bool(x)对于可迭代的所有值x为True,则返回True。如果iterable为空,则返回True
在这里插入图片描述

6.2.2 any()函数

如果bool(x)对于可迭代的任何x为True,则返回True。如果iterable为空,则返回False。
在这里插入图片描述

6.3 数学相关

求和:sum()
求绝对值:abs()
求最小值:min()
求最大值:max()
求长度:len()
生成随机数:range(),
求m的n次幂:pow(m,n)
四舍五入:round()【*.5的时候,返回距离原数据最近的偶数,精度可以取负值:round(156.433,-1)】
求商和余数: divmod()
zip函数:将等长的列表或元组组合成字典
在这里插入图片描述

7 模块函数

通过模块名进行调用,如math.sin()等 (前提是先导入(import)第三方模块)

7.1 导入模块

  1. import math #第一种导入模块的方式
  2. import math as mt #第二种导入模块的方式 最常用的
  3. from math import sin #第三种导入模块的方式

7.2 random模块

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

7.3 math模块

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

腾讯云GPU云服务器在选择实例配置时应该注意哪些事项?

腾讯云异构计算服务器搭载GPU、FPGA等异构硬件,具有实时高速的并行计算和浮点计算能力,适合于深度学习、科学计算、视频编解码和图形工作站等高性能应用,下面分享腾讯云NVIDIA GPU云服务器配置CPU内存性能注意事项: NVIDIA GPU云…

26、Stream流式计算,链式编程

Stream流式计算,链式编程 什么是stream流式计算? 大数据包括(存储计算) 集合,mysql这些是用来存储的,而计算是用stream流式的 题目案例:只用一行代码,完成计算这些操作 操作&…

软件工程师备考1-2章(续)

一:差错控制 (1)奇偶检验 什么意思呢? 如果我们用 奇校验,就是保证传输过来的数据中的1是奇数,如果不是奇数那么说明传输错误。 (所以会增加一位,保证正确的数据的总的1一定是奇数) (2)海明码 什么是海明距离? 两个码字,例如 0 1 0 0 和 0 0 1 0 可以看到这…

java的Excel导出方式总结

一、使用hutool导出excel 1.1 hutool介绍 hutool功能很强大,http请求到json处理、excel的导入导出、定时任务、IO、缓存、数据库操作等都提供了简单而方便的api供我们使用,好处是再也不用担心自己去整理常用的工具类了,同时也支持按需引入【但…

怎样在PDF上直接编辑文字?这几种编辑方法需要掌握

怎么做才能够直接在PDF文件上编辑文字呢?对PDF文件大家在工作中是经常使用的,相信大家也都亲身体验过,那就是经常会看见文件中有错误的地方,可能只是一个错别字,或者是图片错误,但我们也不得不改&#xff0…

2023年前端开发趋势未来可期

☆ 对于很多质疑,很多不解,本文将从 △ 目前企业内前端开发职业的占比; △ 目前业内开发语言的受欢迎程度; △ 近期社区问答活跃度; 等维度来说明目前前端这个职业的所处位置。 ☆ 还有强硬的干货,通过深入…

MQTT 协议的基本概念

目录 1、MQTT 介绍 2、MQTT 发布-订阅模式 (1)Broker 可拓展 (2)Broker 消息过滤 (3)MQTT 的主要特征是什么? (4)MQTT 和消息队列的区别 3、MQTT 客户端、 Broker…

6-TRITC 四甲基罗丹明-6-异硫氰酸 CAS 80724-20-5

产品名称:6-TRITC 四甲基罗丹明-6-异硫氰酸 英文名称:6-TRITC [Tetramethylrhodamine-6-isothiocyanate] CAS:80724-20-5 结构式: Ex (nm) 544 Em (nm) 570 分子量 479.98 溶剂 DMSO 存储条件 在零下15度以下保存, 避免光…

使用Idea新建Play项目sbt构建失败,提示scala-xml依赖冲突

最近学习scala和paly,使用idea模板创建项目后,项目构建时就发现报错了,处理了很久,记录一下。 错误日志: [error] (update) found version conflict(s) in library dependencies; some are suspected to be binary incompatible: [error] […

协程原理与设计

什么是M:N协程?为什么要支持M:N协程?如何设计M:N协程?tRPC-Cpp引入了公司开源组件Flare/fiber作为底层库,本文多角度分析梳理了M:N协程的关键原理和特性。1 常见线程模型的问题 在高并发编程场景,如互联网后台类业务中…

尚医通 (十九) --------- 数据字典导出与导入

目录一、数据字典导出1. 导出接口封装2. 在 service-cmn 模块添加 service 方法3. 在 service-cmn 模块添加 controller 方法4. 测试5. 导出前端实现二、数据字典导入1. 导入接口封装2. 导入前端实现一、数据字典导出 1. 导出接口封装 A、在 model 模块添加导出实体 在 mode…

【论文解析】Deep Generative Models on 3D Representations: A Survey

文章目录内容组织结构3 FUNDAMENTALS3.1 Deep Generative ModelsGenerative Adversarial Networks.Variational AutoencodersNormalizing Flows.Diffusion ModelsEnergy-based model.3.2 3D RepresentationsVoxel gridsPoint cloudsMeshesNeural fieldsHybrid representation.4…

读《高性能MySQL》笔记---索引

索引是存储引擎用于快速找到记录的的一种数据结构。 索引的优点 索引大大减少服务器需要扫描的数据量。索引帮助服务器避免排序和临时表。索引将随机IO变为顺序IO。 说明: 顺序IO:是指读写操作的访问地址连续。在顺序IO访问中,HDD所需的磁…

生产环境日志还用notepad++?难怪定位慢,UltraEdit了解一下!

最近这两天运营部门反馈有会员的会员卡开卡时间与相关页面显示的开卡时间不一致,需要定位确定哪个时间是准确的。对于线上数据异常问题一定要谨慎处理,因为很有可能会是用户的某些非常规操作导致部分场景漏测。 对于这种数据异常的业务问题&#xff…

顺序存储二叉数(Java)

1、顺序存储二叉数 从存储角度来看,我们之前讲的树在存储结构上不是顺序存储的,都是非线性的存储结构,所以我们可以从数组的角度来分析,数组和树可以相互转换,数组可以转换成树,树也可以转换成数组&#x…

吗咿呀嘿-用js来搞个简单的人脸识别

缘起 “蚂蚁呀嘿,蚂蚁呀呼,蚂蚁呀哈” 相信最近好多人的朋友圈或者抖音都被类似视频刷过屏! 类似的效果最早是在2020年初,那个时候大家应该还都记得,几乎所有的人都因为疫情原因被迫线上办公! 工作当然离不…

mybatisPlus

第十一章:Mybatis_plus 第1节:简介 本章节主要介绍mybatisPlus是mybatis的增强工具,只做增强不做改变,不会对mybatis产生任何影响。它的主要优势具有无侵入、损耗小、强大的CRUD操作、支持 Lambda 形式调用、支持 ActiveRecord模…

向毕业妥协系列之机器学习笔记:无监督学习-异常检测

目录 一.发现异常事件 二.高斯正态分布 三.异常检测算法 四.开发与评估异常检测系统 五.异常检测与监督学习对比 六.选择使用什么特征 一.发现异常事件 下图的例子是飞机发动机的制造,有很多特征,我们为了方便讲解取其中的两个特征:发…

基于JavaWeb的小区物业管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

(1)paddle---在anaconda中安装paddle环境

1、 创建一个anaconda的环境 (1)创建 conda create --name chenpaddle_cp310 python=3.10 如果要删除 conda remove -n chenpaddle_cp310 --all (2)查看现有环境 conda env list #查看现有环境 2、安装 paddlepaddle (1)查看自己安装的cuda版本 nvidia-smi 发现…