当前位置:首页>python>Python函数修炼手册:新手到大佬的九九八十一难

Python函数修炼手册:新手到大佬的九九八十一难

  • 2026-09-02 19:22:44
Python函数修炼手册:新手到大佬的九九八十一难

一、重新认识Python函数:不只是工具,更是“一等公民”

      在Python中,函数的功能非常强大,它不仅仅是实现某项功能的代码块,更是一个可以自由操作的“对象”(Object)。这为编程带来了极大的灵活性。

一个简单的函数:

def test():

    print('这是一个普通的测试函数')

为什么说函数是“对象”?它有什么神通?

1.可以添加属性:像普通对象一样,给函数“贴标签”。

test.desc = '测试使用,请勿在正式环境下部署'

test.version = '1.0'

2.可以赋值给变量:让函数换个“名字”使用。

my_test = test 现在 my_test 和 test 指向同一个函数

my_test() 输出:这是一个普通的测试函数

3.可以作为参数传递:将函数作为“礼物”送给另一个函数。

def callit(func):

    print('开始调用另一个函数:')

func()

    callit(test) 将test函数作为参数传入

4.可以作为返回值:一个函数可以“生出”另一个函数,这在闭包和装饰器中很常见。

二、玩转函数参数:灵活应对各种调用场景

    Python为函数的参数设计提供了极大的便利,让你不再为参数个数和顺序发愁。

l默认参数:给参数一个备选值,调用时可以省略。

def greet(name, greeting='你好'): greeting默认为‘你好’

    print(f'{greeting}, {name}!')

greet('小明') 输出:你好,小明!

greet('小红', greeting='Hello') 输出:Hello,小红!

l可变参数(*args 和 kwargs)**:能像“百宝箱”一样接收任意数量的参数。

o*args:接收任意数量的位置参数,打包成元组。

okwargs:接收任意数量的关键字参数,打包成字典。

def show_msg(*args, **kwargs):

    print(f'所有位置参数:{args}')

    print(f'所有关键字参数:{kwargs}')

show_msg(1, 2, 3, name='小明', age=18)

输出:

所有位置参数:(1, 2, 3)

所有关键字参数:{'name': '小明', 'age': 18}

l参数解包(Unpacking):反过来,把一个列表或字典“拆开”传给函数。

numbers = [10, 20]

info = {'sep': '---', 'end': '!!!'}

解包传参

print(*numbers, **info) 等价于 print(10, 20, sep='---', end='!!!')

三、高阶函数与匿名函数:让代码更抽象、更简洁

高阶函数(Higher-Order Function)

定义:把函数作为参数,或者把函数作为返回值的函数。

作用:实现“行为参数化”,让核心逻辑和具体操作分离,代码复用性更高。

def info(message):

    return '[提醒]' + message

def warn(message):

    return '[警告]' + message

def log(level_func, text):

"""高阶函数:接收一个函数(消息级别处理函数)作为参数"""

processed_msg = level_func(text)

print(processed_msg)

log(info, '系统启动中...') 输出:[提醒]系统启动中...

log(warn, '内存占用过高!') 输出:[警告]内存占用过高!

四匿名函数(Lambda)

定义:没有名字、只有一行的临时小函数。

    使用场景:当函数非常简单,且只在一处使用时,用lambda可以省去定义正式函数的步骤,让代码更紧凑。

语法:lambda 参数: 返回值表达式

例子1:定义简单计算

add = lambda x, y: x + y

print(add(5, 3)) 输出:8

例子2:作为高阶函数的参数(这才是lambda最常用的地方)

numbers = [1, 2, 3, 4]

使用map和lambda将列表每个元素平方

squared = list(map(lambda x: x**2, numbers))

print(squared) 输出:[1, 4, 9, 16]

使用filter和lambda过滤出偶数

evens = list(filter(lambda x: x % 2 == 0, numbers))

print(evens) 输出:[2, 4]

四、强大的内置数据处理函数:函数式编程工具

    Python内置了一些与lambda和高阶函数绝配的工具,用于处理数据集合。

lmap(func, iterable):将函数映射到可迭代对象的每个元素上,产生新的结果。

将字符串列表转为大写

names = ['alice', 'bob', 'charlie']

upper_names = list(map(str.upper, names))

print(upper_names) #输出:['ALICE', 'BOB', 'CHARLIE']

lfilter(func, iterable):根据函数返回的True/False过滤可迭代对象的元素。

过滤出长度大于3的名字

long_names = list(filter(lambda name: len(name) > 3, names))

print(long_names) 输出:['alice', 'charlie']

lsorted(iterable, key=func, reverse=False):排序,key参数指定根据哪个规则排序。

按名字长度排序

sorted_by_length = sorted(names, key=len)

print(sorted_by_length) 输出:['bob', 'alice', 'charlie']

lmax/min(iterable, key=func):找出最大/最小值。

找最长的名字

longest = max(names, key=len)

print(longest) 输出:charlie

最新文章

随机文章