第六章 Python函数

news2024/11/28 2:31:28

系列文章目录
第一章 Python 基础知识
第二章 python 字符串处理
第三章 python 数据类型
第四章 python 运算符与流程控制
第五章 python 文件操作
第六章 python 函数
第七章 python 常用内建函数
第八章 python 类(面向对象编程)
第九章 python 异常处理
第十章 python 自定义模块及导入方法
第十一章 python 常用标准库
第十二章 python 正则表达式
第十三章 python 操作数据库


文章目录

  • 函数定义与调用
  • 函数参数
    • 接受函数
    • 参数默认值
    • 接受任意数量参数
  • 匿名函数(Lambda)
  • 作用域
  • 闭包
  • 函数装饰器
    • 无参数
    • 带参数
  • 总结


函数定义与调用

函数:是指一段可以直接被另一段程序或代码引用的程序或代码。

在编写代码时,常将一些常用的功能模块编写成函数,放在函数库中供公共使用,可减少重复编写程序段和简写代码结构

语法:
def 函数名称(参数1,参数2,…):
<代码块>
return <表达式>

# 示例
def hello():
    print("hello world!!!")
hello()  # 调用函数

def h2():
    return "123"
print(h2())

在这里插入图片描述

函数参数

接受函数

<示例:求和函数
def f(a, b):
return a + b
print(f(1,2)) # 按参数位置赋值
print(f(b=2,a=1)) # 按对应关系赋值

示例:生成序列列表
def seq(n):
result = []
x = 0
while x < n:
result.append(x)
x += 1
return result
print(seq(9))

# 传参
def h2(n):
    # return "hello %s" %{n}
    return f"hello {n}"
print(h2('wang'))
# 求和
def SUM(a,b):
    c = a+b
    return c
print(SUM(3,4))
print(SUM(a=1,b=2))
# 生成序列列表
def seq(n):
    result = []
    x = 0
    while x <= n:
        result.append(x)
        x += 1
    return result
print(seq(9))

在这里插入图片描述

参数默认值

参数默认值:预先给参数定义默认值,如果调用函数时没指定该值,则用默认值。
示例:
def f(a, b=2):
return a + b
print(f(1))
print(f(1,3))

# 求和
def SUM(a,b=2):
    c = a+b
    return c
print(SUM(3))
print(SUM(3,7))
print(SUM(a=1))

在这里插入图片描述

接受任意数量参数

前面学习的是固定参数数量,当不知道有多少个参数时可以再参数前面加 *,表示可接受任意多个参数
*name 接受任意多个参数,并放到一个元组中
**name 接受一个键值,并存储为字典

示例:传入多个参数,计算总和
def func(*seq):
x = 0
for n in seq:
x +=n
return x

print(func(1,2,3))

示例:传入多个键值,进行处理
def func(**computer):
for k,v in computer.items():
print(“名称:%s\t价格:%s” %(k,v))

func(主机=5000,显示器=1000,鼠标=60,键盘=150)

# 参数默认值
def func(*sq):
    print(sq)
func(1,2,3,4,5,6)
print('==========')
def func(**sq):
    print(type(sq))
    print(sq)
func(a=1,b=2,c=3,d=4,e=5,f=6)
print('==========')
def func(*args,**kwargs):
    print(args)
    print(kwargs)
func(1,2,3,4,a=1,b=2,c=3)
print('==========')
def func(*seq):
    x = 0
    for n in seq:
        x +=n
    return x

print(func(1,2,3))
print('==========')
def func(**computer):
    for k,v in computer.items():
        print("名称:%s\t价格:%s" %(k,v))

func(主机=5000,显示器=1000,鼠标=60,键盘=150)

在这里插入图片描述

匿名函数(Lambda)

匿名函数:没有名字的函数,使用lambda关键字定义,一般仅用于单个表达式。

示例:求和函数
s = lambda a,b:a+b
print(s(1,2))
等价于:
def func(a,b)
return a+b

# 匿名函数(Lambda)
s= lambda a,b:a+b
print(s(6,7))

t = lambda x: "偶数" if x % 2 == 0 else "奇数"
print(t(7))
print(t(6))

在这里插入图片描述

作用域

作用域:限制一个变量或一段代码可用范围。好处是提高程序逻辑的局部性,减少名字冲突
在这里插入图片描述

  • Local(局部作用域):在函数中定义的变量
  • Enclosed(嵌套作用域):一般出现在函数中嵌套一个函数时,在外部函数中的作用域称为嵌套作用域(闭包常见)
  • Global(全局作用域):文件顶层定义的变量
  • Built-in(内置作用域):系统内解释器定义的变量,例如关键字
# 作用域
a = 2 # 全局变量
def func():
    b = 3 # 局部变量
    print(b)
    global c # 把C定义为了全局变量
    c = 4
func()
print(a)
print(c)

