前面介绍了如何使用函数,这一节我们就来学习怎么创建自己的函数!
自定义函数
创建函数非常简单,它使用关键字 “def”,下面的代码创建了一个带有一个参数的函数,并使用不同的参数调用
def hello(name):
print('hello', name)
hello('feather') # 调用函数,传入参数 'feather'
hello('csdn') # 调用函数,传入参数 'csdn'
运行程序可以得到下面输出:
hello feather
hello csdn
可以看到,传入的参数被赋值给变量name,然后执行函数内的代码块,对!这也是一种代码块,注意后面的冒号
函数并非一定要有参数,我们完全可以定义一个不带参数的函数,比如这个
def hello():
print('hello world!')
像获取输入的函数input,返回用户的输入,我们也可以在函数中使用return语句来返回数据,下面是一个计算斐波那契数列第n项的函数
def fibs(num):
if num == 1:
return 0
elif num == 2:
return 1
elif num > 2:
previous = 0 # 前一项
current = 1 # 当前项
for i in range(num-2):
temp = current
current = previous + current # 当前项等于前两项和
previous = temp
return current
else:
# num < 1
return None
num = int(input('计算第几项:'))
print(fibs(num))
简单说下斐波那契数列,除了第一和第二个数,后面的数等于前两个数相加,这样的一组数可以叫做斐波那契数列。
就算不懂斐波那契数列也没关系,只需要知道当函数内的代码执行到return语句时,马上结束函数,并把return后面的值(如果有)返回给调用者,上面把返回值马上又做为参数去调用print函数输出了。
函数的末尾无论是否有return,都会返回到调用处,其实相当于函数的末尾有一个隐含的没有返回值的return语句(前面提到过,所谓的“没有返回值”,其实返回了一个None,None是“空”的意思,这很好理解)
默认情况下,参数值和参数名称是按函数中定义的顺序匹配起来的。
下面总结函数的定义的基本格式:
def 函数名(参数1,参数2,参数3):
函数体
参数可以改变吗?
看看下面的代码,有没有一点出乎意料?
>>> def change(n):
... n = 'abc'
...
>>> name = 'feather'
>>> change(name)
>>> name