python基础---->函数
一、函数介绍
在学习函数之前,我们编程一直遵循面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能;
而学了函数之后,我们可以把相同作用的代码放到一个函数中;这样显然程序的重用性和可读性要好一些
这也是函数式编程和面向过程编程的区别:
函数式:将相同作用的代码封装到函数中,之后调用函数即课使用
面向过程:根据问题逻辑从上到下写强堆代码......
二、函数的定义和使用
1、一般函数的定义
def func(name): # name是形式参数 print(name) # 函数体 func('clint') # 执行函数,'clint'是传入的实参
传递一个默认参数
def info(name,age,country = 'China'): #country定义了一个默认参数 print('姓名:',name) print('年龄:',age) print('国家:',country) info('clint',18) #调用时,没穿实参countrty,就用默认的参数
正常情况下,给函数传参数要按顺序,不想按顺序就指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后
def info ... info(age=18,name='clint') #使用关键参数,可以不按顺序
*args 和 **kwargs
def info(name,age,*args): #*args会把多传入的参数变成一个元组形式 def info(name, *args, **kwargs): # **kwargs 会把多传入的参数变成一个dict形式
2、内置函数
三、递归函数
递归函数:函数在内部调用自身。
符合递归函数的条件:
1. 结束条件;
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少;
3. 递归效率不高,递归层次过多会导致栈溢出
PS:python默认最大递归数为999,但可通过以下代码进行设置:
import sys sys.setrecursionlimit(10000) # 将递归数设置为10000
实例:
斐波那契数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,...
版本一:
# -*- coding:utf-8 -*- __Author__ = "Clint" fibonaccis = [] def fibonacci(n): if n == 1 or n == 2: return 1 else: return fibonacci(n - 1) + fibonacci(n - 2) for i in range(1, 10): fibonaccis.append(fibonacci(i)) print(fibonaccis)
版本二:
# -*- coding:utf-8 -*- __Author__ = "Clint" def fib(max): n = 0 a = 0 b = 1 while n < max: print(b) a, b = b, a + b # ===> 赋值语句相当于 t=(b,a+b) a=t[0],b=t[1] n += 1 return 'done' fib(10)
再来一个n的阶乘,求n!
#递归实现阶乘n! = (n-1)! × n def fac(n): if n == 1: return 1 else: return n * fac(n-1) print(facl(10))
四、匿名函数lambda
# ###################### 普通函数 ###################### # 定义函数(普通方式) def func(arg): return arg + 1 # 执行函数 result = func(123) # ###################### lambda ###################### # 定义函数(lambda表达式) my_lambda = lambda arg : arg + 1 # 执行函数 result = my_lambda(123)
五、map()、reduce()、filter()函数
map()是 Python 内置的高阶函数,它接收一个函数 func和一个list,并通过把函数 func依次作用在 list 的每个元素上,得到一个新的 list 并返回
def func(x): return x * x a= map(func,range(1,10)) print(list(a)) # 输出为[1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce()函数接收的参数和 map()类似,接收一个函数 func和一个list,但reduce()传入的函数 func 必须接收两个参数,reduce()对list的每个元素反复调用函数func,并返回最终结果值
from functools import reduce def func(x,y): return x + y a = reduce(func,[1,3,5,7,9,10]) print(a) # 输出为: 35
filter()函数也是接收一个函数 func和一个list,函数 func的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list
def is_odd(x): return x % 2 == 1 a = filter(is_odd,[1,2,3,4,5,6,7,8]) print(list(a)) # 输出为:[1, 3, 5, 7]
六、内嵌函数
在一个函数体内创建另外一个函数,这种函数就叫内嵌函数
def foo(): print("in the foo") def bar(): print("in the bar") bar() foo() # 输出为: in the foo in the bar