# 嵌套
x = 123
def outer():
    x = 456
    def inner():
        print(x)
    return inner()
outer()

# 内置变量
import builtins
print(dir(builtins))

在这里插入图片描述

闭包

闭包:你可以简单粗暴地理解为闭包就是一个定义在函数内部的函数,闭包使的变量即使脱离了该函数的作用域范围也依然能被访问到。像上面所说的嵌套函数也是闭包的一种形式(将内部嵌套定义的函数作为返回值)

示例:
def outer():
x = 1
def inner():
print(x) # 1
return inner # 不加括号,便是返回函数体
sf = outer()
sf() #调用,等同于outer()()

在一个外部函数内定义了一个函数,内部函数里引用外部函数的变量,并且外部函数的返回值是内函数的引用,这样就构成了一个闭包,并且满足了闭包的三个条件:
1.两层以上嵌套关系
2.内部函数调用外部函数定义的变量
3.外部函数返回内部函数体对象,而不是函数体结果(加括号)

# 闭包
x = 123
def outer():
    x = 456
    def inner():
        print(x)
    return inner
s = outer()
s()
outer()()

在这里插入图片描述

函数装饰器

函数装饰器作用:装饰器本质上是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象

应用场景:记录日志、性能测试、权限校验等

无参数

示例:装饰器使用

# 函数装饰器:无参数
def hello():
    print("我是原函数")
def decorator(func):
    def f():
        print("记录一下开始")
        func()
        print("记录一下结束")
    return f
dec = decorator(hello) # 装饰器传入函数
dec()                  # 调佣内部函数
# decorator(hello)()

在这里插入图片描述

Python提供一个更简洁引用装饰器的方法:语法糖"@"
示例:
@decorator
def hello():
print(“我是原函数”)
hello

# 函数装饰器:无参数
def decorator(func):
    def f():
        print("记录一下开始")
        func()
        print("记录一下结束")
    return f
@decorator
def hello():
    print("我是原函数")
hello()
print("==========")
@decorator
def hello2():
    print("hello word")
hello2()

带参数

示例:
def decorator(func):
def f(msg):
print(“原函数开始执行了”)
func(msg)
print(“原函数执行结束了”)
return f

@decorator
def hello(msg):
print(msg)

hello(“我是原函数”)

# 函数装饰器:无参数
def decorator(func):
    def f(*name,**msg):
        print("记录一下开始")
        func(*name,**msg)
        print("记录一下结束")
    return f
@decorator
def hello(*name,**msg):
    print(name,msg)
    print("我是原函数")
hello(1,2,3,4,5,6,7,a=1,b=2,c=3)
print("==========")
@decorator
def hello2():
    print("hello word")
hello2()

在这里插入图片描述


总结

以上就是今天学习的内容,本文仅仅简单介绍了python3 的函数的定义和调用,以及函数参数,作用域,闭包,函数装饰器。

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

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

相关文章

美颜SDK哪家便宜?企业级美颜工具包

在当今竞争激烈的企业宣传领域&#xff0c;一张优质的照片可以为企业带来巨大的价值。然而&#xff0c;由于各种原因&#xff0c;拍摄的照片、视频往往存在一些瑕疵&#xff0c;如肤色不均、背景杂乱等。为了解决这个问题&#xff0c;美摄科技特别推出了面向企业的专业美颜SDK&…

大数据之LibrA数据库系统告警处理(ALM-12017 磁盘容量不足)

告警解释 系统每30秒周期性检测磁盘使用率&#xff0c;并把磁盘使用率和阈值相比较。磁盘使用率有一个默认阈值&#xff0c;当检测到磁盘使用率超过阈值时产生该告警。 平滑次数为1&#xff0c;主机磁盘某一分区使用率小于或等于阈值时&#xff0c;告警恢复&#xff1b;平滑次…

当 Next.js 遇到 Wordpress 会发生什么?

Wordpress 作为一款小型的内容管理系统&#xff0c;受到很多站长的欢迎&#xff0c;特别是作为个人博客&#xff0c;丰富的插件和主题提供了更多的定制和自由度。 自从前后端分离的开发模式兴起之后&#xff0c;Wordpress 又被作为数据存储的后端服务提供接口给第三方的前端页面…

JVM类的声明周期

文章目录 版权声明生命周期概述加载阶段查看内存中的对象 连接阶段连接阶段之验证连接阶段之准备连接阶段之解析 初始化阶段练习题目一练习题目二练习题目三练习题目四 使用阶段卸载阶段总结 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明…

第四章 Python运算符与流程控制

系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…

【Unity之UI编程】如何用UGUI搭建一个登录注册面板

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;UI_…

数据可视化:折线图

1.初看效果 &#xff08;1&#xff09;效果一 &#xff08;2&#xff09;数据来源 2.JSON数据格式 其实JSON数据在JAVA后期的学习过程中我已经是很了解了&#xff0c;基本上后端服务器和前端交互数据大多是采用JSON字符串的形式 &#xff08;1&#xff09;JSON的作用 &#…

