第八章 函数设计与应用
第八章 函数设计与应用
一、函数定义和使用
1、基本语法
def 函数铭([参数列表]):
""注释""
函数提
2、递归函数
函数在执行过程中又调用了函数自己
回文:
def isPalindrome(text):
if len(text)<=1:
return True
if text[0]!=text[-1]
return False
return isPalindrome(text[1:-1])
3、函数嵌套定义
修饰器
二、函数参数
1、位置参数
常用参数,调用函数时的实参和形参顺序必须严格一致,数量必须相同。
def demo (a,b,c):
print(a,,b,c)
2、默认值参数
def 函数名(.....,形参名=默认值):
函数体
3、关键参数
参数按照参数名传值
demo(c=1,b=7,a=4)
1 7 4
4、可变长度参数
形参对应的参数数量不确实,一个形参接受对个实参。
*p接受多个实参,并放置到元组
>>> def domo(a,b,c,*p):
print(a,b,c)
print(p)
>>> demo(1,2,3,4,5,6)
123
(4,5,6)
**p接收任意多个关键参数并放入字典
>>> def demo(**p):
for item in p.items():
print(item)
>>> demo(x=1,b=4)
('x',1)
('b',4)
三、变量作用域
1、局部变量:部分函数区域影响
2、全局变量
global x
3、nonlcal变量
4、内置对象
四、lambda表达式
声明匿名函数,没有名字,临时使用
常用在临时需要一个函数的功能,但不想定义函数的场合
只能包含一个表达式,部运行包括选择结构和循环结构等语法
lambda arguments: expression
#arguments:是输入到函数中的参数,可以有多个,用逗号隔开。
#expression:是一个单一的表达式,lambda 函数返回这个表达式的结果。
add = lambda x, y: x + y
print(add(5, 3)) # 输出 8
# 使用 map() 和 lambda 来对一个列表中的每个元素进行平方
numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x**2, numbers)
print(list(squared)) # 输出 [1, 4, 9, 16, 25]
# 使用 filter() 和 lambda 来过滤出偶数
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 输出 [2, 4, 6]
五、生成器函数
yield
关键字用于定义生成器函数(generator functions)。生成器函数允许你创建一个迭代器,它可以在需要时逐个生成值,而不是一次性生成所有值。这使得生成器在处理大量数据或无限序列时非常高效,因为它们只占用与当前产生的值相对应的内存。
如:
def square_generator(n):
for i in range(n):
yield i ** 2
# 使用for循环遍历生成器并打印每个值
for square in square_generator(5):
print(square)
0
1
4
9
16
#斐波那契数列
def fibo():
a,b=1,1
while True:
yield a
a,b=b,a+b
seq=fibo()
for num in seq:
if num>500:
break
print(num,end=' ')
1 1 2 3 5 8 13 21 34 55 89 144 233 377