python从入门到精通:函数

目录

1、函数介绍

2、函数的定义

3、函数的传入参数

4、函数的返回值

5、函数说明文档

6、函数的嵌套调用

7、变量的作用域



1、函数介绍

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

name = "zhangsan";
length = len(name);
print(length)

之所以可以随时调用len( )(实现统计长度)函数,是因为,它是python内置的函数(提前写好的)。不使用len( )函数如何实现统计字符串长度。

str = "python";
count = 0;
for i in str:count += 1;
print(count)
# 可以使用函数,来优化这个过程
def my_len(data):count = 0;for i in data:count += 1;print(f"字符串{data}的长度为{count}")
my_len(str)

函数可以得到一个针对特定需求、可供重复利用的代码段提高程序的复用性,减少重复性代码、提高开发效率。 

2、函数的定义

函数的定义:

def 函数名(传入参数):

        函数体

        return 返回值

函数调用:

函数名(参数) 

# 简单定义一个函数
def my_hi():print("hello")
my_hi()

注意事项:

1、参数如果不需要,可以省略

2、返回值如果不需要,可以省略

3、函数必须限定以后使用 

3、函数的传入参数

传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据。

def add1():result = 1 + 2;print(f"{result}")
add1()
# add1()功能十分局限,只能计算1+2,但我们如果给函数增加两个传入参数,从而让用户指定加法计算
def add2(a,b):result = a + b;print(f"{a}+{b}={a+b}");
add2(3,4)

1、函数定义中,提供的a和b,称之为:形式参数(形参),表示函数声明将要使用两个参数(参数之间使用逗号进行分割)

2、函数调用中,提供的5和6,称之为:实际参数(实参),表示函数执行时真正使用的参数值(传入的时候,按照顺序传入数据,使用逗号分隔)

传入的参数数量是不受限制的(可以不使用参数,也可以使用任意N个参数) 

4、函数的返回值

程序中的返回值:

# 定义两数相加的函数功能。完成功能后,会将相加的结果返回给函数调用者,所以,变量r接收到了函数的执行结果。
def add(a,b):result = a + b;return result;
r = add(3,4)
print(r)

所谓“返回值”,就是程序中函数完成事情之后,最后给调用者的结果。

语法格式如下:

def 函数名(传入参数):

        函数体

        return 返回值

变量=函数(参数)

注意:函数体在遇到return后就结束了,所以写在return后的代码不会执行。

函数如果没有使用return语句返回数据,函数的返回值为:None

None是一个特殊的字面量,其类型是:<class 'NoneType'>无返回值的函数,实际上就是返回了:None这个字面量。

None表示:空的、无实际意义的意思。函数返回的None,就表示,这个函数没有返回什么有意义的内容,返回值为空的意思。 

def say_hello():print("hello")# None
result = say_hello();
print(result)
print(f"返回类型为{type(result)}")

None类型的应用场景:

None作为一个特殊的字面量,用于表示:空、无意义,其有非常多的应用场景。

1、用在函数无返回值上。

2、用在 if判断上:在if判断中,None等同于False,一般用于在函数中主动返回None,配合if判断做相关处理。

def check_age(age):if age > 18:return "SUCCESS";else:return None
result = check_age(14)
if not result:# 进入if表明result是None值print("未满18岁")

3、用于声明无内容的变量上:定义变量,但暂时不需要变量有具体值,可以用None来代替。

name = None

5、函数说明文档

函数是纯代码语言,想要理解其含义,就要一行行的去阅读理解代码,效率比较低。

我们可以给函数添加说明文档,辅助理解函数的作用。

语法如下:

def func(x,y):"""函数说明:param x: 形参x的说明:param y: 形参y的说明:return: 返回值的说明"""函数体return 返回值

 通过多行注释,对函数进行说明解释(内容要在函数体前)

def add(x,y):"""add函数可以接受两个参数,对两数进行相加:param x: 形参x表示相加的其中一个数字:param y: 形参y表示相加的另一个数字:return: 返回两数相加的结果"""result = x + y;print(f"{x}+{y}={x+y}")return result

我们还可以通过鼠标悬停的方式来查看说明文档:

 可以帮助更好的理解函数。

6、函数的嵌套调用

所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数。

def func_b():print(2)
def func_a():print(1)func_b()
func_a()

如果函数a中,调用了另外一个函数b,那么先把函数b中的任务都执行完毕之后才会回到上次函数a执行的位置。 

7、变量的作用域

变量的作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)

主要分为两类:局部变量和全局变量

所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效。

def test():num = 100
print(num) # 报错:name 'num' is not defined

变量num是定义在“test”函数内部的变量,在函数外部访问则立即报错

