Day5 - 02 定义函数
Python中定义函数要使用def语句。
依次写出函数名、括号、括号中的参数和冒号,在缩进块中编写函数体,通过return语句返回函数返回值。如:
def my_abs(x):
if x >= 0:
return x
else:
return -x
一旦执行到return,函数就执行完毕。即使函数未使用return语句,函数执行完毕后也会返回结果,只是结果为None。
return None可以简写为return。
>>> def kk(x):
... if x == 0:
... return 'zero'
... elif x < 0:
... x = x + 1
... return x
... elif x > 0:
... return x - 100
...
>>> kk(10)
-90
>>> kk(0)
'zero'
>>> kk(-100)
-99
函数保存到文件后的调用
如果已经将定义的函数定义保存为.py文件了(如:aaa.py),那么可在该文件的当前目录下启动Python解释器,使用 from aaa import kk 来导入存放在aaa.py文件中的 kk() 函数 , 文件名不含.py扩展名。
空函数
定义一个什么也不做的空函数,可以使用pass语句,如:
def nothing():
pass
空函数可以用来做占位符,例如,在程序框架阶段,可能函数的详细代码还未去完成,可以先写一个pass语句,让代码框架能运行起来。pass还可以在其他语句中(如 if)使用。
先对比一下定义函数和内置函数的不同:
1.定义一个求绝对值的函数abs_own,
def abs_own(x):
if x > 0:
return x
else:
return -x
2.现在对该函数传送错误参数,如:
>>> abs_own(5)
5
>>> abs_own(-5)
5
>>> abs_own('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in abs_own
TypeError: unorderable types: str() > int()
3.对内置求绝对值函数abs传送错误参数,如:
>>> abs(-5)
5
>>> abs('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'
通过对比2和3的结果,定义函数的报错信息与内置函数的报错信息不同,定义函数在遇到参数数据类型不对时,无法为我们进行参数检查。
isinstance() 数据类型检查
用abs_own()举例子,要求传入的参数只可以是整数或浮点数,如果参数非法则抛出错误信息:
def abs_own(x):
if not isinstance(x, ( int , float ) ):
raise TypeError( 'bad operand type' )
if x >= 0:
return x
else:
return -x
再次进行错误参数传递,结果为:
>>> abs_own(5)
5
>>> abs_own(-5)
5
>>> abs_own('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in abs_own
TypeError: bad operand type #抛出了预定的错误信息。
函数返回多个值
实际上,函数返回的是单一值(其实是一个tuple), 因为在返回tuple时可以省略括号,所以多个变量可以通过获取tuple元素位置的方式,按照位置来获取对应的值。
练习:定义函数,解一元二次方程ax^2 + bx + c = 0
def fangcheng(a,b,c):
if not isinstance(a, (int,float) ):
raise TypeError(print(a,'must be a number'))
if not isinstance(b, (int,float) ):
raise TypeError(print(b,'must be a number'))
if not isinstance(c, (int,float)):
raise TypeError(print(c,'must be a number!'))
if pow(b,2) - 4 * a * c < 0:
return('无解')
else:
x = []
x.append( ( -b + math.sqrt(pow(b,2) - 4 * a * c)) / (2 * a) )
x.append( ( -b - math.sqrt(pow(b,2) - 4 * a * c)) / (2 * a) )
return x
xii = int(input('2 number'))
xiii = int(input('3 number'))
print(fangcheng(xi,xii,xiii))
#对abc的值的判断其实有问题,如果b、c为0 ,那么这个函数就报错了。
Day5 - 02 定义函数的更多相关文章
- PHP自己定义函数及数组
个人原创博客:http://www.phpthinking.com/archives/350 一.自己定义函数 自己定义函数就是我们自己定义的函数.在PHP中自己定义函数格式例如以下: 1 funct ...
- Entity Framework 6 Recipes 2nd Edition(11-1)译 -> 从“模型定义”函数返回一个标量值
第11章函数 函数提供了一个有力代码复用机制, 并且让你的代码保持简洁和易懂. 它们同样也是EF运行时能利用的数据库层代码.函数有几类: Rowset Functions, 聚合函数, Ranking ...
- Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 用”模型定义”函数过滤实体集
11-2. 用”模型定义”函数过滤实体集 问题 想要创建一个”模型定义”函数来过滤一个实体集 解决方案 假设我们已有一个客户(Customer)和票据Invoice)模型,如Figure 11-2所示 ...
- Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 为一个”模型定义”函数返回一个计算列
11-3. 为一个”模型定义”函数返回一个计算列 问题 想从”模型定义”函数里返回一个计算列 解决方案 假设我们有一个员工(Employee)实体,属性有: FirstName, LastName,和 ...
- Entity Framework 6 Recipes 2nd Edition(11-4)译 -> 在”模型定义”函数里调用另一个”模型定义”函数
11-4.在”模型定义”函数里调用另一个”模型定义”函数 问题 想要用一个”模型定义”函数去实现另一个”模型定义”函数 解决方案 假设我们已有一个公司合伙人关系连同它们的结构模型,如Figure 11 ...
- Entity Framework 6 Recipes 2nd Edition(11-5)译 -> 从”模型定义”函数返回一个匿名类型
11-5. 从”模型定义”函数返回一个匿名类型 问题 想创建一个返回一个匿名类型的”模型定义”函数 解决方案 假设已有游客(Visitor) 预订(reservation)房间(hotel ) 的模型 ...
- Entity Framework 6 Recipes 2nd Edition(11-6)译 -> 从一个”模型定义”函数里返回一个复杂类型
11-6.从一个”模型定义”函数里返回一个复杂类型 问题 想要从一个”模型定义”函数返回一个复杂类型 解决方案 假设我们有一个病人(patient)和他们访客(visit)的模型,如 Figure 1 ...
- Javascript学习笔记:3种定义函数的方式
①使用函数声明语法定义函数 function sum(num1,num2){ return num1+num2; } ②使用函数表达式定义函数 var sum=function(num1,num2){ ...
- 应用C#和SQLCLR编写SQL Server用户定义函数
摘要: 文档阐述使用C#和SQLCLR为SQL Server编写用户定义函数,并演示用户定义函数在T-SQL中的应用.文档中实现的 Base64 编码解码函数和正则表达式函数属于标量值函数,字符串分割 ...
随机推荐
- SQL SERVER数据库内 FOR XML PATH 函数用法
把自己点点滴滴的学习记录下来!!!! 一.FOR XML PATH 简单介绍 那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(TBJTXXCE)用来存放就诊患者信息,表结构 ...
- Linux(CentOS6.8)配置Redis
1.Redis简介 Redis:REmote DIctionary Server(远程字典服务器). Redis是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分 ...
- iczer的vue-antd-admin项目,逐步平滑迁移mock的url
这个需求,在实战中蛮有用的.但没有看到网上太多文档,就自己hack了一个思路.供指正. 需求 在前后端分离的项目开发中,前后端的开发步骤和进度是不一致的.有时,前端为了不等待后端的API开发进度,会自 ...
- BRT快速公交系统的可视化实践
前言 随着城市进程的加快,中国城市机动车的数量飞速增长,造成城市交通拥堵问题越来越严重,城市居民对于改善出行条件的需求尤其是公共交通的便捷性问题也越来越迫切.而BRT(快速公交系统)作为一种新型的客运 ...
- xdebug不显示
- bootstrap-datetimepicker的两种版本
1.引入js/css <link rel="stylesheet" th:href="@{/plugin/bootstrap-datetimepicker/boot ...
- 你也想当流量UP主?那就点开看看吧!
2009年6月份,哔哩哔哩(B站)在一众期待中诞生,它汇聚了天南海北当时小众的二次元同好,它也存在诸多不足,大家亲切地叫它"小破站". 而如今,它成长为一棵枝繁叶茂的参天大树,成为 ...
- Word 2013中如何直接调用MathType
相信有很多用户已经发现在使用Word 2013编辑文档时MathType无法直接调用,但是点击文档中的公式时能够跳出MathType公式编辑窗口,那么这是怎么回事呢?其实,这一问题也不是没有办法解决的 ...
- 让mac电脑更简单运行Windows软件的CrossOver,优势知多少?
如今,一些iPhone和iPad机型拥有Face ID功能,此功能作用允许用户通过面部识别来解锁设备.该功能还不能在Mac上使用,但是国外媒体于7月27日报道称,在公测第三版的macOS Big Su ...
- synchronized底层揭秘
前言 上篇文章我们从硬件级别探索,对可见性和有序性的认识上升了一个高度,却迟迟没有介绍原子性的解决方案. 今天我们就来聊一聊原子性的解决方案,锁. 引入锁机制,除了可以保证原子性,同时也可以保证可见性 ...