函数(一)
一、为什么要引入函数
二、函数的使用
1、函数的定义
1 2 3 4 5 6 7 8 9
|
def 函数名(): 实现功能的代码块(函数体的代码)
def greeting(): print('hi,My name is Mr_lee!')
|
2、函数的调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| a = 5 b = 10 print(a,b)
def greeting(): print('hi,My name is Mr_lee!') print("函数已经定义了")
greeting()
print("over")
|
程序的运行结果:
1 2 3 4
| 5 10 函数已经定义了 hi,My name is Mr_lee! over
|
三、函数的参数和返回值
1、函数的参数
可以把函数比作一个加工厂(面包加工厂),加工厂只负责加工产品,在加工产品需要有原材料,而原材料一般都由外界提供
1 2 3 4 5
| def add(): a = int(input("请输入第一个数:")) b = int(input("请输入第二个数:")) c = a + b print(f"{a}+{b}={c}")
|
修改后:
1 2 3 4 5 6 7
| def add(a,b): c = a + b print(c) x = 3 y = 5 add(x,y)
|
- 形参:形式参数,函数定义时的参数。最开始没有值,值是从实参传过来
- 实参:函数调用时,实际传递给函数的参数 (实参传给形参)
2、函数的返回值
函数相当于一个加工厂,加工厂加工完产品之后,需要送出去
1 2 3 4 5
| def add(a,b): c = a + b print(c) add(3,5)
|
修改后:
1 2 3 4 5 6 7 8 9 10
| def add(a, b): c = a + b return c
result = add(3, 5) print(result)
result = add() print(result)
|
1 2 3 4
| # len()函数的用法 t = [2,4,6,8] l = len(t) print(l)
|
- 如果函数没有定义返回值,默认返回为None
return None
小结:
函数的几个基本形式:
没有参数,也没有返回值
1 2 3 4
| def func(): print('this is a function~~~') func()
|
有参数,但没有返回值
1 2 3 4
| def func(a,b,c): print(a,b,c) func(2,3,5)
|
有参数,也有返回值
1 2 3 4 5 6 7 8
| def func(a,b): return a+b
func(3,5) result = func(3,5) print(result) print(func(3,5)) print(func)
|
四、参数的详解
1、位置参数
1 2 3 4 5 6
| def add(a, b): return a + b
result = add(5,10) print(result)
|
2、关键字参数
1 2 3 4 5 6 7 8 9 10
| def add(a, b): print(a,b) return a + b
result = add(5,10) print(result)
result = add(b=5,a=10) print(result)
|
- 位置参数和关键字参数混合时需要注意:
- 保证每一个形参都可以获取到值
- 位置参数要放在关键字参数的前面
3、参数(形参)的默认值
定义函数时,可以给函数的形参赋一个默认的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def add(a=3,b=5): return a+b
result = add() print(result)
result = add(1) print(result)
result = add(2,3) print(result)
|
1 2 3 4 5 6
| def add(a,b=5,c=3): return a+b
result = add(3) print(result)
|
4、可变长参数
定义函数时,不确定将来函数调用时会传递多少个参数
*args
:函数调用时,传递的实参不受个数的限制,实参会被存放在元组中-args
1 2 3 4 5 6 7 8 9
| def f(*args): print(args) for i in args: print(i)
f(1) f(1, 2, 3) f(1, 2, 3, 4, 5, 6, 7, 8, 9, 90, 0)
|
**kwargs
: 可变长的关键字参数,函数调用时使用关键字参数传参,kwargs
会生成为字典
1 2 3 4 5 6
| def f(**kwargs): print(kwargs) print(kwargs['a'])
f(a=1, b=2, c=3)
|
1 2 3 4 5 6 7
| def f(*args, **kwargs): print(args) print(kwargs)
f(1, 2, 3) f(1, 2, 3, x=4, y=5, z=6) f(x=4, y=5, z=6)
|
函数注释:
1 2 3 4 5 6 7 8
| def add(a,b): """ 这是一个两个数相加的函数 :param a: 第一个参数 :param b: 第二个参数 :return: 返回两个数相加的和 """ return a+b
|
练习:
1 2 3 4 5 6 7 8 9 10 11 12
| def f(n): factorial = 1 for i in range(1, n + 1): factorial *= i return factorial
a = int(input('请输入一个整数n:')) factor = f(a) print(factor)
|
五、函数的嵌套调用
函数的嵌套调用是指在一个函数中,调用另一个函数
1 2 3 4 5 6 7 8
| def f1(): print(123) def f2(): print(456) f1() f2()
|
什么情况下会使用到函数的嵌套调用:
一个函数的功能实现比较复杂,可以将该函数再分解为若干个小的功能模块(函数)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
def is_prime(n): for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False else: return True
def print_prime(): for i in range(2,100): if is_prime(i): print(f'{i}是质数')
print_prime()
|
六、内嵌函数
内嵌/内置/内部函数 inner function
: 在一个函数的内部,再去定义另一个函数
1 2 3 4 5 6
| def f1(): print('this is f1') def f2(): print('this is f2') f1()
|
1 2 3 4 5 6 7 8 9 10
| def f1(): print('this is f1')
def f2(): print('this is f2')
f2()
f1()
|
七、递归函数
递归:一个函数调用它自身 (画中画)
1 2 3 4 5
| def func(): print('哈哈哈哈') func()
func()
|
1 2 3 4 5 6 7
| def factorial(n): if n <= 1: return 1 return n * factorial(n - 1)
print(factorial(5))
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| a = 1 b = 1 for i in range(10): result = a + b a = b b = result print(result)
def fib(n): if n <= 2: return 1 return fib(n-1) + fib(n-2)
for i in range(1,11): print(fib(i))
|