高阶函数_递归函数_内置函数

       最近挺喜欢纯音乐的,比如暴力一点的star sky、victory、go time、the mass...今天发现了一首特好安静的纯音乐,叫做桜(ying)道。清风推门开,疑是故人来,又是一年秋分至,门扉如旧,我该以什么理由想起你呢,以星月,以静默……对了,今天秋分。

#Author:"haijing"
#date:2018/9/23
#上节回顾
# s2=set('alvin')
# print(s2) #打印 {'i', 'l', 'n', 'a', 'v'}
# s2.add('op') #此时op作为一个整体加入到s2中去
# print(s2) #打印{'i', 'l', 'op', 'n', 'a', 'v'}
#
# s3=set('alvin')
# s3.update('op') #此时o和p分开加到s3中去
# print(s3) #打印{'a', 'n', 'i', 'o', 'p', 'v', 'l'}
#
# #在集合中加数字,必须把数字放入列表中,如
# s4=set([1,2,3])
# print(s4)

# def f(*arg):
# print(arg)
# a=[1,2,3]
# f(a) #打印([1, 2, 3],),此时这个列表作为了一个元素
# f(*a) #打印(1, 2, 3)

# def f2(**kwargs):
# print(kwargs)
# b={'name':'haijing'}
# f2(**b) #打印一个字典 {'name': 'haijing'}

#高级函数
# def f(n):
# return n*n
#
# def f3(a,b,func): #这里的f即上面定义的函数
# return func(a)+func(b)
#
# a = f3(1,2,f) #函数本身f()是一个对象,而函数的名字f是一个变量,函数名可以赋值
# print(a)


# def f():
# def inner():
# return 8
# return inner()
# a=f()
# print(a) #此时打印的是8


# def f():
# def inner():
# return 8
# return inner
# a=f() #此时a就是inne()这个函数的地址
# print(a) #此时打印的是inner()这个函数的地址
# b=a()
# print(b) #此时打印的就是8了

#递归函数
#阶乘 5!=5*4*3*2*1=120
# def fat(n):
# # for i in range(n): #i=0、1、2、3、4......n-1
# # ret = ret*i #此时ret恒为零,所以不行

#改进,用循环实现
# def fat(n):
# ret = 1
# for i in range(1,n+1): #i=1、2、3、4......n-1,n此时i从1开始取
# ret = ret*i #此时ret恒为零,所以不行
# return ret
# print(fat(5)) #打印120

#再改进,用递归函数,自己调用自己,但是效率低
# def fat(n):
# if n==1:
# return 1
# else:
# return n*fat(n-1)
# print(fat(5)) #即5*f(4) f(4)=4*f(3) f(3)=3*f(2) f(2)=2*f(1) f(1)=1


#斐波那契数列fibo= 0,1,1,2,3,5,8,13,21,34,55......第n个数等于第n-1个数+第n-2个数
#fibo(0)=0 这个可以自己设置的,即设置n<=1时fibo(0)=0;m<=2时,fibo(1)=0
#解析,fibo(8)=fibo(7)+fibo(6)
# def fibo(n):
# if n<=1:
# return n
# else:
# return fibo(n-1)+fibo(n-2)
# print(fibo(3))

#自己的想法
# def fibo(n):
# if n==0 or n==1: #刚刚自己写的是and
# return n #而且这里刚刚自己写的是 return 0
# else:
# return fibo(n-1)+fibo(n-2)
# print(fibo(8))

#内置函数
#filter(a,b) a是一个函数名字,b是一个序列
# str=['a','b','c','d']
# def fun(s):
# if s != 'a':
# return s
# ret = filter(fun,str) #filter实现一个过滤器的作用
# print(ret) #打印<filter object at 0x02EE5590>
# print(list(ret)) #打印['b', 'c', 'd']

#map(a.b) a是一个函数名字,b是一个序列
# str=['a','b','c','d']
# def fun(s):
# return s + 'alcin'
# ret = map(fun,str) #map实现一个添加元素的作用
# print(ret) #打印<map object at 0x02985590>
# print(list(ret)) #打印['aalcin', 'balcin', 'calcin', 'dalcin']

#reduce(a,b) a是一个函数名字,b是一个序列,其结果就是一个值
# from functools import reduce #要想使用reduce()这个函数,就必须加上这一句话
#
# def add(x,y):
# return x+y
# #range(1,10)表示1,2,3,4...9
# print(reduce(add,range(1,10))) #打印45 1到9相加

# lambda x,y:x*y #一句话实现两个数相乘,不用再定义函数,但是相当于一个函数


from functools import reduce #要想使用reduce()这个函数,就必须加上这一句话
b = reduce(lambda x,y:x*y , range(1,6)) #实现1到5相乘,即5的阶乘
print(b)

haijing in HZ
miss min
2018.9.23







posted @ 2018-09-23 22:20  兵临城下的匹夫  阅读(163)  评论(0编辑  收藏  举报
TOP