python零基础到实现UI自动化 (5)

前言

 

        有被朋友偶然知道我自己写学习博客还写前言,开玩笑说我装高手,其实一方面是格式化一方面也是想说随心所欲的写点东西,没有那种很好组织语言的功力,单纯每天或者每几天都能够复习一下先前有接触过的或者继续学到的东西;事实上今天看到了朋友在工作上的分享,能够体会得到他对学到知识的深度会更切入,且能够将多个知识点串在一起完成为一个项目的实现思路,这一点是真的非常厉害。

        说的太多废话了,沉下心来踏踏实实进步!回顾先前函数知识点只是涉及到基本的def定义后,有return返回关键字或者是用函数名()进行调用,亦或是对第三方/系统库的模块和包进行导入,从而使用的他们写好的一个个函数来实现我们想要完成的事情。

        这次的更新是记录一些函数的更进阶的一部分的内容。

1.变量的进阶

        1.1引用

        有学过编程语言的同学会知道,我们在定义变量的时候,变量和数据 都会在内存开辟空间,因此变量所对应的内存空间中存储的是 数据所在内存的地址(平时理解为  将数据存储到变量中即可),而变量中保存数据的地址,就称为是引用。

        在我们python中所有数据的传递,传递的都是引用(即地址),如果想要实际的进行查看可以使用id(变量)函数,查看变量的引用,如下图所示

        不难看出其实引用就是实际在计算机当中占用的地址,单纯的把变量存储的数据更换了不会更改引用。

        这是以当个数据的例子,那如果是像列表这样容器的数据呢,我们可以想象的出来列表是多个数据那么它占用的地址引用就不会是单独的一块而是相对于连续的一片地址,可以如下图所示来理解

       

        1.2可变类型与不可变类型

        我们一般会根据内存中的数据是否允许修改,将数据类型分为可变类型与不可变类型;简单理解就是不使用等号,能不能修改数据值,这部分先前在介绍容器部分里也有简单的提到过。

        先说不可变类型,不允许修改的都是一些基础的数据类型如:数字类型的(int整型,float浮点型,bool布尔型),str字符串,tuple元组。

        可变类型也就是可以修改的类型一般为:list列表(list.append()),dict字典(dict),集合这样的可变类型。

        1.3局部变量 

        字面意思,只在函数内部定义的变量就可以称为局部变量。局部变量的特点如下:

        1.只能在当前函数的内部使用

        2.可以在不同函数内定义名字相同的局部变量

        3.在函数被调用去执行的时候创建局部变量,执行完成或者结束后被销毁

        4.如果想要在函数外部使用局部变量的值,使用return 返回

ps:形参一般可以被认为是局部变量

        1.4全局变量

        全局变量的其实就是在函数外边直接声明变量,它的特点如下:

        1.可以在任意函数内访问(读取)

        2.想要在函数内部修改全局变量的引用,需要使用 global 关键字声明(使用 global 关键字可以声明为全局变量)

        3.如果在函数内部出现和全局变量相同的局部变量,在函数内部使用的是局部变量

        4.全局变量是在代码执行的时候创建,执行结束后销毁

具体的全局变量和局部变量的区别如下图