局部变量的作用:在函数体内部,临时保存数据,当函数调用完成后,则立即销毁局部变量。

全局变量指的是在函数体内、外都能生效的变量

def testA():print(num)
def testB():print(num)
testA() # 100
testB() # 100

 global关键字:

对于上一个代码如果将“testB”函数需要修改变量num的值为200,如何修改程序?

num = 100
def testA():print(num)
def testB():global numnum=200print(num)
testA() # 100
testB() # 200
print(num) # 200
# 案例:农业银行ATM:存款、取款、查询余额函数
# d定义全局变量
money = 50000
name = None
# 要求客户输出姓名
name = input("请输入您的姓名:")
# 定义查询函数
def query(show_header):if show_header:print("---------查询余额------------")print(f"{name}您好!您的余额剩余{money}")
# 定义存款函数
def save(num):global moneyprint("---------存款------------")money = money + numprint(f"{name}您存款{num}元成功")query(False)
# 定义取款函数
def get(num):global moneyprint("---------取款------------")if money != 0:money = money - numprint(f"{name}您取款{num}元成功")query(False)else:print("您好!您的帐户余额为0,请及时充值")
# 定义主菜单函数
def main():print("----------主菜单-----------")print(f"你好!欢迎来到农业银行ATM,请选择:")print("查询余额输入\t[1]")print("存款输入\t\t[2]")print("取款输入\t\t[3]")print("退出输入\t\t[4]")return input("请输入您的选择:")
# 无限循环,确保不会退出
while True:key_board = main()if key_board == "1":query(True)continue # 通过continue继续下一次循环elif key_board == "2":num = int(input("您要存款的金额:"))save(num)continueelif key_board == "3":num = int(input("您要取款的金额:"))get(num)continueelse:print("退出系统!")break

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

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

相关文章

Java八股整合(MySQL+Redis+Maven)

MySQL 数据库设计三范式 不可再分&#xff0c;部分依赖&#xff0c;传递依赖 主键和外键区别 主键非空约束&#xff0c;唯一性约束&#xff0c;唯一标识一个字段 外键用于和其他表建立连接&#xff0c;是另一张表的主键&#xff0c;可重复可为空可以有多个 为什么不推荐使…

链表---数据结构-黑马

链表 定义 链表是数据元素的线性集合&#xff0c;其每个元素都指向下一个元素&#xff0c;元素存储上是不连续的。 分类 单向链表&#xff0c;每个元素只知道自己的下一个元素是谁。 双向链表&#xff0c;每个元素知道自己的上一个元素和下一个元素。 循环链表&#xff0c;…

【深度学习】单层神经网络

单层神经网络 神经元感知机 1943年&#xff0c;心理学家McCulloch和数学家Pitts共同发表了神经网络的开山之作A Logical Calculus of the Ideas Immanent in Nervours Activity1&#xff0c;提出了神经网络的第一个数学模型——MP模型。该模型也成为了人工神经网络的基础。 神经…

代码随想录算法训练营第十四天| 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度

目录 一、LeetCode 226.翻转二叉树思路&#xff1a;C代码 二、LeetCode 101. 对称二叉树思路C代码 二、LeetCode 104.二叉树的最大深度思路C代码 二、LeetCode 111.二叉树的最小深度思路C代码 总结 一、LeetCode 226.翻转二叉树 题目链接&#xff1a;LeetCode 226.翻转二叉树 …

springboot静态资源访问问题归纳

以下内容基于springboot 2.3.4.RELEASE 1、默认配置的springboot项目&#xff0c;有四个静态资源文件夹&#xff0c;它们是有优先级的&#xff0c;如下&#xff1a; "classpath:/META-INF/resources/", &#xff08;优先级最高&#xff09; "classpath:/reso…

Unified 阻抗控制 architecture、framework、approach

Unified 阻抗控制&#xff08;Unified Impedance Control&#xff09;作为一种控制策略&#xff0c;其architecture&#xff08;架构&#xff09;、framework&#xff08;框架&#xff09;和approach&#xff08;方法&#xff09;为&#xff1a; 一、Unified 阻抗控制 Archite…

骨板和螺钉市场分析:前五大厂商占有大约78.0%的市场份额

据QYResearch调研团队最新报告“全球骨板和螺钉市场报告2024-2030”显示&#xff0c;预计2030年全球骨板和螺钉市场规模将达到76.2亿美元&#xff0c;未来几年年复合增长率CAGR为3.7%。 根据QYResearch头部企业研究中心调研&#xff0c;全球范围内骨板和螺钉生产商主要包括J &a…

视频美颜SDK与直播美颜工具的开发详解与技术优化

