当前位置: 首页 > news >正文

python学习之路 - python的函数

目录

  • 一、python函数
    • 1、函数介绍
    • 2、函数的定义
    • 3、函数的参数
    • 4、函数的返回值
    • 5、函数说明文档
    • 6、函数的嵌套调用
    • 7、变量的作用域
    • 8、综合案例
    • 9、函数与方法的区别
  • 二、python函数进阶
    • 1、函数多返回值
    • 2、函数多种传参方式
        • a、位置参数
        • b、关键字参数
        • c、缺省参数
        • d、不定长参数
    • 3、匿名函数
        • a、函数作为参数传递
        • b、lambda匿名函数

一、python函数

1、函数介绍

函数:是组织好的、可重复使用的、用来实现特定功能的代码段

name = "这是字符串"
length = len(name)
print(length)能直接调用len方法,则len()是python内置的函数

2、函数的定义

a、基本语法

def 函数名(传入参数):函数的内容return 返回值

b、案例
定义简单的函数并调用

#定义函数
def output_content():print("hello")#调用函数
output_content()如果不调用函数,函数的内容不会执行,只有调用后才会执行
要先定义函数,后调用函数。没有定义函数前无法调用

3、函数的参数

a、基本介绍
功能:在函数进行计算的时候,接收外部提供的数据
多个参数之间用逗号分隔开

def 函数名(参数1,参数2,参数3):函数的内容return 返回值

b、案例
创建一个函数,传入两个数字,打印两个数字的和

def get_sum_num(x , y):print(f"和为{x + y}")get_sum_num(1,2)

函数定义中,提供的x,y称为形式参数(形参),表示函数要两个参数
函数调用中,提供的1,2称为实际参数(实参),表示函数执行时使用的参数

4、函数的返回值

a、基本介绍
函数在完成事情之后,最后要返回给调用者的结果

def 函数名(参数):函数的内容return 返回值变量 = 函数名(参数)

b、案例
定义一个函数,将2数相加的内容返回给调用者并打印

def get_sum_num(x,y):return x + yresult = get_sum_num(1,2)
print(f"结果为:{result}")

c、补充
思考:如果定义的函数没有使用return语句返回数据,那么函数有返回值吗?

  • 实际上是有的,这时会返回特殊的字面量None,类型为<class ‘NoneType’>
  • None表示的是空的,无实际意义的意思,函数返回None,也就表示没有返回有意义的内容,也就是返回了空的意思
  • 在if判断中,None等同于False,可以联合if判断函数是否有返回内容
  • 在定义变量时,暂时不需要变量有具体值时,可以用None代替。如name = None

5、函数说明文档

a、基本语法
函数是纯代码语言,想要理解含义就需要一行行的阅读代码
我们可以给函数添加说明文档,辅助理解函数的作用

def func(x,y):"""func函数可以接收2个参数,并返回两个参数的相加值:param x: 参数1:param y: 参数2:return: 返回的两个值的和"""return x + yresult = func(1,2)

在pycharm中,当鼠标悬停到函数调用的传参时,会出现说明文档
在这里插入图片描述

6、函数的嵌套调用

a、基本语法
在一个函数中调用另一个函数,就是函数的嵌套调用

b、案例
在函数a中调用b输出内容

def fun_b():print("b")def fun_a():print("a")fun_b()fun_a()

7、变量的作用域

  • 局部变量
    定义:定义在函数体内部的变量,即只在函数体内部生效
    作用:在函数体内部临时保存数据,当函数完成后,则销毁局部变量
def func():num = 100print(num)# 这个num就是局部变量
  • 全局变量

定义:在函数体内、体外都能生效的变量

num = 100
def func_a():print(num)def func_b():print(num)# 这个nun就是全局变量
  • 思考:看如下代码,试想,最后会输出多少呢?
num = 100
def func_a():num = 200
func_a()
print(num)

最后是会输出100,因为func_a方法中的num是一个局部变量,只会影响函数内部的值

  • 思考:如果我们想在函数内部作用全局变量呢?

可以使用global关键字,定义全局变量

