码迷,mamicode.com
首页 > 编程语言 > 详细

python-函数(补充)

时间:2020-06-28 00:22:12      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:ecif   运行   溢出   only   返回值   计算   过多   mic   源码   

def calc(n):
    print(n)
    if int(n / 2) == 0: # 10/2  5/2  2/2
        return n
    res=calc(int(n / 2))
    return res


calc(10)


####打印结果
10
5
2
1

###################################
import time

person_list=[alex,wupeiqi,linhaifeng,zsc]
def ask_way(person_list):
    print(-*60)
    if len(person_list) == 0:
        return 根本没人知道
    person=person_list.pop(0)                    #去除列表的第一个元素,此时列表为去除元素之后的新列表
    if person == linhaifeng:
        return %s说:我知道,老男孩就在沙河汇德商厦,下地铁就是 %person

    print(hi 美男[%s],敢问路在何方 % person)
    print(%s回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问%s... % (person, person_list))
    time.sleep(1)
    res=ask_way(person_list)


    print(%s问的结果是: %res %(person,res))
    return res

res=ask_way(person_list)
print(res)


#####打印结果
------------------------------------------------------------
hi 美男[alex],敢问路在何方
alex回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问[wupeiqi, linhaifeng, zsc]...
------------------------------------------------------------
hi 美男[wupeiqi],敢问路在何方
wupeiqi回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问[linhaifeng, zsc]...
------------------------------------------------------------
wupeiqi问的结果是: linhaifeng说:我知道,老男孩就在沙河汇德商厦,下地铁就是es
alex问的结果是: linhaifeng说:我知道,老男孩就在沙河汇德商厦,下地铁就是es
linhaifeng说:我知道,老男孩就在沙河汇德商厦,下地铁就是

技术图片

 

 

递归的特性:

1、必须有一个明确的结束条件

2、每次进入更深层次递归时,问题规模相比上次递归都应该有所减少

3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时通过栈(stack)这种数据结构实现的,当每次进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

2、匿名函数

匿名函数就是不需要显式的指定函数

#这段代码
def calc(n):
    return n**n
print(calc(10))

#换成匿名函数
calc = lambda n:n**n
print(calc(10))
name=alex

func=lambda name:name+_sb
res=func(name)
print(匿名函数的运行结果,res)

#打印结果
匿名函数的运行结果 alex_sb


##################

func1=lambda x,y,z:(x+1,y+1,z+1)
res1=func(1,2,3)
print(res1)

#打印结果
(2, 3, 4)

匿名函数主要是和其它函数搭配使用的呢,如下

l=[3,2,100,999,213,1111,31121,333]
print(max(l))

dic={k1:10,k2:100,k3:30}


print(max(dic))  #打印结果k3
print(dic[max(dic,key=lambda k:dic[k])])
#################解释说明,有关于max的源码######################
def max(*args, key=None): # known special case of max
"""
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value

With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more arguments, return the largest argument.
"""
pass
res = map(lambda x:x**2,[1,5,7,4,8])
for i in res:
    print(i)

输出
1
25
49
16
64

3、高阶函数

满足俩个特性任意一个即为高阶函数

1.函数的传入参数是一个函数名

2.函数的返回值是一个函数名

array=[1,3,4,71,2]

ret=[]
for i in array:
    ret.append(i**2)
print(ret)

#如果我们有一万个列表,那么你只能把上面的逻辑定义成函数
def map_test(array):
    ret=[]
    for i in array:
        ret.append(i**2)
    return ret

print(map_test(array))

#如果我们的需求变了,不是把列表中每个元素都平方,还有加1,减一,那么可以这样
def add_num(x):
    return x+1
def map_test(func,array):
    ret=[]
    for i in array:
        ret.append(func(i))
    return ret

print(map_test(add_num,array))
#可以使用匿名函数
print(map_test(lambda x:x-1,array))


#上面就是map函数的功能,map得到的结果是可迭代对象
print(map(lambda x:x-1,range(5)))

 

python-函数(补充)

标签:ecif   运行   溢出   only   返回值   计算   过多   mic   源码   

原文地址:https://www.cnblogs.com/Yangyl00/p/13200502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!