1.函数的定义
def functionName(list of parameters):
# fucntion body
示例:
def sum(i1, i2):
result = 0
for i in range(i1, i2 + 1):
result += 1
return result
def main():
print("Sum from 1 to 10 is", sum(1, 10))
print("Sum from 20 to 37 is", sum(20, 37))
if __name__ == "__main__":
main()
2.参数的传递
- 位置参数:按函数中定义的顺序传递参数,而且数量、类型必须相匹配
- 关键字参数:指定要传递的参数的名字,通过 name = value 的形式传递每个参数。通过关键字传参可以以任何顺序出现。
- 二者混合出现:位置参数不得出现在任何关键字参数之后
函数
def func(p1, p2, p3):
正确的调用方式:
func(30, p2 =4 , p3 = 10)
错误的调用方式:
func(30, p2 =4 , 10)
3.通过传引用来传递参数
调用函数时,实参的值就被传递给形参,这个值通常就是对象的引用值,这种方式被称作值传递。
也就是说,如果室参事一个数字或者字符串的时候,不管函数中的形参怎么变化,这个实参是不受影响的。
这样的原因是因为数字字符串被称作不可变对象。不可变对象的内容是不能被改变的。
当你将一个新数字赋值给变量时,Python会为这个新数字创建新对象,然后将这个新对象的引用赋值给这个变量。
4.模块化代码
- 在Python中你可以将函数的定义放置在一个模块文件中,这种文件的后缀为.py,之后这些模块可以被导入到程序中以实现重用。
- 这些模块文件应该和其他程序放到一个地方
- 一个模块可以包含不止一个函数,每个函数都有不同的名字,如果模块中有两个名字相同的函数,那么前面的函数会被忽略。
- 关于函数的重载问题:Python并不像Java、C++那样支持函数重载(函数同名不同参),但是Python提供的位置参数和关键字参数机制,使其传参方式变得多样化,间接地实现了函数的重载问题。
- Turtle、random、math等模块是定义在Python库中的模块,这样它们可以被导入到任何一个Python程序中。
5.变量的作用域
- 局部变量:数内部定义的变量,只能在函数内部被访问。
- 全局变量:在所有的函数之外创建,可以被所有的函数所访问。在函数中定义的变量也可以通过用
global
关键字来修饰变成全局变量。 - 请注意,尽管允许使用全局变量,但是在一个函数中允许修改全局变量并不是什么好习惯,因为这样会是程序更容易出错。
6.默认参数值
- Python允许定义带默认参数值的函数。当函数被调用时无参数,那么这些默认值就会被传递给实参。
例如:
def printArea(width = 1, height = 2):
area = width * height
print("width:", width, "\t height:", height, "\t area:", area)
printArea()
printArea(width = 1.2)
7.返回多个值
Python的return语句允许返回多个值
def sort(num1, num2):
if num1 < num2:
return num1, num2
else:
return num2, num1
n1, n2 = sort(3, 2)
print("n1 is", n1)
print("n2 is", n2)