num = 100
def func_a():global numnum = 500func_a()
print(num)				这时就会输出500

8、综合案例

案例要求:开发一个存款取款的函数,定义4个函数,共有4个功能,分别为查询余额1、存款2、取款3、退出4,用户分别输入对应的数字则进入对应的功能,用户未输入4前程序要永久运行

bol = True
name = ""
total_num = 5000000# 存款函数
def add_money():global total_numput_num = int(input("请输入存款金额:"))total_num += put_numprint(f"{name}您好,您的余额为:{total_num}元")# 取款函数
def get_money():global total_numput_num = int(input("请输入取款金额:"))total_num -= put_numprint(f"{name}您好,您的余额为:{total_num}元")# 查询余额函数
def check_money():print(f"{name}您好,您的余额为:{total_num}元")#主函数
def main():global bolglobal namename = input("请输入您的姓名:")while bol:print(f"{name}你好,请选择操作\n查询余额\t[输入1]\n存款\t[输入2]\n取款\t[输入3]\n退出\t[输入4]")num = input("请输入您的选择:")if num == "1":check_money()elif num == "2":add_money()elif num == "3":get_money()else:bol = False
main()

9、函数与方法的区别

函数的定义方式:

def add(x,y):return x + y

方法的定义方式:

class Studentdef add(x,y):return x + y

函数和方法功能一样,有传入参数,也有返回值,只是使用时不同。
使用函数时:

num = add(1,2)

使用方法时:

student = Student()
num = student.add(1,2)

二、python函数进阶

1、函数多返回值

多个返回值用逗号分隔开

def fun1():return 1,'hello',Truex,y,z = fun1()
print(x)		结果为1
print(y)		结果为hello
print(z)		结果为True

2、函数多种传参方式

a、位置参数

传参的位置固定,自动匹配参数值

def fun1(name,age,sex):print(f"姓名:{name},年龄:{age},性别:{sex}")
fun1("张三",18,"男")结果为:姓名:张三,年龄:18,性别:男
b、关键字参数

调用函数时通过键值对的形式传参

def fun1(name,age,sex):print(f"姓名:{name},年龄:{age},性别:{sex}")
fun1(age=18,sex="男",name="张三")结果为:姓名:张三,年龄:18,性别:男
c、缺省参数
  • 缺省参数也叫默认参数,定义函数如没有传入值,则提供参数的默认值
  • 有默认值的参数需要写到无默认值参数的后面
def fun1(name='李四',age=18,sex='女'):print(f"姓名:{name},年龄:{age},性别:{sex}")
fun1(sex="男",name="张三")结果为:姓名:张三,年龄:18,性别:男
d、不定长参数
  • 不定长参数也叫可变参数,用于不确定调用时需要传递参数的个数
  • 分为位置传递不定长参数和关键字传递不定长参数
# 位置传递不定长参数
def fun1(*args):print(args)				此时的数据类型为元组
fun1('张三',18,'男')
结果为:('张三', 18, '男')		需要以直接传入的方式传参# 关键字传递不定长参数
def fun1(**kwargs):print(kwargs)			此时的数据类型为字典
fun1(name='张三',age=18,sex='男')		需要用key-value的形式传参
结果为:{'name': '张三', 'age': 18, 'sex': '男'}

3、匿名函数

a、函数作为参数传递

函数本身也能作为参数传入另一个函数种

def fun1(fun2):result1 = fun2		在一个函数种调用参数传入的另一个函数print(result1)def fun2(x , y):return x + yfun1(fun2(1,2))			调用时传入函数名和函参数
b、lambda匿名函数
  • 特点:

    • lambda可以定义匿名函数,就是无名称的函数
    • 有名称的函数可以重复使用,匿名函数只能使用一次
    • lambda定义的匿名函数函数体只能写一行,无法写多行
  • 基本语法:lambda 入参: 函数体(一行代码)

def fun1(fun2):result1 = fun2(1,2)print(result1)
fun1(lambda x,y:x+y)		参数为x和y,函数体为x+y结果为:3

