【测试开发】python系列教程:函数(二)
上一篇
本次分享函数第二篇
正文
之前,我们去分享了函数的基本概念,基本定义,并且写了一些简单的函数。这次继续分享函数。
匿名函数
Python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
那么如何来实现呢,代码的语法
lambda 函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
实现
x= lambda a:a*100
print(x(100))
结果:
我们去实现,传递两个参数,最后返回两个参数的和
b=lambda a,b :a+b
print(b(100,200))
结果:
我们可以吧匿名函数封装到一个方法中,这样可以创建多的匿名 得函数
def myfun(n):
return lambda a:a*n
mydoubler = myfun(2)
mytripler = myfun(3)
print(mydoubler(112))
print(mytripler(113))
结果:
匿名函数也可以使用关键字参数进行传递
f= lambda b,c:b+c
print(f(1,2))
print(f(b=1,c=2))
结果:
上面呢,是匿名函数,接下来,去看下变量的作用域
变量的访问以 L(Local) –> E(Enclosing) –> G(Global) –>B(Built-in) 的规则查找,
即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。
演示下:
1. 局部作用域
x = int(3.3)
x = 0
def outer():
x = 1
def inner():
x = 2
print(x)
inner()
outer()
结果:
为什么打印2呢,是因为直接在inner中找到了变量x
2.闭包函数外的函数中
x = int(3.3)
x = 0
def outer():
x = 10
def inner():
I=100
print(x)
inner()
outer()
执行结果
因为在内部函数 inner 中找不到变量 x,继续去局部外的局部——函数 outer 中找,这时找到了,输出 10。
3.全局作用域
x = int(3.4)
x = 0
def outer():
def inner():
I=100
print(x)
inner()
outer()
结果
在局部(inner函数)、局部的局部(outer函数)都没找到变量 x,于是访问全局变量,此时找到了并输出。
4. 内建作用域
x = int(300)
g = 101
def outer():
o = 1
def inner():
i = 2
print(x)
inner()
outer()
执行结果
在局部(inner函数)、局部的局部(outer函数)以及全局变量中都没有找到变量x,于是访问内建变量,此时找到了并输出。
上面是作用域,下面来分享下如何获取参数的说明文档
def fun():
'''
这是一个函数
:return:
'''
pass
print(fun.__doc__)
结果:
装饰器:
装饰器的作用是不改变当前函数的情况下 ,增加一些功能,那么如何去实现呢
实现一个
def log(pr):#将被装饰函数传入
def wrapper():
print("**********")
return pr()#执行被装饰的函数
return wrapper#返回函数的名称
@log
def prt():
print("这里是北京")
prt()
结果:
装饰器呢,其实是一个特殊的函数。在自动化或开发中,有比较好的作用。
形参和实参
对于函数来说,形式参数简称形参,是指在定义函数时,定义的一个变量名。
def name(age):
print(age)
其实这里的age就是形参。
那么什么是实参呢
name(1)
其中1就是实参。实参就是调用函数的时候,实际传递的参数。
在Python的新版本中,我们可以定义函数的传递的类型和函数返回的类型,我们看下如何去定义
实现:
def name(age:int)->bool:
print(age)
return False
print(name(1))
含义:age是一个int方法,返回的是一个bool类型。
打印
如果我们在编写中传递的类型不对,或者返回的不对,可以看到,编辑器会给我们提示的
而正确输入没有提示:
看下上面的传递A,打印的结果
可以看到,我们传递的类型是错误的,这样,在定义函数的时候,就可以去定义函数的参数的类型,和返回的类型。
相关文章
- 【视频】Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析|数据分享|附代码数据
- Python pip 安装与使用
- python安装easyinstall/pip出错
- pybind11 大大简化 Python 调用 C/C++
- 4 年时间让 Python 性能提升 5 倍
- Python 越来越优雅了
- Python-3.12 性能分析特性
- 手把手教你MacOS系统下Python的安装和配置
- 如何在Rstudio中使用Python?
- 基于Prometheus的监控告警系统的Python开发
- 用Python机器学习模型预测世界杯结果靠谱吗?附代码数据集
- 挑战30天学完Python:Day1火力全开-初识Python(含系列大纲)
- python自动化之BeautifulReport显示异常的解决方案
- Python遍历列表remove漏删解决方案
- python之pyinstaller打包问题系列(二)
- python之对比两张图像的相似度
- python之筛选图像中是否存在黑白背景
- 利用Python实现视频号自动赚钱一条龙
- 用 Python 写 3D 游戏,太赞了
- 成都核酸系统崩了,东软被市民连夜骂上了热榜第一,我用Python爬取了评论区,发现...