开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情。
一、函数的定义
下面是一个函数定义的大致框架。
其中形参列表可以没有,也可以有若干个;函数体一定要有一级缩进,之前的博客也提到过缩进在Python中非常关键;return语句可有可无。
def 函数名 (形参列表1, 形参列表2, ……):
函数体(注意要带有一级缩进)
return 返回值
这里给出一个求和的例子来帮助理解。
# 定义一个求和函数
def calSum(begin, end):
res = 0
# 注意range的范围是左闭右开
# 注意for需要以:结尾
for i in range(begin, end + 1):
res += i
print(res)
calSum(1, 100)
calSum(101, 200)
运行结果如下图。
Python中还要求函数必须先定义、再使用。
如果先调用函数、后定义函数,编译就会报错。
二、返回值
1.返回值的使用
Python中函数的返回值与C/C++中的返回值没有太大区别,而且由于Python动态类型的特性,在使用时会更加简单。
下面的代码和前面功能完全相同,只不过是使用了return将结果返回。
# 定义一个求和函数
def calSum(begin, end):
res = 0
# 注意range的范围是左闭右开
# 注意for需要以:结尾
for i in range(begin, end + 1):
res += i
return res # 用返回值将结果传回调用函数的位置
print(calSum(1, 100))
res = calSum(101, 200)
print(res)
2.返回多个值
一个函数可以返回多个值,这是Python的一个很好用的特性。
def getPoint():
x = random.randint(0, 10) # 生成0~10的随机数
y = random.randint(0, 10)
return x, y # 同时返回两个值
# 一次性定义两个变量
a, b = getPoint()
print(a, b)
# 不需要关注第一个返回值,用_占位,更多的语法这里不展开讲
_, y = getPoint()
print(y)
运行结果如下:
三、 形参默认值
Python中的函数定义时可以给形参赋予默认值,带有默认值的形参,在调用时可以不传入参数。这个特性和C++中的规则是相同的。
def add(x, y, debug = False):
if debug:
print(f'x = {x}, y = {y}')
return x + y
res = add(10, 20)
print(res)
res = add(10, 20, True)
print(res)
这段代码在debug为真时会打印x、y的值,默认为假,此时不打印。
注意默认参数必须在非默认参数之后,否则编译器无法确定传入的参数应该给哪个形参。
四、 关键字参数
一般的传参方式是按照形参的先后顺序传入实参的,某一位置的实参赋给相同位置的形参,这种风格也叫作“位置参数”,也是各个编程语言中最普遍的传参方式。
Python提供了一种新的传参方式,即关键字参数。
def add(x, y):
print(f'x={x} y={y}')
add(x=20, y=10)
add(y=10, x=20)
上面的函数在调用时即可无视形参的顺序问题,直接指定某一个形参为设定的值,更加清晰。
运行结果如下,两种方式是等价的。
需要特别注意的是位置参数和关键字参数可以混合使用,但混用时要注意位置参数在前,关键字参数在后。