相关文章:

python学习之路 - python的函数

目录 一、python函数1、函数介绍2、函数的定义3、函数的参数4、函数的返回值5、函数说明文档6、函数的嵌套调用7、变量的作用域8、综合案例9、函数与方法的区别 二、python函数进阶1、函数多返回值2、函数多种传参方式a、位置参数b、关键字参数c、缺省参数d、不定长参数 3、匿名…...

使用SpringBoot+Vue3开发项目(2)---- 设计文章分类的相关接口及页面

目录 一.所用技术栈&#xff1a; 二.后端开发&#xff1a; 1.文章分类列表渲染&#xff1a; 2.新增文章分类&#xff1a; 3.编辑文章分类&#xff1a; 4.删除文章分类 &#xff1a; 5.完整三层架构后端代码&#xff1a; &#xff08;1&#xff09;Controller层&#xff1a…...

Layui---toolbar与 tool的区别

table.on(toolbar): table.on(toolbar)&#xff1a; 这个事件监听器是用来处理表格工具栏的事件。工具栏通常位于表格的上方&#xff0c;可以包含添加、删除、导出等按钮。当用户与这些工具栏中的按钮交互时&#xff0c;比如点击一个按钮来添加新行或者进行搜索操作&#xff0c…...

U-Net++原理与实现(含Pytorch和TensorFlow源码)

U-Net原理与实现 引言1. U-Net简介1.1 编码器&#xff08;Encoder&#xff09;1.2 解码器&#xff08;Decoder&#xff09;1.3 跳跃连接&#xff08;Skip Connections&#xff09; 2. U-Net详解2.1 密集跳跃连接2.2 嵌套和多尺度特征融合2.3 参数效率和性能2.4 Pytorch代码2.5 …...

产品心理学:啦啦队效应

电视里我们常会看见这样一个场景&#xff0c;一群女孩穿着短裙有说有笑地在大街上走过&#xff0c;把路人们都看傻了&#xff0c;其实单个来看&#xff0c;她们的长相并不出众&#xff0c;可是凑在一起就显得青春貌美&#xff0c;这就是“啦啦队效应”——cheerleader effect。…...

AC+AP组网

配置DHCP Switch1 <Huawei>sys [Huawei]undo in en [Huawei]vlan batch 10 20 30 40[Huawei]int vlan 10 [Huawei-Vlanif10]ip add 192.168.10.1 24 [Huawei-Vlanif10]quit[Huawei]int vlan 20 [Huawei-Vlanif20]ip add 192.168.20.1 24 [Huawei-Vlanif20]quit[Huawei]…...

2024.8.05(glibc的安装及MySQL的安全用户角色权限)

一、glibc的安装 1、清空/etc目录下的my.cnf [rootlocalhost ~]# ls -l /etc/my.cnf -rw-r--r--. 1 root root 570 6月 8 2017 /etc/my.cnf [rootlocalhost ~]# rm -rf /etc/my.cnf 2、删除mariadb [rootlocalhost ~]# yum -y remove mariadb [rootlocalhost ~]# find / -na…...

【精选】6款一键生成论文的软件3000字论文网站

千笔-AIPassPaPer是一款功能强大且全面的AI论文写作工具&#xff0c;特别适合学术研究者和学生使用。它不仅能够一键生成高质量的论文初稿&#xff0c;还涵盖了700多个学科专业方向&#xff0c;满足各种学术需求。 一、千笔-AIPassPaPer 传送门&#xff1a;https://www.aipape…...

如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据

背景介绍 网页数据的抓取已经成为数据分析、市场调研等领域的重要工具。无论是获取产品价格、用户评论还是其他公开数据&#xff0c;网页抓取技术都能提供极大的帮助。今天&#xff0c;我们将探讨如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据。PHP Simple H…...

Linux笔记 --- 传统链表

目录 链表 单向链表 单向循环链表 双向链表 设计表 初始化 在auchor后插入节点&#xff0c; 在auchor前插入节点 删除节点 传统链表 通过使用链表我们可以将一个数组中的数据分开到不同位置存放并使用指针指向他们&#xff0c;使之逻辑相连&#xff0c;解决了顺序存储所需要…...

