Python--函数进阶(上)

server/2025/2/24 10:27:15/

1. 参数深入理解

1.1 参数传递的内存机制

Python中参数传递的是内存地址(引用传递),而非值拷贝。这意味着:

  • 可变对象(列表、字典)在函数内修改会影响外部变量。
  • 不可变对象(数字、字符串)在函数内重新赋值会创建新对象。
def modify_list(lst):lst.append(4)  # 修改原列表my_list = [1, 2, 3]
modify_list(my_list)
print(my_list)  # 输出:[1, 2, 3, 4]
def reassign_str(s):s = "新字符串"  # 创建新对象my_str = "原字符串"
reassign_str(my_str)
print(my_str)  # 输出:原字符串

1.2 默认参数的陷阱

当默认参数为可变对象时,多次调用会共享同一内存地址:

def buggy_func(data=[]):data.append(1)return dataprint(buggy_func())  # [1]
print(buggy_func())  # [1, 1](非预期结果)

解决方案:使用不可变类型(如None​)作为默认值,并在函数内创建新对象:

def fixed_func(data=None):data = data or []data.append(1)return data

1.3 动态参数(*args​与**kwargs​)

  • *args​:接收任意数量的位置参数,存储为元组。
  • **kwargs​:接收任意数量的关键字参数,存储为字典。
def dynamic_args(*args, **kwargs):print(f"位置参数: {args}")print(f"关键字参数: {kwargs}")dynamic_args(1, 2, name="Alex", age=18)
# 输出:
# 位置参数: (1, 2)
# 关键字参数: {'name': 'Alex', 'age': 18}

应用场景:格式化字符串、批量处理数据:

values = [11, 22, 33]
print("和为:", *values)  # 解包为 print("和为:", 11, 22, 33)

2. 函数名的本质与使用

2.1 函数名作为变量

函数名本质是一个指向函数对象的变量

def greet():print("Hello!")alias = greet
alias()  # 输出:Hello!

2.2 函数作为参数与返回值

函数作为参数

def apply(func, x, y):return func(x, y)result = apply(lambda a, b: a * b, 3, 4)
print(result)  # 输出:12

函数作为返回值

def multiplier(factor):def inner(x):return x * factorreturn innerdouble = multiplier(2)
print(double(5))  # 输出:10

2.3 高阶函数应用

  • map​:对可迭代对象应用函数:

    numbers = [1, 2, 3]
    squared = list(map(lambda x: x**2, numbers))  # [1, 4, 9]
    
  • filter​:过滤元素:

    even = list(filter(lambda x: x % 2 == 0, numbers))  # [2]
    

http://www.ppmy.cn/server/170316.html

相关文章

【从零开始学Redis】高级篇--超全总结笔记

Redis从入门到精通,超全笔记专栏 Hello,大家好,我是姜来可期(全网同名),一名在读985转码大学生,一起学习,共同交流!!! 分布式缓存 分布式缓存是…

5. Go 方法(结构体的方法成员)

Go语言没有传统的 class ,为了让函数和结构体能够关联,Go引入了“方法”的概念。 当普通函数添加了接收者(receiver)后,就变成了方法。 一、函数和方法示例 // 普通函数 func Check(s string) string {return s }//…

内网网络安全的解决之道

本文简要分析了企业内部网络所面临的主要分析,阐述了安全管理人员针对不同威胁的主要技术应对措施。进一步介绍了业界各种技术措施的现状,并提出了未来可能的发展趋势。 内网网络安全问题的提出 网络安全对于绝大多数人而言指的都是互联网安全&#xff…

【DeepSeek与鸿蒙HarmonyOS:开启应用开发新次元】

引言:科技融合的新曙光 在当今数字化浪潮中,DeepSeek 和鸿蒙 HarmonyOS 宛如两颗璀璨的明星,各自在人工智能和操作系统领域熠熠生辉。DeepSeek 以其强大的大模型能力,在自然语言处理、代码生成等多个领域展现出卓越的性能&#x…

清影2.0(AI视频生成)技术浅析(五):音频处理技术

清影2.0 的 音频处理技术 是其视频生成平台的重要组成部分,主要用于生成与视频内容相匹配的音频,包括文本转语音(TTS)、音效合成和背景音乐合成。 1. 音频处理技术概述 清影2.0 的音频处理技术主要包括以下模块: 文本转语音(TTS):将文本转换为自然语音。 音效合成:生…

Android Studio安装配置及运行

一、下载Android Studio 官网下载:下载 Android Studio 和应用工具 - Android 开发者 | Android Developers 跳转到下载界面,选择同意条款,并点击下载,如图: 二、详细安装 双击下载的文件 三、配置Android Studio …

用DeepSeek零基础预测《哪吒之魔童闹海》票房——从数据爬取到模型实战

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 **一、为什么要预测票房?****二、准备工作****三、实战步骤详解****Step 1:数据爬取与清洗&am…

Javascript排序算法(冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序)详解

JS 排序算法详解 排序算法是计算机科学中的基础,用于将一组数据按照某种顺序重新排列。JavaScript中常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。以下是这些算法的详细介绍和代码示例。 冒泡排序(Bubble Sort)…