斐波那契数列:
# 1.必须要有出口 # 2.必须自己调用自己 def fib_func(i): # 初始值设置 如果n是0 或1 则直接返回本身 if i == 0 or i == 1: # 只要执行return 本次函数调用终止 return i return fib_func(i-2) + fib_func(i-1) # 传递一个数 然后就是打印前几位 for x in range(12): print(fib_func(+x), end=" ")
la'mbda:
# 一个函数只有一行代码 def func1(): return 100 print(func1()) # 使用lambda表达式 将上面的代码 转化为一行代码 func2 = lambda: 200 print(func2())
# 普通方法实现 def func1(a , b): return a + b print(func1(2, 3)) # :前面传递的是参数 后面是返回值 func2 = lambda a, b: a + b print(func2(3, 4))
# 无参数 print(lambda: 100) # 这是函数 print((lambda: 100)()) # 这是函数的调用 print((lambda a: a)("hello World")) print((lambda a, b, c=100: a + b + c)(200, 300)) # 可变参数 传递的所以参数都使用args接收 *必不可少 print((lambda *args: args)(100, 150, 200)) # 可变参数 传递的是键值对 print((lambda **kwargs: kwargs)(name="python", age=27))
# 带判断的返回值 # 使用普通函数返回较大值 def func1(a, b): # 比较大小 if a >= b: return a else: return b result = func1(100, 500) print(result) # 一行代码返回较大值 def func1(a, b): # 比较大小 return a if a >= b else b result = func1(1000, 500) print(result) # 带有if判断的lambda表达式 func2 = lambda a, b: a if a >= b else b print(func2(233, 89))
# 定义一个学生列表 然后对他进行排序 students = [ {"name": "ll", "age": 88}, {"name": "ss", "age": 5}, {"name": "dd", "age": 3} ] # def func1(c): # return c["age"] # func2 = lambda c: c["age"] # students 会把数据传递给func1 # 返回值 会按照升序进行排序 students.sort(key=lambda x: x["age"], reverse=False) print(students) # 降序进行排序 students.sort(key=lambda x: x["age"], reverse=True) print(students)
a = -9 # abs 是绝对值函数 b = abs(a) print(b) def func1(a, b, c): # f = abs # print(a, b, c) print(a ,b ,c) return c(a) + c(b) # abs 这个函数传递给f 将函数作为参数进行传递 result = func1(-6, 7, abs) print(result)
lst = [1, 2, 3, 4, 5] # 计算x的平方 def func1(x): return x ** 2 # # 普通方法 # lst1 = [] # for i in lst: # print(func1(i), end=" ") # lst1.append(func1(i)) # print(lst1) # 返回的是一个map对象 # python2 result是列表 # python3 result是迭代器 result = map(func1, lst) print(result) # 迭代器循环获取 for i in result: print(i) # 迭代器转换为列表 result2 = list(result) print(result2, type(result2)) ''' 迭代器和列表的区别 迭代器和列表的本质都是容器 迭代器循环获取之后 里面的内容就被拿走了,就是空的容器 列表循环获取之后 里面的内容还在,列表持久化了。 迭代器,CPU去迭代器中选择工作,工作完成后不会重复执行同一个工作 【工作1, 工作2, 工作3】 '''
import functools lst = [1, 2, 3, 4, 5] def func1(a,b): return a + b # lst中的值 依次传递给func1 # reduce 会将lst 中的前两个数相加, 然后在和第三个数 一起传递给func1 然后在结果在和第四个数··· result = functools.reduce(func1, lst) print(result)
# lst = [1, 2, 3, 4 , 5, 6, 7, 8, 9,10] # # def func1(x): # return x % 2 == 0 # # # 过滤函数 返回一个filter对象 # result = filter(func1,lst) # print(result) # # print(list(result))
!!!!!!!!!!!!!