掌握这些 Python 函数秘籍,让你的编程效率飙升!

目录

一、函数基础:定义、参数与返回值

(一)函数定义

(二)函数参数

(三)函数返回值

二、函数进阶:命名空间、作用域与嵌套

(一)命名空间

(二)作用域

(三)函数嵌套

三、函数的高级应用:装饰器、迭代器与生成器

(一)装饰器

(二)迭代器

(三)生成器

四、其他函数类型:匿名函数与偏函数

(一)匿名函数

(二)偏函数

五、内建函数:Python 的强大工具集


   在 Python 编程世界里,函数是构建强大程序的基石。它不仅能提高代码的复用性、增强可读性,还能让开发者更高效地组织和管理代码逻辑。本文将深入剖析 Python 函数的各个方面,无论是初学者还是有一定经验的开发者,都能从中获得有价值的知识。

一、函数基础:定义、参数与返回值

(一)函数定义

        Python 中定义函数使用def关键字,语法格式为def 函数名称(参数列表):,函数体紧跟其后,通过缩进来区分。例如:

def greet(name):
    print(f"Hello, {name}!")

函数名需遵循标识符命名规则,它是函数的标识,方便后续调用。参数列表可包含零个或多个参数,用于接收调用时传入的数据。

(二)函数参数

  1. 形参与实参:形参是函数定义时小括号内的参数,仅在函数内部有效,用于指定函数接收的数据类型和数量;实参是函数调用时传入小括号内的值。例如:
def add(a, b):
    return a + b
result = add(3, 5)

这里ab是形参,35是实参。
2. 位置参数与关键字参数:位置参数按顺序一一对应传入;关键字参数通过参数名指定传入的值,可打破顺序限制。如:

def user_info(id, name, address):
    print(f"ID: {id}, Name: {name}, Address: {address}")
user_info(1, "Alice", "Wonderland")  # 位置参数
user_info(name="Bob", id=2, address="Nowhere")  # 关键字参数
  1. 默认值参数:为参数提供默认值,调用时若不传入该参数,就使用默认值。像这样:
def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")
greet("Charlie")  # 使用默认问候语
greet("David", "Hi")  # 传入自定义问候语
  1. 动态传参:当参数个数不确定时,可使用动态参数。*args以元组形式收集多余的位置参数,**kwargs以字典形式收集多余的关键字参数。例如:
def print_args(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)
print_args(1, 2, "three", key1="value1", key2="value2")

(三)函数返回值

return语句用于结束函数并返回值。函数可以不写return,此时默认返回None;也可返回单个值或多个值(多个值会以元组形式返回)。比如:

def calculate(a, b):
    sum_result = a + b
    diff_result = a - b
    return sum_result, diff_result
result = calculate(5, 3)
sum_val, diff_val = calculate(5, 3)  # 解包返回的元组

二、函数进阶:命名空间、作用域与嵌套

(一)命名空间

  1. 内置命名空间:Python 解释器运行时自带的空间,包含如print()len()等内置函数和类型。
  2. 全局命名空间:在 Python 文件顶层定义的变量和函数所在空间,文件内各处基本都能访问。
  3. 局部命名空间:函数内部定义的变量和函数所在空间,仅在函数内部有效。

(二)作用域

  1. 局部变量:在函数内部定义,函数执行结束后就被删除。例如:
def local_demo():
    local_var = 10
    print(local_var)
local_demo()
# print(local_var)  # 此处会报错,local_var超出作用域
  1. 全局变量:在函数外部定义,可被函数内外使用。若在函数内部修改全局变量,需用global关键字声明。如:
global_var = 20
def modify_global():
    global global_var
    global_var += 10
    print(global_var)
modify_global()
  1. nonlocal关键字:用于在内嵌函数中引用外层(非全局)变量,类似global,但作用于嵌套函数场景。

(三)函数嵌套

函数内部可定义另一个函数,外层函数返回内层函数名时,形成闭包。闭包能让局部变量常驻内存,保护数据。比如:

def outer(x):
    def inner():
        return x * x
    return inner
square = outer(5)
print(square())

三、函数的高级应用:装饰器、迭代器与生成器

(一)装饰器

装饰器本质是函数,能在不修改原函数代码的情况下添加额外功能。它以函数作为参数,返回一个新的替换函数。

  1. 简单装饰器
def decorator(fn):
    def inner():
        print("Before function execution")
        fn()
        print("After function execution")
    return inner

@decorator
def say_hello():
    print("Hello!")
say_hello()
  1. 带参数的装饰器:由多层函数嵌套实现,最外层函数接收装饰器参数。
def repeat(n):
    def decorator(fn):
        def inner():
            for _ in range(n):
                fn()
        return inner
    return decorator

@repeat(3)
def greet():
    print("Welcome!")
greet()

(二)迭代器

可迭代对象(如strlisttuplesetdict)能使用for循环遍历。判断对象是否可迭代可借助collections.abc模块中的Iterable。迭代器是实现了__iter__()__next__()方法的对象,用于逐个获取数据。例如:

from collections.abc import Iterable, Iterator
my_list = [1, 2, 3]
print(isinstance(my_list, Iterable))  # True
my_iter = iter(my_list)
print(isinstance(my_iter, Iterator))  # True
print(next(my_iter))  # 1

(三)生成器

函数中若包含yield关键字,就是生成器函数。生成器是一种特殊的迭代器,按需生成数据,节省内存。

  1. 生成器函数
def number_generator():
    for i in range(1, 4):
        yield i
gen = number_generator()
print(next(gen))  # 1
print(next(gen))  # 2
  1. 生成器推导式:类似列表推导式,但用圆括号。
even_gen = (i for i in range(1, 10) if i % 2 == 0)
print(next(even_gen))  # 2

四、其他函数类型:匿名函数与偏函数

(一)匿名函数

使用lambda表达式创建,无函数名,适用于临时简单函数。语法为lambda 参数列表: 表达式,只有一个返回值和一句代码。例如:

add = lambda x, y: x + y
print(add(3, 5))  # 8

匿名函数还可作为参数传递给其他函数,在排序、映射等操作中广泛应用。

(二)偏函数

用于固定已有函数的部分参数,简化函数调用。通过functools.partial实现,也可自定义。比如:

from functools import partial
def add(a, b, c):
    return a + b + c
add_five = partial(add, c=5)
print(add_five(1, 2))  # 8

五、内建函数:Python 的强大工具集

Python 提供众多内建函数,如eval()exec()compile()map()filter()zip()等,能高效处理各种任务。

  1. eval()函数:将字符串当作表达式求值。例如:
num = 2
result = eval("num * 3 + num ** 2")
print(result)  # 10
  1. map()函数:对迭代对象每个元素应用指定函数,返回结果迭代器。
my_list = [1, 2, 3]
new_list = list(map(lambda x: x * 2, my_list))
print(new_list)  # [2, 4, 6]
  1. zip()函数:将多个可迭代对象元素打包成元组。
list1 = [1, 2, 3]
list2 = ["a", "b", "c"]
zipped = list(zip(list1, list2))
print(zipped)  # [(1, 'a'), (2, 'b'), (3, 'c')]

        Python 函数功能丰富、应用广泛。从基础的定义和参数传递,到进阶的装饰器和生成器,再到各种内建函数,掌握这些知识能显著提升编程能力,编写出更高效、优雅的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值