软件测试技术

当前位置:首页 > 软件测试技术

《Python学习笔记》第三章 (续1)

3.5 函数的返回值

函数的返回值,形象的说是函数结的“果实”;有返回值的函数,称 之为“结果”的函数。例如我们要计算圆的面积:

>>> import math


>>> def area(radius): 

atemp = math.pi * radius * 2

return atemp

“return atemp”语句的意思是:将atemp表达式的值立即返回,表达式可 以是任意复杂的,所以这个函数还可以进一步简化成如下的形式:

>>> import math


>>> def area(radius):

return math.pi * radius * 2

有时根据不同的条件,函数能够有多个返回语句:

def exampass(x):

if (x>=60):

return 1

else:

return 0

这些return语句处于不同的条件语句中,并且只可能有一个return语句被执 行,之后函数就终止了。在有返回值的函数中,一定要保证每个可能的流 程都对应着return语句,请看下面的例子:

def abs(x):

if x<0:

return -x

elif x>0:

return x

此函数缺少了一条对应x=0的return语句,这种情况下,函数返回值是None(注 意N要大写):

>>> print abs(0)

None

None是什么类型呢?可以用函数type检验一下:

>>> type(None)

<type ’NoneType’>

>>> id(None)

504026256

由此可见,None是不属于任何类型的类型。

函数也可以返回布尔值,这种函数的内部作了复杂的测试。例如:

def isDivisible(x, y):

if x%y == 0:

return 1

else:

return 0

这个函数判断x是否能够被y整除,是则返回1,否则返回0。我们还可以使 这个函数更加简洁,而且不再用if语句。

def isDivisible(x, y):

return x%y == 0

如果x能够被y整除,则x%y为0,而0与0是相等的,所以返回1;否则,x%y为 非0,非0的数与0是不相等的,函数返回0。请看他们的执行结果:

>>> isDivisible(23, 2)

0

>>> isDivisible(4, 2)

1

返回布尔值的函数经常用在条件语句中:

if isDivisible(x, y):

print "x被y整除"

else:

print "x不能被y整除"

下面的写法也是对的,但却是画蛇添足,根本没有必要。

if isDivisible(x, y) == 1:

3.6 类型转换

Python提供了将变量或值从一种类型转换成另一种类型的内置函数。int函数能够将符合数学格式数字型字符串转换成整数。否则,返回错误信息。

>>> int("34")

34

>>> int("1234ab")  #不能转换成整数

ValueError: invalid literal for int(): 1234ab

函数int也能够把浮点数转换成整数,但浮点数的小数部分被截去。

>>> int(34.1234)

34

>>> int(-2.46)

-2 

函数float将整数和字符串转换成浮点数:

>>> float("12")

12.0

>>> float("1.111111")

1.111111

函数str将数字转换成字符:

>>> str(98)

 ’98’

>>> str("76.765") 

’76.765’

整数1和浮点数1.0在python中是不同的。虽然它们的值相等的,但却 属于不同的类型。这两个数在计算机的存储形式也是不一样。

3.7 数学函数模块

Python有一个math模块,提供了大部分与数学计算相似的函数。模块 是一个文件,它是功能类似的函数的集合。 

如果我们想利用math模块中的函数,首先要用关键字import引入模块:

>>> import math

然后用点操作符调用模块中的函数:

>>> import math

>>> print math.log10(10)

1.0

>>> print math.sin(1.5)

0.997494986604

如果你不想用点操作符,而直接写出math模块中的函数,需要用下面 的语句重新输入math中的函数:

>>> from math import *

>>> cos(3)

-0.98999249660044542

如果你定义的函数中有与cos同名的,math模块中cos函数将被覆盖,即使 用点操作符也不能调用math中的cos函数。 

在数学模块math中,有两个数学常量:pi和e。

>>> print math.pi

3.14159265359

>>> print math.e

2.71828182846

再看几个数学函数的例子:

>>> math.exp(9) #e的9次幂。

8103.0839275753842

>>> math.pow(3,4) #3的4次幂。

81.0

>>> math.sqrt(3.44) #3.44开平方。

1.8547236990991407

>>> math.sin(math.pi/2) #正弦函数。

1.0

>>> math.cos(math.pi * 3.4) #余弦函数。 

0.30901699437494784

>>> math.fabs(-34.90) #求绝对值。

34.899999999999999

3.8 lambda函数

Python允许你定义一种单行的小函数。定义lambda函数的形式如下:

labmda 参数:表达式

lambda函数默认返回表达式的值。你也可以将其赋值给一个变量。

lambda函数可以接受任意个参数,包括可选参数,但是表达式只有一 个:

>>> g = lambda x, y: x*y

>>> g(3,4)

12

>>> g = lambda x, y=0, z=0: x+y+z

>>> g(1) 

1

>>> g(3, 4, 7)

14

也能够直接使用lambda函数,不把它赋值给变量:

>>> (lambda x,y=0,z=0:x+y+z)(3,5,6)

14

如果你的函数非常简单,只有一个表达式,不包含命令,可以考 虑lambda函数。否则,你还是定义函数才对,毕竟函数没有这么多限制。

相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~