函数与Lambda表达式
一、函数
- Python提供具有强大功能内置函数以及可以自己编写的自定义函数
1. 内置函数
- 内置函数(BIF)是Python自身提供的,其使用方法可以通过help(函数)来获得,输入后,Python会提供相关使用说明
2.自定义函数
(1)相关定义
- 使用def()语句
def self_func(parameter)
pass
return(表达式或值)
- 可以使用pass语句作为占位符,实现空函数
- return返回值,若不写return则返回none
- 默认参数:给某些参数设置默认值,当过程为赋值时,使用默认值。
- 位置参数:按位置顺序传递参数;
- 可变参数:传入的参数个数是可变的,装成元组,用*来表示,个数可以是0,1,2,……
- 关键字参数:用**表示,个数可以是0,1,2,……自动组装成字典
- 命名关键词参数:例如func(n,*,a,**b) *,a是命名关键词参数
- 各种参数的顺序:位置参数-默认参数-可变参数-命名关键字参数-关键字参数
def myfunc(name,ID,age=20,*others,**otherss)#name和ID是位置参数,age是默认参数,*other是可变参数,**是关键词参数
name=input("输入姓名:")
……
sentence="{0}的年龄和ID分别是{1}和{2}".format(name,ID,age)
return(sentence)
(2)局部变量与全局变量
- 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal来声明了。
a=1
def func1(a,b)
global a
return(a+b)
(3)内嵌函数与闭包
- 闭包:如果在一个内部函数里引用外层非全局变量,那么内部函数就被认为是闭包。
- 修改闭包作用域中的变量需要 nonlocal 关键字
#内嵌函数
def outfunc(x):
print("out"*x)
y=x+1
def innerfunc(y):#innerfunc()是一个闭包
print("innerfunc"*y)
innerfunc(y)
>>>outfunc(2)
outout
innerfuncinnerfuncinnerfunc
(4)递归
- 定义:函数调用自身的过程
#典例:斐波那契数列
def fibo(num):
if num <= 1:
return num
return fibo(num - 1) + fibo(num - 2)
>>> fibo(1)
1
>>> fibo(6)
8
二、lambda函数(匿名函数)
- 表达式 lambda 参数: expression
square = lambda x : x**2
>>> square(2)
4
- 可以与filter()和map()连用
filter(function, iterable) 过滤序列,过滤掉不符合条件的元素
map(function, iterable, …) 根据提供的函数对指定序列做映射。
#过滤
small = lambda x: x<100
list1 = random.sample(range(1,1000),20)
slist = filter(small, list1)
>>> print(list(slist))
[94, 7, 8]
#map
map1 = map(lambda x: x+100, list1)
>>> print(list(map1))
[194, 983, 413, 717, 318, 475, 884, 602, 406, 1037, 861, 107, 798, 691, 386, 359, 108, 857, 965, 422]