Python基础语法详解4:函数、列表与元组全解析

前言:

Python 作为动态类型语言的代表,其简洁性和易用性离不开三大核心结构:函数 (代码封装的核心)、列表 (动态可变序列)、元组(不可变有序序列)。这三者是 Python 编程的基础,也是区别于 C++ 等静态类型语言的关键特征。本文将从基础到进阶拆解这三个核心知识点,结合 C++ 的对应特性做对比,帮你透彻理解 Python 的设计逻辑,同时掌握不同语言的思维差异。

一、Python 函数:灵活的代码封装器

函数的本质是 "封装可复用的代码块",这一点 Python 和 C++ 的核心目标一致,但实现方式、语法特性却有天壤之别。

1. 基础定义与调用:语法的简洁性对比

Python 函数的基础语法

Python 用def关键字定义函数,无需声明返回值类型和参数类型,语法极度简洁:

python 复制代码
# 计算两数之和
def add(a, b):
    result = a + b
    return result


print(add(3, 5))  # 输出:8
print(add(2.5, 4.5))  # 输出:7.0(动态类型支持不同类型参数)
C++ 函数的基础语法

C++ 作为静态类型语言,必须显式声明返回值类型、参数类型,且函数声明 / 定义分离(大型项目常见):

cpp 复制代码
#include <iostream>
// C++函数声明
int add(int a, int b);

// C++函数定义
int add(int a, int b)
{
    int result = a + b;
    return result;
}

int main()
{
    std::cout << add(3, 5) << std::endl;  // 输出:8
    // add(2.5, 4.5); // 编译报错:参数类型不匹配(静态类型限制)
    return 0;
}

2. 进阶特性:Python 函数的 "灵活度优势"

Python 函数提供了很多 C++ 需要复杂语法才能实现的特性,这也是 Python "开箱即用" 的体现。

1. 基础定义与调用:语法简洁性对比

Python 默认参数直接写在参数列表中,语法简洁:

python 复制代码
def add(a, b=0):
    return a + b

print(add(10))  # 输出:10(使用默认参数b=0)
print(add(10, 20))  # 输出:30(覆盖默认参数)

C++ 也支持默认参数,但必须写在参数列表右侧,且语法约束更严格:

cpp 复制代码
// C++:带默认参数的函数

int add(int a, int b = 0) {
    return a + b;
}

int main() 
{
    std::cout << add(10) << std::endl;  // 输出:10
    std::cout << add(10, 20) << std::endl;  // 输出:30
    // int add(int a=0, int b); // 编译报错:默认参数必须从右到左定义
    return 0;
}
2. 进阶特性:Python 函数的 "开箱即用" 优势

Python 函数的进阶特性无需复杂语法,而 C++ 需借助指针、模板等高级特性实现。

二、Python 列表:动态可变的序列容器

列表(List)是 Python 最常用的可变序列,对应 C++ 的std::vector,但功能更丰富、使用更便捷。

1. 基础特性:动态性与类型灵活性

Python 列表:混合类型 + 动态扩容

Python 列表用[]定义,支持存储不同类型元素,无需指定长度,自动扩容:

python 复制代码
empty_list = []
mix_list = [1, "Python", 3.14, True]  # 混合类型合法
num_list = [1, 2, 3]

# 动态扩容:append/extend
num_list.append(4)
num_list.extend([5, 6])
print(num_list)  # 输出:[1,2,3,4,5,6]

# 负索引访问(Python独有)
print(num_list[-1])  # 输出:6(最后一个元素)
C++ std::vector:单一类型 + 手动优化扩容

C++std::vector虽支持动态扩容,但仅能存储单一类型,负索引无定义:

cpp 复制代码
int main()
{
    std::vector<int> num_vec = { 1,2,3 };
    // std::vector<int> mix_vec = {1, "Python"}; // 编译报错:类型不匹配

    // 动态扩容
    num_vec.push_back(4);
    num_vec.insert(num_vec.end(), { 5,6 }); // 对应Python的extend
    for (int num : num_vec) std::cout << num << " "; // 输出:1 2 3 4 5 6

    // std::cout << num_vec[-1] << std::endl; // 未定义行为(运行可能崩溃)
    return 0;
}

2. 核心操作:Python 的 "语法糖" 优势

