通过前面的学习我们认识了print(),input(),len()基本的函数,在接下来的学习时间里我们可以自编写函数,调用函数。
def hello():
print('Howdy!')
print('Howdy!!!')
print('Hello there.')
hello()
hello()
hello()
第一行是def语句,它定义了一个名为hello()的函数。def语句之后的代码块是函数体后面的hello()便是调用函数hello()。
1.1def语句与参数
如果调用print()或len()函数,你会传入一些值,放在括号之间,在这里称为“参
数”。也可以自己定义接收参数的函数。在文件编辑器中输入这个例子,将它保存
为helloFunc2.py:
def hello(name):
print('Hello ' + name)
hello('Alice')
hello('Bob')
运行结果:
Hello Alice
Hello Bob``
1.2返回值和return语句:
如果调用len()函数,并向它传入像’Hello’这样的参数,函数调用就求值为整数5。
这是传入的字符串的长度。一般来说,函数调用求值的结果,称为函数的“返回值”。
用def 语句创建函数时,可以用return 语句指定应该返回什么值。return 语句包
含以下部分:
return 关键字;
函数应该返回的值或表达式。
如果在return 语句中使用了表达式,返回值就是该表达式求值的结果。例如,
下面的程序定义了一个函数,它根据传入的数字参数,返回一个不同的字符串。在
文件编辑器中输入以下代码,
import random
def getAnswer(answerNumber):
if answerNumber == 1:
return 'It is certain'
elif answerNumber == 2:
return 'It is decidedly so'
elif answerNumber == 3:
return 'Yes'
elif answerNumber == 4:
return 'Reply hazy try again'
elif answerNumber == 5:
return 'Ask again later'
elif answerNumber == 6:
return 'Concentrate and ask again'
elif answerNumber == 7:
return 'My reply is no'
elif answerNumber == 8:
return 'Outlook not so good'
elif answerNumber == 9:
return 'Very doubtful'
r = random.randint(1, 9)
fortune = getAnswer(r)
print(fortune)
在这个程序开始时,Python 首先导入random 模块。然后getAnswer()函数被
定义。因为函数是被定义(而不是被调用),所以执行会跳过其中的代码。接下来,
random.randint()函数被调用,带两个参数,1 和9。它求值为1 和9 之间的一个随
机整数(包括1 和9),这个值被存在一个名为r 的变量中。
getAnswer()函数被调用,以r 作为参数。程序执行转移到getAnswer()函数的
顶部,r 的值被保存到名为answerNumber 的变元中。然后,根据answerNumber
中的值,函数返回许多可能字符串中的一个。程序执行返回到程序底部的代码行,
即原来调用getAnswer()的地方。返回的字符串被赋给一个名为fortune 变量,然
后它又被传递给print()调用,并被打印在屏幕上。
1.3None值
在Python 中有一个值称为None,它表示没有值。None 是NoneType 数据类型
的唯一值(其他编程语言可能称这个值为null、nil 或undefined)。就像布尔值True
和False 一样,None 必须大写首字母N。
如果你希望变量中存储的东西不会与一个真正的值混淆,这个没有值的值就可
能有用。有一个使用None 的地方就是print()的返回值。print()函数在屏幕上显示文
本,但它不需要返回任何值,这和len()或input()不同。但既然所有函数调用都需要
求值为一个返回值,那么print()就返回None。要看到这个效果,请在交互式环境中
输入以下代码。
>>> spam = print('Hello!')
Hello!
>>> None == spam
True
在幕后,对于所有没有return 语句的函数定义,Python 都会在末尾加上return
None。这类似于while 或for 循环隐式地以continue 语句结尾。而且,如果使用不
带值的return 语句(也就是只有return 关键字本身),那么就返回None