前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【测试开发】python系列教程:函数(二)

【测试开发】python系列教程:函数(二)

作者头像
雷子
发布2022-12-29 19:34:45
2190
发布2022-12-29 19:34:45
举报

上一篇

【测试开发】python系列教程:函数

本次分享函数第二篇


正文

之前,我们去分享了函数的基本概念,基本定义,并且写了一些简单的函数。这次继续分享函数。

匿名函数

Python 使用 lambda 来创建匿名函数。

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

代码语言:javascript
复制
lambda 只是一个表达式,函数体比 def 简单很多。
lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

那么如何来实现呢,代码的语法

代码语言:javascript
复制
lambda 函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

实现

代码语言:javascript
复制
x= lambda  a:a*100
print(x(100))

结果:

我们去实现,传递两个参数,最后返回两个参数的和

代码语言:javascript
复制
b=lambda  a,b :a+b
print(b(100,200))

结果:

我们可以吧匿名函数封装到一个方法中,这样可以创建多的匿名 得函数

代码语言:javascript
复制

def myfun(n):
    return lambda  a:a*n

mydoubler = myfun(2)
mytripler = myfun(3)

print(mydoubler(112))
print(mytripler(113))

结果:

匿名函数也可以使用关键字参数进行传递

代码语言:javascript
复制
f= lambda  b,c:b+c
print(f(1,2))
print(f(b=1,c=2))

结果:

上面呢,是匿名函数,接下来,去看下变量的作用域

代码语言:javascript
复制
变量的访问以 L(Local) –> E(Enclosing) –> G(Global) –>B(Built-in) 的规则查找,
即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

演示下:

1. 局部作用域

代码语言:javascript
复制
x = int(3.3)

x = 0
def outer():
    x = 1
    def inner():
        x = 2
        print(x)
    inner()

outer()

结果:

为什么打印2呢,是因为直接在inner中找到了变量x

2.闭包函数外的函数中

代码语言:javascript
复制
x = int(3.3)

x = 0
def outer():
    x = 10
    def inner():
        I=100
        print(x)
    inner()

outer()
代码语言:javascript
复制

执行结果

因为在内部函数 inner 中找不到变量 x,继续去局部外的局部——函数 outer 中找,这时找到了,输出 10。

3.全局作用域

代码语言:javascript
复制
x = int(3.4)

x = 0
def outer():
    def inner():
        I=100
        print(x)
    inner()

outer()

结果

在局部(inner函数)、局部的局部(outer函数)都没找到变量 x,于是访问全局变量,此时找到了并输出。

4. 内建作用域

代码语言:javascript
复制
x = int(300)
g = 101
def outer():
    o = 1
    def inner():
        i = 2
        print(x)
    inner()

outer()
代码语言:javascript
复制
执行结果

在局部(inner函数)、局部的局部(outer函数)以及全局变量中都没有找到变量x,于是访问内建变量,此时找到了并输出。

上面是作用域,下面来分享下如何获取参数的说明文档

代码语言:javascript
复制

def fun():
    '''
    这是一个函数
    :return:
    '''
    pass


print(fun.__doc__)

结果:

装饰器:

装饰器的作用是不改变当前函数的情况下 ,增加一些功能,那么如何去实现呢

实现一个

代码语言:javascript
复制
def log(pr):#将被装饰函数传入
    def wrapper():
        print("**********")
        return pr()#执行被装饰的函数
    
    return wrapper#返回函数的名称
@log
def prt():
    print("这里是北京")

prt()

结果:

装饰器呢,其实是一个特殊的函数。在自动化或开发中,有比较好的作用。

形参和实参

对于函数来说,形式参数简称形参,是指在定义函数时,定义的一个变量名。

代码语言:javascript
复制
def name(age):
    print(age)

其实这里的age就是形参。

那么什么是实参呢

代码语言:javascript
复制
name(1)

其中1就是实参。实参就是调用函数的时候,实际传递的参数。

在Python的新版本中,我们可以定义函数的传递的类型和函数返回的类型,我们看下如何去定义

实现:

代码语言:javascript
复制
def name(age:int)->bool:
    print(age)
    return False
print(name(1))

含义:age是一个int方法,返回的是一个bool类型。

打印

如果我们在编写中传递的类型不对,或者返回的不对,可以看到,编辑器会给我们提示的

而正确输入没有提示:

看下上面的传递A,打印的结果

可以看到,我们传递的类型是错误的,这样,在定义函数的时候,就可以去定义函数的参数的类型,和返回的类型。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 匿名函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档