C语言的编译(预处理操作)+链接

目录 翻译环境和执行环境 预定义符号 #define定义标识符 续行符\ #define定义宏 再说一下&#xff0c;#define其实就是替换 #和## 宏和函数的对比 命名约定 #undef 命令行定义 条件编译 文件包含 避免头文件重复引用&#xff0c;否则会增加代码长度 翻译环境和执行环境 在C中存…...

FFmpeg实战 - 解复用与解码

大纲目录 文章目录 前置知识音视频基础概念解复用、解码的流程分析FFMPEG有8个常用库 常见音视频格式的介绍aac格式介绍&#xff08;ADTS&#xff09;h264格式分析FLV和MP4格式介绍 FFmpeg解码解封装实战数据包和数据帧&#xff08;AVPacket/AVFrame&#xff09;AVPacket/AVFra…...

8.5作业

1.思维导图 2.提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff0c;要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {string str;cout << "请输入一个字符串&quo…...

【问题】C++:有哪些类型的智能指针,区别?

智能指针是一种在 C 中管理动态分配内存的工具&#xff0c;可以帮助避免内存泄漏和提高程序的安全性。在 C11 标准引入之后&#xff0c;C 提供了三种主要类型的智能指针&#xff0c;它们分别是 std::unique_ptr、std::shared_ptr 和 std::weak_ptr。这些智能指针有不同的所有权…...

Go-反射

概念 在Go语言中&#xff0c;反射&#xff08;reflection&#xff09;是指在运行时检查程序的结构、变量和接口的机制。可以通过反射获取和修改变量的值、获取变量的类型信息、调用方法等操作。 反射主要由reflect包提供&#xff0c;它定义了两个重要的类型&#xff1a;Type和…...

【深度学习】DeepSpeed,ZeRO 数据并行的三个阶段是什么?

文章目录 ZeRO实验实验设置DeepSpeed ZeRO Stage-2 实验性能比较进一步优化DeepSpeed ZeRO Stage-3 和 CPU 卸载结论ZeRO ZeRO(Zero Redundancy Optimizer)是一种用于分布式训练的大规模深度学习模型的优化技术。它通过分片模型状态(参数、梯度和优化器状态)来消除数据并行…...

代码随想录算法训练营第三十六天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

一、1049. 最后一块石头的重量 II 题目链接&#xff1a;1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 (programmercarl.com)——1049. 最后一块石头的重量 II 视频讲解&#xff1a;动态规划之背包问题&#xff0c;这个…...

Pandas行列变换指南:数据重塑的艺术

数据分析中&#xff0c;数据的形态至关重要。pandas库提供了一系列工具&#xff0c;让我们能够轻松地重塑数据。以下是一些常见的pandas行列变换方法&#xff0c;每种方法都配有完整的代码示例。 环境准备 首先&#xff0c;确保你的环境中安装了pandas和numpy库&#xff1a; …...

1.MySQL面试题之innodb如何解决幻读

1. 写在前面 在数据库系统中&#xff0c;幻读&#xff08;Phantom Read&#xff09;是指在一个事务中&#xff0c;两次读取同一范围的数据集时&#xff0c;由于其他事务的插入操作&#xff0c;导致第二次读取结果集发生变化的问题。InnoDB 作为 MySQL 的一个存储引擎&#xff…...

Nginx中$http_host、$host、$proxy_host的区别

知识巩固&#xff01; 网上看到这篇文章&#xff0c;这里转载记录一下。 简介 变量是否显示端口值是否存在 host 浏览器请求的ip&#xff0c;不显示端口 否 "Host:value"显示 值为a:b的时候&#xff0c;只显示a http_host 浏览器请求的ip和端口号 是"Host:v…...

C# Unity 面向对象补全计划 七大原则 之 里氏替换(LSP) 难度:☆☆☆ 总结:子类可以当父类用,牛马是马,骡马也是马

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 请看专栏&#xff1a;http://t.csdnimg.cn/mIitr&#xff0c;尤其是关于继承的两篇文章&#xff…...

PXE批量安装操作系统

PXE批量安装操作系统 系统环境rhedhat7.9关闭vmware内的dhcp服务 kickstart自动安装脚本的制作 在rhel7系统中提供图形的kickstart制作方式 在rhel8中已经把图形的工具取消&#xff0c;并添加到rhn网络中 在rhel8中如果无法通过rhn网络制作kickstart&#xff0c;可以使用模板…...

float32转float16、snorm/sunorm8/16 学习及实现

1、基础 彻底搞懂float16与float32的计算方式-CSDN博客 例1&#xff1a;float32 0x3fd00000 32b0 011_1111 _1 101_0000_0000_0000_0000_0000 sign0 exp8b0111_1111 h7f d127 >0ffset 127-127 0 mantissa b101_0000_0000_0000_0000_0000(补1&#xff0c;1.1010…...

小型养猫空气净化器怎么选?小型养猫空气净化器产品评测

家养四只猫猫&#xff0c;对于各个角落的猫毛&#xff0c;感觉家里已经被猫毛占领了。感受一下40度高温的养猫人&#xff0c;给掉毛怪疏毛浮毛飘飘&#xff0c;逃不过的饮水机&#xff0c;各个角落&#xff0c;多猫拉臭传来的异味。 一、养猫带来的麻烦 掉毛&#xff1a;每到换…...

数学建模--二分法

目录 二分法的基本原理 应用实例 求解方程根 查找有序数组中的元素 注意事项 Python代码示例 ​编辑 延伸 二分法在数学建模中的具体应用案例有哪些&#xff1f; 如何选择二分法的初始区间以确保收敛速度和精度&#xff1f; 在使用二分法求解方程时&#xff0c;如何…...

如何使用 Puppeteer 绕过 Akamai

摘要&#xff1a; 本文深入探讨了在面对Akamai强大防护下的网页抓取挑战时&#xff0c;如何运用Puppeteer这一强大的Node.js库&#xff0c;通过模拟真实用户行为、动态请求处理等策略&#xff0c;高效且隐蔽地收集数据。我们将一步步揭开Puppeteer绕过Akamai的神秘面纱&#x…...

【硬件知识】车规级开发等级——AEQ-100和ISO26262标准

文章目录 一、定义二、区别1.应用场景2.使用方法 总结 一、定义 AEQ-100&#xff08;Automotive Electronics Council Q100&#xff09;是一个由汽车电子委员会&#xff08;AEC&#xff09;制定的标准&#xff0c;主要用于保证汽车电子元件的可靠性。它是一个关于汽车级半导体…...

Qt | QStackedBarSeries(堆叠条形图)+QPercentBarSeries(堆叠百分比条形图)

点击上方"蓝字"关注我们 01、QBarSet 1. 首先,需要创建一个名为QBarSet的类。 2. 在QBarSet类中,定义所需的属性和方法。 3. 属性可能包括条形的名称、颜色、值等。 4. 方法可能包括添加条形、删除条形、计算总和等。 5. 确保QBarSet类能够与QBar类协同工作,…...

C++——多态经典案例(一)组装电脑

案例&#xff1a;小明打算买两台组装电脑&#xff0c;假设电脑零部件包括CPU、GPU和内存组成。 一台电脑使用intel的CPU、GPU和内存条 一台电脑使用Huawei的CPU、GPU和Intel的内存条 分析&#xff1a;使用多态进行实现 将CPU、GPU和内存条定义为抽象类&#xff0c;内部分别定义…...

从传统监控到智能化升级:EasyCVR视频汇聚平台的一站式解决方案

随着科技的飞速发展和社会的不断进步&#xff0c;视频监控已经成为现代社会治安防控、企业管理等场景安全管理中不可或缺的一部分。而在视频监控领域&#xff0c;EasyCVR视频汇聚平台凭借其强大的多协议接入能力&#xff0c;在复杂多变的网络环境中展现出了卓越的性能和广泛的应…...