1、初始函数
函数的定义
Python 中使用 def 关键字开头定义函数
def function_name(parameters): function body return value
- function_name:函数的名称(函数名区分大小写)
- parameters:函数的参数(参数可以可以有一个或多个,也可以没有参数,参数之间通过==逗号( , )==分隔)
- function body:函数体(需要缩进四个空格或一个 Tab 键)
- return value:函数的返回值(没有返回值时,可以省略)
在定义函数时,即使没有参数,函数名称后面也必须有一对空 ()。
函数体和函数的返回值相对于 def 关键字必须保持缩进。def helloFunction(name): print('Hello', name) helloFunction('Python') #调用函数
函数的返回值
1、如果在函数中只有 return 关键字,后面没有返回值,返回 None。
如果不指定 return 关键字,结果同样会返回 None,即该函数没有返回值。def no_value(): return print(no_value())
2、Python 中的函数可以返回多个值,而且值的类型也可以不同,当有多个返回值时,默认返回的是一个元组
def values(): str1 = 'Python' num1 = 2222 list1 = [1, 2, 3] return str1, num1, list1 print(values())
2、函数的参数
位置参数
即定义多少参数就要传入多少参数,并且顺序与类型要一致
关键字参数
def area(height, width): total_area = height * width return total_arae print(area(width = 11, height = 220))
如果传入的关键字参数在形参中没有定义,程序就会出错。
关键字参数的位置顺序对实际输出的结果没有影响,只要在函数调用时指定的是对应的参数即可。
默认参数
def student(age, name = 'Spring'): print(age) print(name) student(8)
- 默认参数必须定义在所有形参之后
可变参数
1、基于元组可变参数
使用 *parameter 的形式定义函数中的参数,可以接受任意多个实参,并将其放入元组中。
def print_name(*name): print(name) print_name() print_name('Spring') print_name('A', "B") print_name('Bob', 'Peter', 'Meg')
2、基于字典的可变参数
使用 **parameter 的形式定义函数中的参数。
使用这种方式在调用函数时,必须通过关键字参数的形式来传递参数。def student_info(**info): print(info) student_info() student_info(name = 'Mary') student_info(name = 'Jack', age = 18) student_info(name = 'Spring', age = 20, stu_id = 1123)
3、变量的作用域
局部变量
全局变量
通过关键字 global 在函数体内定义的变量也可以被称为全局变量
str1 = 'ABC' def var(): global str1 str1 = 'DEF' print(str1) var() print(str1) # 两个str1输出结果相同
4、内置函数和匿名函数
内置函数
内置函数(BIF)是 Python 提供的函数
https://docs.python.org/zh-cn/3.8/library/functions.html
匿名函数
匿名函数也叫 Lambda 函数,指一种没有名字的函数
- 程序只需要执行一次,不需要另外定义函数名
- 需要以函数作为参数,但是函数本身十分简单,且只使用一次
参数可以有多个,使用逗号( , )分隔;
但是表达式只能有一个,即返回一个值。def sub(a, b): return a - b print(sub(77, 7)) print(lambda x, y: x - y) sub = lambda x, y: x- y print(sub(88, 8))
函数文档
在实际开发中,个人的代码需要和其他人进行衔接,多数的时候需要先阅读文档,帮助理解代码功能和函数。(其意义与代码注释是相同的)
通过 “”“ ”“”的形式,其中包括函数的功能、参数说明、返回值、日期等;
除了输出函数的返回值外,还可以通过函数调用 __doc__ 获取文档的字符串,即函数文档def score(a, b, c): """ A, B, C's scores """ return a + b + c print(socre.__doc__)
5、函数的递归
在函数内部可以调用自己。
简单的递归
1、求阶乘:
def factorial_fun(n): if n == 1: return 1 return n * factorial_fun(n - 1) num = int(input()) print(factorial_fun(num))
2、斐波那契数列
def fibonacci_fun(n): if n <= 2: return 1 return fibonacci_fun(n - 1) + fibnacci_fun(n - 2) num = int(input()) print(fibonacci_fun(num))
3、汉诺塔问题
def hanoi(n, a, b, c): if n == 1: print(a, '--->', b) else: hanoi(n-1, a, c, b) print(a, '--->', c) hanoi(n-1, b, a, c) num = int(input()) hanoi(num, 'A', 'B', 'C')