函数补充

递归函数

在一个函数体的内部,调用函数本身,就被称为递归函数。

def func(n):
    print(n)
    if int(n/2)==0:
        return n
    return func(int(n/2))

print(func(10))

结果:
10
5
2
1
1
def fib(n):
    if n==1:
        return 1
    if n==2:
        return 1
    else:
        return fib(n-1)+fib(n-2)

print(fib(11))

匿名函数(lambda)

  • 格式:

    lambda para1,para2,...,paraN:expression using paras
def add(x,y,z):
    return x+y+z

print(add(1,2,3))
等效于:

f=lambda x,y,z:x+y+z
print(f(1,2,3))

高阶函数

​ 高阶函数:把一个函数名,以实参的形式,传递给这个函数的形参,这个函数就成为高阶函数。

def pow(x):
    return x**2

def add(a,b,func):
    return func(a)+func(b)

a_value=add(-9,5,pow)
print(a_value)

filter函数

f1=filter(lambda sr:not sr.endswith("ty"),li)
print(list(f1))

功能:

  • 过滤掉序列中不符合函数条件的元素。当序列中要保留的元素可以用某些函数描述时,就应该想到filter函数。

调用格式:

  • filter(function,sequence)

    • function—>可以是自定义的函数,也可以匿名函数

    • sequence—>列表,元组,字符串

map映射

功能

  • 求一个序列或者多个序列进行函数映射后的值。(用list()强转)

格式

  • map(function,iterable1,iterable2)
    • funciton 的参数可以不止一个
    • iterable1,iterable2就是传入function的参数
li = [1, 2, 3, 4, 5]
res = map(lambda x:x + 1, li)
print(list(res))

x = [1, 2, 3, 4, 5]
y = [2, 3, 4, 5, 6]

res = map(lambda x, y: x * y + 2, x, y)
print(list(res))

结果:
[2, 3, 4, 5, 6]
[4, 8, 14, 22, 32]

reduce函数

  • 功能:

    • 对一个序列进行压缩运算,得到一个value。
    • python2中,reduce()是内置函数,而现在,python3中,它被移植到functools模块中。
    • from functions import reduce
  • 格式:

    • reduce(function,iterable,[initial])
      • function必须要传入两个参数
      • Iterable—>列表/元组

apply

功能

  • pandas中,应用对象是pandas中的DataFrame或者Series
  • 直接对DataFrame或者Series应用函数
  • 对pandas中grouphy之后的聚合对象应用apply

zip

  • 将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,返回由这些元组构成的对象
  • 长度不一样的时候,以长度短的为准

注:

利用*号操作符,与zip相反,进行解压。

格式:

zip(iterable1,iterable2,…)

  • iterable—>两个或者多个可迭代序列(字符串,列表,元组,字典)
    • py2,由元组组成的列表
    • py3,返回的是一个对象,如果要得到一个列表,list()强转

回文数:

#回文数
def filter(n):
    str_x = str(x)

    return str_x == str_x[::-1]

print(filter(121))
结果:
True
print(list(filter(lambda x:str(x)==str(x)[::-1],range(1,1000))))

结果:
[1,2,...,252,262,...,989,999]

global

a=6688
def foo():
    global a
    print("foo(),修改前a:\t",a)
    a=666
    print("foo(),修改后a:\t", a)

def bar():
    print("bar(),a:\t",a)

foo()
bar()
a=6688
def foo():
    a = 666
    def inner_foo():
        global a
        print('1',a)
        a=888
        print('2',a)
    inner_foo()
    print('3',a)

print('4',a)
foo()
print('5',a)

结果:
4 6688
1 6688
2 888
3 666
5 888
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值