函数补充

本文深入讲解了Python中的各种函数类型,包括递归函数、匿名函数(lambda)、高阶函数、filter函数、map映射、reduce函数、apply以及zip函数。通过实例演示了每种函数的应用场景和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归函数

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

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
以下是一些 C++ 中高效动态数组函数补充: 1. `reserve()`:该函数用于预留一定大小的内存空间,以便后续向数组中添加元素时不需要频繁地重新分配内存。例如: ```c++ vector<int> v; v.reserve(1000); // 预留1000个元素的空间 ``` 2. `shrink_to_fit()`:该函数用于释放多余的内存空间,以便数组占用的内存尽可能少。例如: ```c++ vector<int> v; v.reserve(1000); // 假设后续只向数组中添加了10个元素 v.shrink_to_fit(); // 释放多余的990个元素的空间 ``` 3. `resize()`:该函数用于调整数组的大小,可以同时指定新的大小和默认值。例如: ```c++ vector<int> v; v.resize(10); // 将数组大小调整为10,新元素默认值为0 v.resize(20, 1); // 将数组大小调整为20,新元素默认值为1 ``` 4. `emplace_back()`:该函数用于在数组的末尾添加一个元素,可直接使用参数创建该元素。与 `push_back()` 不同的是,`emplace_back()` 可以避免拷贝构造函数的调用,因此效率更高。例如: ```c++ vector<string> v; v.emplace_back("hello"); // 直接创建一个字符串添加到数组末尾 ``` 5. `insert()`:该函数用于在数组中指定位置插入元素,可以同时插入多个元素。例如: ```c++ vector<int> v = {1, 2, 3, 4, 5}; v.insert(v.begin() + 2, 6); // 在数组下标为2的位置插入一个元素6 v.insert(v.begin() + 3, 2, 7); // 在数组下标为3的位置插入两个元素7 ``` 以上这些函数可以帮助我们更加高效地使用动态数组,提高程序的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值