【软件逆向】如何逆向Unity3D+il2cpp开发的安卓app【IDA Pro+il2CppDumper+DnSpy+AndroidKiller】

教程背景 课程作业要求使用反编译技术&#xff0c;在游戏中实现无碰撞。正常情况下碰撞后角色死亡&#xff0c;修改为直接穿过物体不死亡。 需要准备的软件 il2CppDumper。DnSpy。IDA Pro。AndroidKiller。 一、使用il2CppDumper导出程序集 将{my_game}.apk后缀修改为{my_…

AD9371 官方例程 NO-OS 主函数 headless 梳理

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

SpringCloudAlibaba - 项目完整搭建(Nacos + OpenFeign + Getway + Sentinel)

目录 一、SpringCloudAlibaba 项目完整搭建 1.1、初始化项目 1.1.1、创建工程 1.1.2、配置父工程的 pom.xml 1.1.3、创建子模块 1.2、user 微服务 1.2.1、配置 pom.xml 1.2.2、创建 application.yml 配置文件 1.2.3、创建启动类 1.2.4、测试 1.3、product 微服务 1…

LIME低亮度图像增强

LIME低亮度图像增强 main.cpp #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <opencv2/imgproc/imgproc.hpp> #include "lime.h"int main() {cv::Mat img_in cv::imread("…

Hello AIGC类杂志实验

shadow 类杂志是我们从6月开始孵化的一个小型内容产品。目前还在不断迭代升级中~~ 今天和大家聊聊心得体会&#xff1a; 从2023-06-12发布第一期以来&#xff0c;我和小杜一起打磨了前面几期&#xff0c;逐步找到稳定的内容表达方式后&#xff0c;由小杜独立负责此类杂志的更新…

c语言从入门到实战——函数递归

函数递归 前言1. 递归是什么&#xff1f;2. 递归的限制条件3. 递归举例3.1 举例1&#xff1a;求n的阶乘3.1.1 分析和代码实现3.1.2 画图推演 3.2 举例2&#xff1a;3.2.1 分析和代码实现3.2.2 画图推演 4. 递归与迭代 前言 函数递归是指一个函数直接或间接地调用自身&#xff…

13 Linux 蜂鸣器

一、蜂鸣器驱动原理 常用蜂鸣器分两种&#xff0c;有源蜂鸣器和无源蜂鸣器。 它们俩的区别&#xff1a;有源蜂鸣器具有内置的振荡器和驱动电路&#xff0c;无源蜂鸣器没有&#xff1b;源蜂鸣器只需简单的数字信号来控制&#xff0c;无源蜂鸣器需要外部电路或微控制器来提供特定…

Spring和SpringMVC总结

一、Spring IoC(Inversion of Control)中文名称&#xff1a;控制反转&#xff08;对象的创建交给Spring管理&#xff09;。DI(dependency injection )依赖注入。容器&#xff08;Container&#xff09;&#xff1a;放置所有被管理的对象。beans&#xff1a;容器中所有被管理的对…

Rust编程基础核心之所有权(下)

1.变量与数据交互方式之二: 克隆 在上一节中, 我们讨论了变量与数据交互的第一种方式: 移动, 本节将介绍第二种方式:克隆。 如果我们 确实 需要深度复制 String 中堆上的数据&#xff0c;而不仅仅是栈上的数据&#xff0c;可以使用一个叫做 clone 的通用函数。 看下面的代码…

国产数据库人大金仓Kingbase数据迁移工具

点击上方蓝字关注我 在做国产数据库适配过程中经常需要将现有数据库的数据迁移至国产数据库中&#xff0c;在适配在人大金仓Kingbase数据库时&#xff0c;可以使用KDTS进行数据迁移。 1. 支持迁移的数据库及对象 2. 迁移工具安装 地址&#xff1a;https://www.kingbase.com.c…

多输入多输出 | Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络多输入多输出预测

多输入多输出 | Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现WOA-RBF鲸鱼算法优化径向基神经网络…

农业水土环境与面源污染建模及对农业措施响应

目录 ​专题一 农业水土环境建模概述 专题二 ArcGIS入门 专题三 农业水土环境建模流程 专题四 DEM数据制备流程 专题五 土地利用数据制备流程 专题六 土壤数据制备流程 专题七 气象数据制备流程 专题八 农业措施数据制备流程 专题九 参数率定与结果验证 专题十 模型结…

【Python语言】比较四个数或多个数的大小

重点&#xff1a;sorted()函数可以对列表进行升序排序 思路&#xff1a;利用Python语言中的列表排序函数简单粗暴的解决比较大小问题 a int(input("请输入第一个数&#xff1a;")) b int(input("请输入第二个数&#xff1a;")) c int(input("请输…