Python测试开发之函数
对于初学者而言,感觉函数还是不是很好理解,尤其是当写一个脚本,或者是写一个算法,认为可能for循环就已经可以解决的问题为什么还要用函数来实现呢?
今天就来说一下函数的优点,其实函数的最大优点就是可重用,一个函数实现后可以被其他不同的脚本来调用,这也就是体现了代码的重用性。
- 函数的定义:def 函数名():,在定义函数时,一定要用关键字def开头,然后紧接着是函数名,括号里是要传的的参数,当然也可不传,最后面是个冒号:
def add(x,y):
return x+y
这就是一个最简单的函数
2.函数的返回值:Python中自定义的函数如果有return,则返回实际的结果,如果没有返回值,则返回None,这是Python与其他语言的区别之一
3.函数的调用:在定义好一个函数后,如果要实现函数的功能,一定要对其进行引用,不然函数体是不会被执行的,调用的方法也很简单,就是函数名和需要的参数即可
例如上边add函数的调用: add(2,3)即可返回5

注意:此处如果传入两个字符串也是OK的,这也是Python的特殊之处,他会根据传入的值来进行相应操作,如果传入的是两个数字,则进行相加,如果是两个字符串则进行拼接,但是此处必须传入的类型一致,否则会报错,所以可以根据你的需要进行处理,如果要做特定的实现可以用isinstance来判断一下类型,来达到自己想要的效果。


4.函数的传参:函数的参数分为按值传递和按地址传递。按值传递是将不可变的参数传递给函数,按地址传递是将可变的参数传递给函数。此处的可变参数与不可变参数是相对内存地址而言的,如果传入的是字符串、元祖、数字,是不可变对象,就是按值传递,为什么说是不可变的,例如如果将a=1这样一个变量传递给函数,那么就是说将1的内存地址传给函数,那么计算机给1分配过内存地址后就不会在变化,所以说在函数体内对a做的任何操作都不会影响函数体外a的值,来看一个例子就会比较好理解了:
a =1
def print_sth(s):
s=s+1
return s
print print_sth(a)
print a
执行结果:

下面我们来看一下原理:
这就是按值传递的原理,当函数体内对a进行加1操作,实际是指向另一个内存地址了,用id()就可以查看内存地址
5.看了按值传递的原理,按引用传递应该就好理解了,按引用传递就是传递一些可变参数,例如list、dict等,先来看一下他们的内存地址的变化:

可以看到当你在对一个list进行操作时,它指向的内存地址实际是没有变化的,所以说当传递可变参数时,函数体内对变量的操作是会影响函数体外的变量的,看一个例子就更明白了:

现在对函数的按值传递和按引用传递参数应该非常了解了吧。
6.可变参数的表示:*args表示传入的是一个元祖,**args表示传入的是一个字典,在实际使用中当不确定要传入多少个参数时,就可以使用这种方法:
def func(a,*args):
for i in args:
a +=i
return a

你会发现,你传递几个参数都不会出问题,这就是可变参数的好处,然后看一下**args吧:

看完这些,你是否对函数有了很大理解,现在应该感觉函数可以实现很多你想要实现的功能吧,这可不仅仅是几个for循环就能实现的哦,赶快学学函数吧,这也是后面写好代码的基础。
Python测试开发之函数的更多相关文章
- python测试开发django-rest-framework-63.基于函数的视图(@api_view())
前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...
- python测试开发django-36.一对一(OneToOneField)关系查询
前言 前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示.本篇继续学习一对一(OneToOneField)关系的查询. 上一篇list_d ...
- python测试开发django-15.查询结果转json(serializers)
前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse ...
- 2019第一期《python测试开发》课程,10月13号开学
2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20: ...
- Python测试开发-创建模态框及保存数据
Python测试开发-创建模态框及保存数据 原创: fin 测试开发社区 前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎 ...
- Python测试开发-浅谈如何自动化生成测试脚本
Python测试开发-浅谈如何自动化生成测试脚本 原创: fin 测试开发社区 前天 阅读文本大概需要 6.66 分钟. 一 .接口列表展示,并选择 在右边,点击选择要关联的接口,区分是否要登录, ...
- python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)
前言 xadmin的详情页面主要是用form_layout布局,学会了完全可以不用写html代码,也能做出很好看的页面. xadmin的html页面是用的Bootstrap3框架设计的,layout布 ...
- python测试开发django-16.JsonResponse返回中文编码问题
前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面 ...
- 【python测试开发栈】python基础语法大盘点
周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...
随机推荐
- css实现的交互运动
<style type="text/css"> .filter-mix { position: absolute; top: 50%; left: 50%; trans ...
- Java基础总结--多线程总结2
----多线程通信-----1.概述:多个线程处理同一个资源,但是各自的任务不相同eg:线程1负责存储数据,线程2负责处理该数据.数据--就是同一个资源怎样用java语言描述上面的例子:* 资源是变化 ...
- await和async更多的理解
最近有不少网友提起await和async,呵呵,C# 5引进的语法糖. 这个语法糖还真不好吃,能绕倒一堆初学的朋友,在网上也有很多网友关于这块知识点的争论,有对有错,今天在这里把这个误区好好讲讲. 在 ...
- $(window).on("load",function(){} 和 $(document).ready(function() {}
$(window).on("load",function(){ //页面属性,图片,内容完全加载完,执行 } $(document).ready(function() { 或者$( ...
- python 生成器和迭代器
迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退) 2.可迭代对象:实现了 ...
- 一个简单大方的赞后+1,踩后-1js动画效果
js部分 <script type="text/javascript"> <!-- $(document).ready(function(e) { $('a.zh ...
- Count the Colors
Count the Colors Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Subm ...
- 关于安卓手机的牛逼软件termux使用
最近在学着用linux,偶尔发现了一款神奇的软件--termux,termux是一款来自国外的终端模拟器,是运行在内部存储上的程序(不在内存卡上),功能比较强大,启动程序之后会进入命令行终端,需要基本 ...
- Linux 文件系统模型
声明:本文仅限于 cnblogs 发布,其他第三方网站均为盗版,原文地址:Linux 文件系统模型 在 Linux 环境下有过一些经历的同学可能都会遇到一个问题,这个问题就是往机器上插入 U盘 或者其 ...
- MYSQL触发器在PHP项目中用来做信息备份、恢复和清空
案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...