python02_函数(python函数csdn)
off999 2024-10-18 08:00 43 浏览 0 评论
一、函数的作用
- 可以具体完成某个功能
- 可以重复使用(函数就是存储运行过程)
二、函数的定义
关键字 def
def 函数名(参数1,参数2,参数3):
函数体
return 表达式
下面是一个计算的简单函数,名为add():
def add():
a = 1 + 6 * 4
b = a + 4
print(b)
add()- 使用关键字def来告诉Python要定义一个函数
- 向Python指出了函数名,函数名为add():,定义以冒号结尾
- def add():后面的所有缩进行构成了函数体,描述了函数是做什么的
- 函数要先定义,才能调用
- 函数的调用必须加括号
要使用这个函数,可调用它。函数调用让Python执行函数的代码,由于add()函数没有指定任何参数,所以要调用函数,直接指定函数名即可。
三、函数的类型
1、函数的位置参数
可以通过函数名后面的括号传递参数,下面是一个带有位置参数的函数,名为run_cases():
def run_cases(num):
for case in range(num):
print(f'正在执行第{}条用例')
# 调用函数传入的参数其实就是去给函数定义的时候的变量去赋值
run_cases(10)设置位置参数的原则:
- 函数当中存储多行代码:观察哪些数据会变化,则把它作为参数
关于函数的参数传递,需要注意如下几点:
- 调用函数传递的参数个数一定要跟函数定义的参数个数一致,位置要保持一致,顺序要保持一致,否则会报错
- 注意函数体里面参数的类型,要输入正确的参数类型,否则会报错
- 函数的形式参数和实际参数要配对,一一对应
- 函数调用后,如果有变量,那其实就是给变量赋值
形式参数与实际参数的区别:
- 形式参数:函数定义的时候的参数,就是个变量
- 实际参数:函数调用的时候传入的参数,就是个值
2、函数的关键字参数
关键字参数指的是在调用具有参数默认值的函数时,使用参数的关键字来指定为哪个参数赋值。下面是一个带有关键字参数的函数,名为run_cases():
def run_cases(a,b,c):
for case in range(a):
print(f'正在执行第{}条用例')
print(b + c)
run_cases(a=5,c=3,b=4)关键字参数的作用:
- 在传实际参数的时候,即时说明实际参数的意义
位置参数和关键字参数的混合时的注意点:
- 位置参数一定要在关键字参数的前面,避免冲突
- 不能对一个参数进行多次赋值
- 不能使用未知关键字参数
3、函数的默认参数
默认参数,在定义函数时给予默认值,调用函数时不需要给予默认参数。
def 函数名(...,形参名,形参名=默认值)
代码块
注意??
- 在使用此格式定义函数时,指定有默认值的形式参数必须在所有没默认值参数的最后,否则会产生语法错误。
def run_cases(a,b,c=3)
for case in range(a):
print(f'正在执行第{case}条用例')
print(b+c)
# 不给c传实际参数
# 默认参数的作用:可以不传参数
run_cases(1,4)4、函数的动态参数
预先不知道函数需要接受多少个实参,所以Python中有一个动态参数的概念,随便你传递多少个的参数给函数,它都全盘接受,并在函数体内做进一步处理。
def add(*args):
print(args)
add(1,2,3,4)打印出来的结果都是元组类型,那么无论你传递多少个参数进来,它都会把这些参数存储到一个元组里面。比如可以去计算任意个数数字的总和:
def add(*args):
sum = 0
for item in args:
sum += item
print(sum)
add(1,2,3,4)大家应该充分体验到了动态参数带来的便利,当我们面对不知道要传递多少个参数的函数时,就可以利用动态参数这个用法。
5、带有关键字的动态参数
带有关键字的动态参数,与普通动态参数的区别就是:带有关键字,且必须指定关键字,否则识别不了。
def run(a,**b):
# b 就是把剩下的关键字参数全部都放到一起(字典)
print(a)
print(b)
run(3,H='fuyao',Z='zhishang')传入的带有key值的参数,都被转成了字典,所以当你传入的值不确定个数的时候又要组成字典,那么我们就可以用这种形式去做处理。
6、位置参数、默认参数、动态参数、关键字动态参数的混合使用
def add(a,b=4,c=5,*args,**kwargs):
print('a+b+c的结果是:',a+b+c)
sum = 0
# args 就是把剩下的位置参数全部都放到一起(元组)
for item in args:
sum += item
print('动态参数的累加结果是:',sum)
# kwargs 就是把剩下的关键字参数全部都放到一起(字典)
print('关键字动态参数是:',kwargs)
# 调用函数
add(1,2,3,4,5,6,x=1,y=2)根据传递的参数,我们可以看到是优先处理位置参数,然后剩余的参数传递给args,带有关键字的参数传给kwargs。
7、函数的拆包
然而现实中,自动化测试用例中有很多数据(url、方法、参数等),存那么多变量不太现实,那我们可以将多个数据存在一个变量中,此时就会用到拆包了。
1)*args:把元组中的数据进行拆包,也就是把元组中的数据拆成单个数据。
def run(a,b,c):
print(a)
print(b)
print(c)
args = [6,7,8]
# *args 是把所有的列表/元组元素拆分,脱衣服
run(*args)2)**kwargs:用来接收key=value这种类型的命名参数,把字典中的数据进行拆包。
def run(a,b,c):
print(a)
print(b)
print(c)
# 关键字参数调用
kwargs = {"a":6,"b":7,"c":8}
# **是把字典转化成关键字参数的
run(**kwargs) 8、函数的返回值
上面我们写的函数,调用函数的结果都直接输出在控制台,其实并非所有的函数都会直接输出在控制台,如果我们要拿到这个函数的运行结果,那么就需要用return语句,将函数的运行结果返回来,由你去做进一步的处理。
def run_cases(a=1,b=3,c=3):
for case in range(a):
print(f'正在执行第{case}条用例')
print(b + c)
return 5
# 不会执行下面这条语句
print('函数执行完了吗')
print(run_cases())返回值需要注意:
- 如果你想拿到函数的运行结果,那么必须用return语句。
- return后面的语句,都不会再执行,可以自己去尝试下。
9、函数的局部变量和全局变量
Python中的全局变量与局部变量的区别:全局变量与局部变量两者的本质区别就是在于作用域。
全局变量是在整个py文件中声明,全局范围内都可以访问;局部变量是在某个函数中声明,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就会报错。
一般全局变量会用大写字母来标志,如果是局部变量,就会用小写字母来标志。
- 全局变量在函数内部和外部都可以调用,局部变量只能在函数内调用,否则会报错。
A = 66 # 全局变量
def add():
a = 100 # 局部变量
print(a+A)
add() # 打印结果是166
print(A) # 打印结果是66
print(a) # 报错:NameError:name 'a' is not defined- 函数的外部无法直接获取局部变量,可以间接获取,通过return(返回值)。
a = 1 # 全局变量
def run():
b = 2 # 局部变量
print(b)
return b
print(a)
run()- 如果全局变量和局部变量不一样,那么会优先调用局部变量。
A = 66 # 全局变量
def add():
a = 100 # 局部变量
print(A+A)
add() # 打印结果是200
print(A) # 打印结果是66- 如果想在函数内部改变全局变量的值,那么在全局变量之前加global关键字。
A = 66 # 全局变量
def add():
global A
A = 100 # 局部变量
print(A+A)
add() # 打印结果是200
print(A) # 打印结果是100- 如果全局变量是列表类型,那么我们可以通过append等列表方法去对列表进行修改,否则修改不成功。
list_1 = ['hello',20]
def add():
list_1.append(99)
print(list_1)
add() # 打印结果是['hello',20,99]
print(list_1) # 打印结果是['hello',20,99]10、内部函数
内置函数:Python官方自带的函数,不需要自己定义。
- eval() 函数用来执行一个字符串表达式,并返回表达式的值。
可看以下示例:对表达式的结果进行计算,返回计算后的值
a = "1 + 5 + 3"
print(eval(a)) # 脱掉字符串左右两边的衣服将输入的字符串转为对应的数据类型,列表、元组、字典等数据类型都可以使用这种方式输入
response = '{"username":"sun","age":16}'
print(type(response))
a = eval(response)
print(type(a))- sum() 方法对序列进行求和计算,并返回计算结果。
a = sum([3,4,5,6])
print(a)相关推荐
- 阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?
-
TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...
- 高流量大并发Linux TCP性能调优_linux 高并发网络编程
-
其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...
- 性能测试100集(12)性能指标资源使用率
-
在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...
- Linux 服务器常见的性能调优_linux高性能服务端编程
-
一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...
- Nginx性能优化实战:手把手教你提升10倍性能!
-
关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...
- 高并发场景下,Spring Cloud Gateway如何抗住百万QPS?
-
关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...
- Kubernetes 高并发处理实战(可落地案例 + 源码)
-
目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...
- 高并发场景下,Nginx如何扛住千万级请求?
-
Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...
- Spring Boot+Vue全栈开发实战,中文版高清PDF资源
-
SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...
- Docker-基础操作_docker基础实战教程二
-
一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...
- 你有空吗?跟我一起搭个服务器好不好?
-
来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...
- 部署你自己的 SaaS_saas如何部署
-
部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...
- Docker Compose_dockercompose安装
-
DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...
- 京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统
-
前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...
- Kubernetes (k8s) 入门学习指南_k8s kubeproxy
-
Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