本篇文章&#xff0c;小编将为开发者提供一份详细的美颜指南。 一、视频美颜SDK的核心功能 视频美颜SDK是一种嵌入式软件开发工具包&#xff0c;允许开发者在应用中轻松实现实时美颜效果。其核心功能主要包括&#xff1a; 1.实时磨皮 2.美白功能 3.瘦脸与大眼 4.智能滤镜…

AWS 消息队列服务 SQS

AWS 消息队列服务 SQS 引言什么是 SQSSQS 访问策略 Access Policy示例&#xff1a;如何为 DataLake Subscription 配置 SQS 引言 应用系统需要处理海量数据&#xff0c;数据发送方和数据消费方是通过什么方式来无缝集成消费数据的&#xff0c;AWS 提供 SQS 消息队列服务来解决…

设计模式21-组合模式

设计模式21-组合模式&#xff08;Composite Pattern&#xff09; 写在前面 动机定义与结构定义结构主要类及其关系 C代码推导优缺点应用场景总结补充叶子节点不重载这三个方法叶子节点重载这三个方法结论 写在前面 数据结构模式 常常有一些组件在内部具有特定的数据结构。如何…

牛客网SQL进阶135 :每个6/7级用户活跃情况

每个67级用户活跃情况_牛客题霸_牛客网 0 问题描述 基于用户信息表user_info、、试卷作答记录表exam_record、题目练习记录表practice_record&#xff0c;统计 每个6/7级用户总活跃月份数、2021年活跃天数、2021年试卷作答活跃天数、2021年答题活跃天数&#xff0c;结果 按照总…

在linux上架设Web服务器Apache(Ubuntu)

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力! 江山如画&#xff0c;客心如若&#xff0c;欢迎到访&#xff0c;一展风采 文章目录 背景1. 安装 Apache2. 启动和检查 Apache 服务…

强烈推荐这三款IOS应用,让你的生活更美好

Dino记账 Dino记账是一款结合了简洁设计和强大功能的记账应用&#xff0c;它通过多维度图表帮助用户轻松掌握金钱流向。应用界面明亮且配色突出&#xff0c;使得记录内容易于阅读&#xff0c;让记账和管理账目变得更加简单。 主要特性&#xff1a; 极简风格与易用性&#xff1…

掌握 Spring Boot + MyBatis-Plus 动态数据源切换,只要5分钟!

数据量猛增&#xff0c;通过动态数据源切换&#xff0c;我们不仅能提高查询效率&#xff0c;还能保证系统的高可用性。 通过将写操作集中在主库&#xff0c;读操作分散到多个从库&#xff0c;可以有效减轻数据库的压力。 在pom.xml中添加以下依赖&#xff1a; xml <depend…

Qt系统机制

Qt系统 Qt文件概述输入输出设备类QFileQFileInfoQt多线程Qt多线程常用API使用Qt多线程 线程安全互斥锁读写锁条件变量信号量 Qt网络QUdpSocketQNetworkDatagram设计一个UDP回显服务器QTcpServerQTcpSocketTcp版本的回显服务器HttpClient核心API Qt 音频Qt视频 Qt文件概述 ⽂件操…

入门Pandas必练习100题基础到进阶|阶级教程2

作者:郭震 51. How to get the row number of the nth largest value in a column? Find the row position of the 5th largest value of column a in df. # input df pd.DataFrame(np.random.randint(1, 30, 30).reshape(10,-1), columnslist(abc)) df# Solution 1# argsort…

HEML+CSS超详细基础知识

一些快捷键 ctrl/ 是注释 ctrld 是选中多个相同字 ctrls保存 altZ自动换行 altshift选中多行 HTML认知 基础认知 html初尝试 HTML页面结构介绍 初次尝试 开始动手写一个网页 先新建一个文件&#xff0c;记得后缀要命名成html 然后shift&#xff01;&#xff0c;就会自动…

《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-01-层次式体系结构概述

文章目录 1. 常用层次是架构2. 层次式架构设计的注意点2.1 污水池反模式2.2 应用变得庞大 本章教材又赘述了一遍架构的定义和层次架构风格的概述&#xff0c;我之前的笔记都写了 架构的定义回看《第7章-系统架构设计基础知识-01-软件架构&#xff08;Software Architecture&…

学习测试15-实战6-根据说明书建工程

CAN协议说明书&#xff1a;含义 一&#xff0c;得到表 1&#xff0c;先建信号 2&#xff0c;建报文&#xff0c;将对应信号拖入其中 3&#xff0c;建节点&#xff0c;将报文添加进TX msg里 调整起始位 数据库建立完成 二&#xff0c;不需要面板&#xff0c;直接导入数据库&…