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

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

相关文章:

python从入门到精通:函数

目录 1、函数介绍 2、函数的定义 3、函数的传入参数 4、函数的返回值 5、函数说明文档 6、函数的嵌套调用 7、变量的作用域 1、函数介绍 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现特定功能的代码段。 name "zhangsan"; length len(nam…...

【Android性能篇】如何分析 dumpsys meminfo 信息

一、dumpsys meminfo是什么 dumpsys meminfo 是一个用于分析Android设备内存使用情况的强大命令。 二、dumpsys meminfo的关键信息 要分析其输出信息&#xff0c;我们需要注意以下几个关键点&#xff1a; Total PSS by OOM adjustment&#xff1a;这个值表示每个进程的总比…...

c++进阶——继承的定义,复杂的菱形继承及菱形虚拟继承

目录 前言&#xff1a; 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6. 继承与静态成员 7.复杂的菱形继承及菱…...

计算机网络:DNS、子网掩码、网关

参考&#xff1a; https://blog.csdn.net/weixin_55255438/article/details/123074896 https://zhuanlan.zhihu.com/p/65226634 在计算机网络中&#xff0c;DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;、子网掩码&#xff08;Subnet Mask&#xff09;…...

程序员如何学习开源项目

程序员如何学习开源项目 豆包MarsCode使用豆包MarsCode学习开源项目步骤导入git上开源的项目 豆包MarsCode https://www.marscode.cn/home 使用豆包MarsCode学习开源项目 步骤 https://www.marscode.cn/dashboard 导入git上开源的项目 找到项目的README.md文件&#xff0c;使…...

探索数据结构:红黑树的分析与实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 红黑树的介绍 1.1. 红黑树的引入 我们前面学习了AVL树&#xff0c;…...

【设计模式】装饰器模式和适配模式

装饰器模式 装饰器模式能够很好的对已有功能进行拓展&#xff0c;这样不会更改原有的代码&#xff0c;对其他的业务产生影响&#xff0c;这方便我们在较少的改动下对软件功能进行拓展。 类似于 router 的前置守卫和后置守卫。 Function.prototype.before function (beforeFn)…...

Visual Studio VS 插件之 ReSharper

集成在VS2022上的ReSharper暂无找到汉化方式&#xff0c;如果有大神可以汉化&#xff0c;请指导下。 首先ReSharper 是IDE 下的插件 主要是基于C# 语句优化的这么一个插件。 使用ReSharper可以使开发效率大大提高&#xff0c;但是也是比较吃电脑的配置。所以说如果配置低的小…...

【二分查找】--- 进阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 本篇博客我们继续来了解一些有关二分查找算法的进阶题目。 &#x1f3e0; 寻找峰值 &#x1f4cc; 题目内容 162. 寻找峰值 - 力扣&#…...

CSS 对齐

CSS 对齐 在网页设计中&#xff0c;CSS&#xff08;层叠样式表&#xff09;对齐是一种基本而重要的技术&#xff0c;它决定了网页元素的位置和布局。CSS 提供了多种对齐方法&#xff0c;可以精确控制元素的水平、垂直对齐&#xff0c;以及相对于其父元素或整个页面的位置。本文…...

暑假算法刷题日记 Day 10

目录 重点整理 054、 拼数 题目描述 输入格式 输出格式 输入输出样例 核心思路 代码 055、 求第k小的数 题目描述 输入格式 输出格式 输入输出样例 核心思路 代码 总结 这几天我们主要刷了洛谷上排序算法对应的一些题目&#xff0c;相对来说比较简单 一共是13道…...

【Midjourney】AI作画提示词工程:精细化技巧与高效实践指南

文章目录 &#x1f4af;AI作画提示词基础结构1 图片链接1.1 上传流程 2 文字描述3 后置参数 &#x1f4af;AI作画提示词的文字描述结构1 主体主体细节描述2 环境背景2.1 环境2.2 光线2.3 色彩2.4 氛围 3 视角4 景别构图5 艺术风格6 图片制作方法7 作品质量万能词 &#x1f4af;…...

C语言——文件

文件操作 概念 文件是指存储在外存储器上&#xff08;一般代指磁盘&#xff0c;也可以是U盘&#xff0c;移动硬盘等&#xff09;的数据的集合。 文件操作体现在哪几个方面 1.文件内容的读取 2.文件内容的写入 数据的读取和写入可被视为针对文件进行输入和输出的操作&#xf…...

视频孪生技术在智慧水利(水务)场景中的典型应用展示

一、智慧水利建设规划 根据水利部编制《“十四五”智慧水利建设规划》&#xff0c;建设数字孪生流域、“2N”水利智能业务应用体系、安全可控水利网络安全防护体系、优化健全水利网信保障体系&#xff0c;建成七大江河数字孪生流域&#xff0c;推进水利工程智能化改造&#xf…...

使用kubekey快速搭建k8s集群

项目仓库地址 https://github.com/kubesphere/kubekey/ 支持的Kubernetes Versions https://github.com/kubesphere/kubekey/blob/master/docs/kubernetes-versions.md 安装 选择自己想要下载的版本 https://github.com/kubesphere/kubekey/releases 复制下载链接并下载 示…...

C++——入门基础(上)

目录 一、C参考文档 二、C在工作领域的应用 三、C学习书籍 四、C的第一个程序 五、命名空间 &#xff08;1&#xff09;namespace的定义 (2)命名空间的使用 六、C的输入和输出 七、缺省函数 八、函数重载 九、写在最后 一、C参考文档 &#xff08;1&#xff09;虽…...

Spring事务失效

类内部访问导致事务不生效原因&#xff1a; 注解Transaction的底层实现是Spring AOP技术&#xff0c;而Spring AOP技术使用的是动态代理。spring事务失效的原因就是动态代理失效的原因: 对于static方法和非public方法&#xff0c;注解Transactional是失效的&#xff0c;因为不…...

Qt QLabel标签制作弹框效果,3s后缓慢自动消失

效果图 初始化说明 void InitStatusTips() {if (NULL statusTips_) {return;}statusTips_->setFixedSize(300, 80);//固定大小statusTips_->move((width() - statusTips_->width()) / 2, height() - 30 - statusTips_->height());//移动位置statusTips_->setA…...

JZ55 二叉树的深度

二叉树的深度_牛客题霸_牛客网 递归代码太简单-一行就可以,可以用二叉树的层序遍历&#xff0c;顺便温习下二叉树层序遍历的写法。 对应leetcode 104题&#xff0c;层序遍历对应leetcode-102自顶向下&#xff0c;leetcode-107自底向上 /* struct TreeNode {int val;struct Tre…...

视频号分销系统搭建教程,源代码+部署上线指南

目录 一、视频号分销是什么&#xff1f; 二、视频号分销系统怎么搭建&#xff1f; 1.系统架构设计 2.部署与上线 3.持续迭代与升级 三、部分代码展示 一、视频号分销是什么&#xff1f; 视频号分销系统是合集了视频号商家的产品&#xff0c;推广达人推广商家的产品可赚取…...

【python】cryptography库学习

【python】cryptography库学习 cryptography学习1-安装2-cryptography学习2.1-fernet的使用2.2-padding填充2.3-Hash2.4-ciphers&#xff08;对称算法AES为例&#xff09;2.5-asymmetric(非对称算法RSA为例)函数&#xff1a;generate_private_key类&#xff1a;RSAPrivateKey&a…...

解密!抖音百万粉丝博主三维地图视频都用到了什么GIS数据和技术

引言 在抖音上有许多诸如三维地图科普局、三维地图看世界和三维地图鉴赏等百万粉丝博主靠着三维地图科普城市、景区、人文和地理视频获赞百万&#xff0c;在我们浏览视频时犹如身临其境一般&#xff0c;那么制作这些视频需要什么GIS技术呢&#xff1f;如何利用MapMost技术自己…...

Python知识点:如何使用Kubernetes与Python进行容器编排

Kubernetes 是一个开源的容器编排平台&#xff0c;用于自动化容器化应用的部署、管理和扩展。结合 Python&#xff0c;你可以通过 Kubernetes API 和工具&#xff0c;如 kubectl 和 kubernetes-client 库&#xff0c;来编写和管理容器化应用。以下是如何使用 Kubernetes 和 Pyt…...

Markdown与Word中插入图片的方法及比较

在撰写文档时&#xff0c;无论是技术文档、博客还是学术论文&#xff0c;插入图片都是非常常见的需求。本文将对比两种流行的文本编辑工具——Markdown和Microsoft Word——在插入图片方面的异同点。 Markdown插入图片 如何插入图片 在Markdown中插入图片非常简单&#xff0…...

Vue3+Vite安装配置tailwindCss

考虑到官网不是很好访问&#xff0c;这里记录一下简单步骤方便小友查阅 1. 安装依赖 npm install -D tailwindcss postcss autoprefixer2. 初始化配置文件 npx tailwindcss init -p3.配置模板路径 /** type {import(tailwindcss).Config} */ export default {content: [&quo…...

大数据学习-Spark基础入门

一、Spark是什么&#xff1f; Stack Overflow的数据可以看出&#xff0c;2015年开始Spark每月的问题提交数量已经超越Hadoop&#xff0c;而2018年Spark Python版本的API PySpark每月的问题提交数量也已超过Hadoop。2019年排名Spark第一&#xff0c;PySpark第二&#xff1b;而十…...

C语言:链表插入

链表的插入分为头插入&#xff0c;中间插入和尾插入。 具体方法如下&#xff1a; #include<stdio.h> #include<stdlib.h>typedef struct node {int s;struct node* pnext; }list;list* addnode(list** pphead, list** ppend, int n) {list* ptemp malloc(sizeof…...

xss 一些例子

目录 XSS 1.Ma Spaghet!​编辑 2.Jefff​编辑 3.Ugandan Knuckles​编辑 4.Ricardo Milos​编辑 5.Ah Thats Hawt​编辑 6.Ligma​编辑 7.Mafia​编辑 简单解法就是换一个函数 作者得原意解法 8.Ok, Boomer​编辑 XSS 1.Ma Spaghet! 这里接收了一个somebody参数&…...

基于Docker compose部署Confluence 8.3.4及设置数据持久化存储的总结

基于Docker compose部署Confluence 8.3.4及设置数据持久化存储的总结 一、环境信息二、安装部署三、向导 介绍如何基于Docker、Docker Compose的方式安装部署Confluence 8.3.4&#xff0c;并且设置数据的持久化存储。 一、环境信息 操作系统&#xff1a;CentOS 7.9 Docker Ver…...

eNSP 华为交换机生成树协议

华为交换机生成树协议 生成树协议原理与作用 选举一个交换机作为根网桥&#xff08;生成树的根&#xff09;&#xff0c;计算出到其他所有交换机的最佳路径&#xff0c;把备用路径的端口设为堵塞状态&#xff08;逻辑上关闭备用路径&#xff09;&#xff0c;当最佳路径故障再…...