从前面的章节中,我们已经熟悉了print()、input()、和len()函数。Python提供了这样一些内建函数,但你也可以编写自己的函数。
下面,我们就编写一个属于自己的函数:
def hello():
print('Howdy!')
print('Howdy!!')
print('Hello there.')
hello()
hello()
hello()
运行结果如下:
Howdy!
Howdy!!
Hello there.
Howdy!
Howdy!!
Hello there.
Howdy!
Howdy!!
Hello there.
由上程序可以观察得到,函数定义的目的是为了节省代码,消除了一些重复,使其更简洁。在程序中,我们一般避免代码的重复是为了防止代码出现错误去改写大量的代码。
Def语句是定义函数的,def之后的代码块是函数体,这段代码在函数刚定义时并不执行,只有当函数被调用时才会执行。
函数的调用是指函数名加上(),它的再次出现意味着开始执行上面定义函数内的代码块。如果遇到这些函数,那么程序的执行就会跳到函数的第一行,开始执行那里的代码。如果执行到达函数的末尾,则继续执行函数调用之后的代码,继续像以前一样往下执行代码。
Def语句及其参数
像上面定义的hello()函数,函数名为hello,并未给其设置特定的参数,所以函数为hello().当然,也可以像print()函数一样为函数设置函数的参数。如下:
def hello(name):
print('Hello '+name)
hello('Alice')
hello('Bob')
函数执行后的结果为:
Hello Alice
Hello Bob
在这个函数的定义中,我们为其定义了一个名为name的变元,当我们启用函数调用时,函数内部的参数就自动代入name变元处出现的地方,开始运行。
当Alice代入变元中运行之后,就返回Hello Alice。当运行完毕之后,保存在变元中的Alice就消失了。所以,执行下一条程序时,变元自动代入Bob,开始执行。
返回值及return语句
如果调用len()函数,并向它传入向‘Hello’这样的参数,函数调用求值就为5.这是传入字符串的长度,一般来说,函数调用求值的结果,称为函数的返回值。
用def语句创建函数时,可以用return语句指定应该返回什么值,return语句应包含以下部分:
return关键字。
函数应该返回的关键字或表达式。
如果return语句中使用了表达式,返回值就是该表达式求值的结果。如下程序:
def change(a):
if a==1:
return'It is good.'
else:
return'Oh,no!'
a=input('请输入一个整数:')
print(change(a))
程序运行结果是:
请输入一个整数:2
Oh,no!
None值
None值是一种数据类型,表示没有值。前面提到的len()函数及自定义的change()函数都是有特定的返回值的,如果一些函数并不返回具体的内容,那么函数运行完毕之后不能返回特定的值,只能返回None。
如:
>>> spam = print('Hello!')
Hello!
>>> None==spam
True
由以上在IDLE界面的运行结果可知,print()函数的效果就是直接将其打印在屏幕上,下面继续测试spam中保存着何值,发现spam中保存着的是None值。
关键字参数和print()
大多数参数是由它们在函数调用中的位置来识别的。例如random.randint(1,10)与random.randint(10,1)不同。函数调用random.randint(1,10)将返回1到10之间的一个随机整数,因为第一个参数是范围的下界,第二个参数是范围的上界(而random.randint(10,1)会导致错误。)
但是,‘关键字参数’是由函数调用时加在它们前面的关键字来识别的。关键字参数通常可用于可选变元。例如,print()函数有可选的变元end和sep,分别指定在参数末尾打印什么,以及在参数之间打印什么来隔开它。
如果运行以下程序:
print('Hello')
print('World')
执行结果为:
Hello
World
但如果运行以下程序:
print('Hello',end='')
print('World')
执行结果为:
HelloWorld
由此可以看出,print()函数末尾处默认是自动换行符,但也可以通过关键字参数end自动设置每行的末尾。
Print()函数还有sep内置函数。如果向print内传入多个字符串值,该函数就会自动用一个空格来分隔它们。在交互式环境中输入以下代码:
>>> print('cats','dogs','mice')
cats dogs mice
>>> print('cats','dogs','mice',sep=',')
cats,dogs,mice
领取专属 10元无门槛券
私享最新 技术干货