2.函数进阶

         2.1函数返回多个数据值

        还记得我们前面说的函数返回有一个关键字吗,没错就是return,这里再重新回忆一下,return的作用是为了让我们在函数外部去调用它能够返回想要的数据值,那么它对应着还有个作用就是函数结束运行结束它的生命周期也需要return。

        既然我们说到了返回数据值,之前我们一般都是返回单个的数据值,那么如果我们返回的数据值是多个呢?返回的形式是什么样的呢,在这里可以先提前说明,返回多个数据值的形式是以元组返回,我们之后如果用到元组也是以传参或者数据来使用这种数据类型。

        

         2.2函数传参的方式

        我们传参主要就是如何将  实参的值传递给形参

        2.2.1位置传参

        其实也就是函数在调用的时候按照 形参的顺序将实参的值传递给形参

        2.2.2关键字传参

        在函数调用的时候,可以指定将实参传递给某个形参

        2.2.3混合使用

        我们如果想要混合的使用传参的方式,那么我们必须把位置参数写在关键字参数的前边,关键字参数必须放在后边;同一个形参只能接收一个实参值(不能又使用位置传参和关键字传参给同一个形式参数)

        具体的可以看下面代码的演示

 

        2.3缺省参数和多值参数(可变参数/不定长参数)

        2.3.1缺省参数(默认参数)

        见名知其意,这里的默认参数就是在我们定义函数的时候就给形式参数定义了一个值,如果不传递实参数值,那么就是使用定义的默认值,btw这个参数必须写在普通参数的后面!不然也会报错的~

         2.3.2多值参数        

        直接来看定义吧

         可能理解起来不太容易理解,其实我们的实参的个数不一定是具体和我们形参的个数一一对应的,有可能是有多个实参传入一个参数,比如我们计算任意个数字的和这么一个函数,我们想传递就是需要用到前面元组的形式。来看下面的代码:

         那么可能会好奇,只有列表是一个星那么如果是两个星的话也会传递参数吗,传递的是什么参数,我们可以来试试看

        通过查看我们args具体的数据类型和输出它的内容,我们可以看到我们如果是用字典的实际参数就可以让参数变为多值参数,在参数名前面加上两个* 就可以了。 

        2.3.3补充

        那么,如果我们把普通的位置参数和缺省参数和多值参数同时一起传递呢,这个位置也有优先排列顺序吗?很显然是有的,我们的顺序如下

def 函数名(普通,*args,缺省)

         按程序执行的效果来看会更好理解:

        2.4匿名函数

         匿名函数是使用lambda 关键字 定义的表达式,语法是

lambda 参数, 参数: 一行代码   # 只实现简单的功能,只能写一行

        可以看得出它真的很“精简”,直接把函数的名字都去了,所以叫匿名函数,由关键字lambda后面直接跟着参数,然后执行实现的代码。 正因为这样“精简”,一般来说,我们定义匿名函数也不会直接调用,是把它作为函数的参数来使用的。

        随意写一个很简单的匿名函数,比如我们的求和函数;在这里我们不需要给lambda表达式赋值,也不需要使用def,我们作为函数的参数也只书写一次。

        平常常用的匿名函数,一般是作为返回值,比如说我们在一个都是字典数据类型的列表里,想要对列表中的字典进行排序,那么就需要一个形参来指定根据字典中的什么键来进行排序。我们可以定义这样一个func函数,它传入的形参x是我们的字典数据,那么返回的值就是对应的键值,我们通过返回的键值来做比较。那么可以写出下面的函数

def func(x):
    return x['age']

print(列表.sort(key=))  # 对数字从小到大排序,对字符串用字母顺序排

# key是sort()方法里的一个参数,因此是固定写的

         由上面的函数,我们改成匿名函数即可得到:lambda x:x['age'],我们通过匿名函数得到的就是我们想要的键值也就是key=lambda x:x['age'],因此我们输出最后的语句就是

        上面这个就是匿名函数中一种很常用的形式,用来传递我们的参数值,当然很简单的函数执行我们耶可以为了有b格一句话就把它输出了。

总结

        这篇函数的稍微拓展了一部分的知识回顾,其实就是让一些比较细节的东西再记忆起来,原本可能对于多值参数或者匿名函数折这些用的很少的概念都不会有印象,这样二次的进行一个回忆能够对基础概念有更好的一个理解,同样的最近开始有看一些JavaScript的基础概念,也是作为语言开始接触到的相似的一些内容,多梳理多回忆,总能扫到边边角角。 下一次更新就开始进入面向对象的思维了,能够和函数一样更友好的帮助我们提高代码的效率。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值