Python 列表的切片、推导式等特性,C++ 需大量样板代码实现:

切片操作中,[ ]里面有两个数字表示了一段区间,左闭右开。可以省略前后两个边界的,切片是比较高效的操作,只是取出了原有列表的一部分并不涉及到数据的拷贝。还可以带步长使用print(a[::1])

三、Python 元组:不可变的有序序列

元组(Tuple)是 Python 的不可变序列,常被误解为 "只读列表",但其实有独特的设计价值,对应 C++ 的std::tuple/std::array

1. 基础特性:不可变性的核心价值

元组用()定义(空元组需(),单元素需加逗号),不可修改元素,支持索引 / 切片:

python 复制代码
empty_tuple = ()
single_tuple = (1,)  # 单元素必须加逗号,否则视为普通数值
mix_tuple = (1, "Python", 3.14)  # 支持混合类型

# 索引/切片(与列表一致)
print(mix_tuple[1])    # 输出:Python
print(mix_tuple[:2])   # 输出:(1, 'Python')

# 不可变性:修改元素会报错
# mix_tuple[1] = "Java"  # TypeError: 'tuple' object does not support item assignment

# 可哈希:可作为字典的键(列表不行)
dict_with_tuple = {(1,2): "坐标"}
print(dict_with_tuple[(1,2)])  # 输出:坐标

2. 元组的核心用途(Python 独有的场景)

  • 函数返回多值:Python 函数返回多个值本质是返回元组,无需手动打包:
python 复制代码
# Python:函数返回多值(自动打包为元组)
def get_point():
    return 10, 20  # 等价于 return (10,20)

x, y = get_point()  # 解包
print(x, y)  # 输出:10 20
  • 保护数据不被修改:元组的不可变性可避免数据被意外篡改(如配置参数、常量集合)。

  • 作为字典键:列表因可变不可哈希,元组是唯一能作为字典键的序列类型。

3.元组 vs 列表:如何选择?

总结:

Python 的函数、列表、元组设计核心是 **"开发效率优先":用极简的语法实现复杂功能,牺牲少量运行效率换取开发速度;而 C++ 的设计核心是"性能与可控性优先"**:通过严格的类型约束和手动管理,保证运行效率,但增加了代码量。

无论你是从 C++ 转向 Python,还是零基础学习,理解两者的差异能帮助你:

  1. 用 Python 写出简洁高效的代码(善用列表推导式、元组解包);
  2. 按需选择数据结构(可变用列表,不可变用元组);
  3. 根据场景选择语言(快速开发用 Python,高性能用 C++)。
  • Python 函数的核心是灵活性:无需类型声明、原生支持可变参数和一等对象,相比 C++ 大幅减少样板代码,适合快速开发。
  • 列表 是 Python 的 "动态可变序列":支持混合类型、切片、推导式,对应 C++ 的std::vector,但语法更简洁;元组 是 "不可变轻量序列":天生不可变、可哈希,对应 C++ 的std::tuple,但解包和哈希使用更便捷。
  • 列表与元组的选择核心看可变性:需修改数据用列表,需保护数据 / 做字典键用元组;函数 + 列表 + 元组的组合是 Python 数据处理的核心范式。
相关推荐
IT猿手3 小时前
多目标鲸鱼优化算法(MOWOA)求解46个多目标函数及一个工程应用,包含四种评价指标,MATLAB代码
开发语言·算法·matlab
wjs20243 小时前
Ruby 条件判断
开发语言
南夏一木子3 小时前
Vue学习 —— Axios异步通信
前端·vue.js·学习
leo_2323 小时前
语言、开发语言&程序设计语言--SMP(软件制作平台)语言基础知识之六十一
开发语言·开发工具·企业信息化·smp(软件制作平台)·应用系统·eom(企业经营模型)
Lun3866buzha3 小时前
【石油泄漏检测】YOLO13-C3k2-RFCBAMConv模型详解与应用
python
古城小栈3 小时前
Rust中 引用类型 VS 裸指针
开发语言·后端·rust
yuanmenghao3 小时前
Linux 性能实战 | 第 19 篇:ftrace 内核跟踪入门 [特殊字符]
linux·python·性能优化
skywalk81633 小时前
汉字学习汉语学习相关库hanzi-writer 、makeme hanzi和chinese-xinhua
学习·汉字