函数
函数:
具有特殊功能的指令的集合
函数的作用:
1、使编程模块化
2、增强代码的重用性
1.定义函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
Python 定义函数使用 def 关键字,一般格式如下:
def 函数名(参数列表): 函数体
注意:
1、参数列表可以为空(没有参数)
2、函数如果没有return,则默认return None
3、函数可以返回多个值(return 1, 2)
2.函数的调用
返回值 = 函数名(实参列表)
def func(a,b): return a+1, b+1 x, y = func(10, 11)
3.函数的参数
- 位置参数(必须参数)
- 关键字参数
- 默认参数
- 可变参数
- 组合参数
位置参数(必须参数)
举例求一栋楼的层数
def floor(h1, h2): return h1//h2 f = floor(30, 3)
注意:
1、h1, h2为函数floor的位置参数
2、传入的参数的个数必须和位置参数的个数一致
3、传入的参数的顺序必须和位置参数的顺序一致
在实际工作过程中,当一个函数有参数时,在函数体内一定要先对参数的合法性进行检查再使用参数!!!!
关键字参数
使用关键字参数允许函数调用传参的顺序和声明时不一致.
def floor(h1, h2): return h1//h2 f = floor(h2=3, h1=10)
默认参数
#函数在实现的时候,某些参数如果没有传递参数,就使用默认参数 默认参数:
在定义函数的时候,给参数一个默认值:
def area(r, pi=3.14): return pi*r*r s = area(10) s = area(10, 3.1415)
如果传参时没有对pi进行赋值,则pi使用默认值3.14
默认参数使用注意事项: 默认参数必须在位置参数后!
可变参数
传入的参数的个数是可变的
def cal(*args): for item in args: print(item) cal(1,2,3) 在函数内部参数 args 接收到的是一个 tuple
#如果传入的参数本身是个list该如何处理?
传参的时候在list前加* arr = [1,2,3,4] cal(*arr) *取列表中的所有的元素
组合参数
在 Python 中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这 5 种参数都可以组合使用
参数定义的顺序必须是:位置参数、默认参数、可变参数和关键字参数
比如定义一个函数,包含上述若干种参数:
def f1(a, b, c=0, *args, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) def f2(a, b, c=0, *, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
在函数调用的时候,Python 解释器自动按照参数位置和参数名把对应的 参数传进去。
f1(1, 2) 结果:a = 1 b = 2 c = 0 args = () kw = {} f1(1, 2, c=3) 结果:a = 1 b = 2 c = 3 args = () kw = {} f1(1, 2, 3, 'a', 'b') 结果:a = 1 b = 2 c = 3 args = ('a', 'b') kw = {} f1(1, 2, 3, 'a', 'b', x=99) 结果:a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
4.高阶函数
高阶函数英文叫 Higher-order function。
一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数。
参数为函数 def bar(): print("in the bar..") def foo(func): func() print("in the foo..") foo(bar)
返回值为函数 def bar(): print("in the bar..") def foo(): print("in the foo..") return bar res=foo() res()
函数名的含义:函数的入口地址。
5.函数的递归
递归函数:在函数内部调用函数本身!
#求n的阶乘 def jiecheng(n): if n == 1: return 1 return n*jiecheng(n-1) print(jiecheng(5)) #求斐波那契数列的第n项 #1 1 2 3 5 8 13 21 34 55 89 def Fibonacci(n): if n == 1 or n == 2: return 1 #第n项=第n-1项+第n-2项 return Fibonacci(n-1)+Fibonacci(n-2) print(Fibonacci(5)) #计算斐波那契数列的前n项的和 def Fibonacci_add(n): if n == 1 or n == 0: return n #第n项+前n-1项的和 return Fibonacci(n) + Fibonacci_add(n-1) print(Fibonacci_add(5))
6.闭包函数
如果一个函数定义在另一个函数的作用域内,并且引用了外层函数的变量,则该函数称为闭包:
def outer(): name = "python" def inner(): print(name) return inner res = outer() res()
1.闭包的原理:
#在Python中,函数对象有一个__closure__属性;
print(res.__closure__)
#通过cell_contents查看具体内容:
print(res.__closure__[0].cell_contents)
当内嵌函数引用了包含它的函数中的变量后,这些变量会被保存在内嵌函数的__closure__属性中,成为内嵌函数本身的一部分。
2.闭包的创建条件:
1、函数内嵌函数
2、内嵌函数(内函数)需要引用外围函数(外函数)中的变量
3、外围函数必须返回内嵌函数
7.匿名函数
关键字:lambda
语法:
lambda 参数列表:表达式
lambda a, b : a+b lambda a, b : a if a > b else b
注意:lambda函数不需要使用return,函数的返回值就是表达式的结果。
匿名函数的作用:
1、省去函数的定义过程,使代码更加精简
2、如果某个简单的功能不会被重复使用到,可以使用匿名函数实现

浙公网安备 33010602011771号