欢迎光临本地信息咨询网
详情描述
Python入门:函数、列表与元组核心用法

一、函数基础

1.1 函数定义与调用

# 定义函数
def greet(name):
    """一个简单的问候函数"""
    return f"Hello, {name}!"

# 调用函数
result = greet("Alice")
print(result)  # 输出: Hello, Alice!

# 带默认参数的函数
def power(base, exponent=2):
    """计算幂次,默认平方"""
    return base ** exponent

print(power(3))      # 输出: 9
print(power(3, 3))   # 输出: 27

1.2 多种参数类型

# 位置参数
def describe_pet(animal_type, pet_name):
    print(f"I have a {animal_type} named {pet_name}.")

# 关键字参数(调用时指定参数名)
describe_pet(pet_name="Tom", animal_type="cat")

# 任意数量的位置参数(*args)
def make_pizza(*toppings):
    """打印所有配料"""
    print("Making pizza with:")
    for topping in toppings:
        print(f"- {topping}")

make_pizza('mushrooms', 'green peppers', 'extra cheese')

# 任意数量的关键字参数(**kwargs)
def build_profile(first, last, **user_info):
    """创建用户信息字典"""
    profile = {'first_name': first, 'last_name': last}
    profile.update(user_info)
    return profile

user_profile = build_profile('John', 'Doe', age=30, location='New York')
print(user_profile)

1.3 返回值

# 返回多个值(实际返回元组)
def get_name():
    first = "John"
    last = "Doe"
    return first, last  # 返回元组

# 接收多个返回值
first_name, last_name = get_name()

# 函数作为参数
def apply_operation(func, x, y):
    return func(x, y)

def add(a, b):
    return a + b

result = apply_operation(add, 5, 3)  # 输出: 8

二、列表核心用法

2.1 创建和访问列表

# 创建列表
fruits = ['apple', 'banana', 'cherry']
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]

# 访问元素
print(fruits[0])      # 输出: apple
print(fruits[-1])     # 输出: cherry(倒数第一个)
print(fruits[1:3])    # 输出: ['banana', 'cherry'](切片)

2.2 列表常用方法

# 添加元素
fruits.append('orange')      # 末尾添加
fruits.insert(1, 'mango')    # 指定位置插入
fruits.extend(['grape', 'kiwi'])  # 合并列表

# 删除元素
fruits.remove('banana')      # 按值删除
popped = fruits.pop()        # 删除并返回最后一个元素
popped = fruits.pop(1)       # 删除指定位置元素
del fruits[0]                # 删除指定位置

# 其他操作
fruits.sort()                # 排序(原地修改)
sorted_fruits = sorted(fruits)  # 返回新列表
fruits.reverse()             # 反转
count = fruits.count('apple') # 计数
index = fruits.index('cherry') # 查找索引

2.3 列表推导式

# 基本列表推导式
squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 带条件的列表推导式
even_squares = [x**2 for x in range(10) if x % 2 == 0]
# [0, 4, 16, 36, 64]

# 多重循环
pairs = [(x, y) for x in range(3) for y in range(3)]
# [(0,0), (0,1), (0,2), (1,0), ...]

# 嵌套列表推导式
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

2.4 列表高级操作

# 列表复制
original = [1, 2, 3]
shallow_copy = original.copy()      # 浅拷贝
deep_copy = original[:]            # 另一种浅拷贝方式

# 嵌套列表的深拷贝
import copy
nested = [[1, 2], [3, 4]]
deep_copy_nested = copy.deepcopy(nested)

# 列表解包
first, *middle, last = [1, 2, 3, 4, 5]
print(first)   # 1
print(middle)  # [2, 3, 4]
print(last)    # 5

三、元组核心用法

3.1 创建和使用元组

# 创建元组
coordinates = (10, 20)
single_element = (42,)      # 注意逗号(避免与括号表达式混淆)
empty_tuple = ()

# 访问元素(与列表类似)
print(coordinates[0])      # 10
print(coordinates[-1])     # 20

# 元组解包
x, y = coordinates
print(f"x={x}, y={y}")     # x=10, y=20

# 交换变量值(利用元组解包)
a, b = 5, 10
a, b = b, a  # a=10, b=5

3.2 元组特性

# 元组是不可变的
t = (1, 2, 3)
# t[0] = 10  # 错误!不能修改元组元素

# 但可以重新赋值整个元组
t = (4, 5, 6)

# 元组可以包含可变对象
mixed_tuple = ([1, 2], 3, 4)
mixed_tuple[0].append(3)  # 可以修改列表内容
# mixed_tuple[1] = 5      # 错误!不能修改元组元素

# 元组比列表更高效(内存占用小,访问速度快)

四、函数与列表/元组结合使用

4.1 函数处理列表/元组

# 传递列表到函数
def process_numbers(numbers):
    """处理数字列表"""
    total = sum(numbers)
    average = total / len(numbers)
    return total, average, max(numbers), min(numbers)

# 使用元组返回多个值
scores = [85, 90, 78, 92, 88]
total, avg, highest, lowest = process_numbers(scores)

# 函数返回列表
def get_even_numbers(limit):
    """返回指定范围内的偶数列表"""
    return [x for x in range(limit) if x % 2 == 0]

# 函数返回元组(通常用于多个返回值)
def get_min_max(numbers):
    return min(numbers), max(numbers)

4.2 *args和**kwargs的妙用

# 使用*解包列表/元组作为参数
def connect_to_db(host, port, user, password):
    print(f"Connecting to {user}@{host}:{port}")

params = ['localhost', 3306, 'admin', 'secret']
connect_to_db(*params)  # 解包列表作为位置参数

# 使用**解包字典作为关键字参数
config = {'host': 'localhost', 'port': 3306, 'user': 'admin', 'password': 'secret'}
connect_to_db(**config)  # 解包字典作为关键字参数

五、实用示例

5.1 数据处理示例

# 学生成绩管理系统
def calculate_statistics(scores):
    """计算统计信息"""
    total = sum(scores)
    average = total / len(scores)
    sorted_scores = sorted(scores)

    # 中位数
    n = len(sorted_scores)
    if n % 2 == 0:
        median = (sorted_scores[n//2-1] + sorted_scores[n//2]) / 2
    else:
        median = sorted_scores[n//2]

    # 返回元组
    return (total, average, median, max(scores), min(scores))

# 使用示例
student_scores = [85, 92, 78, 90, 88, 95, 79]
stats = calculate_statistics(student_scores)
print(f"总分: {stats[0]}, 平均分: {stats[1]:.2f}, 中位数: {stats[2]}")

# 使用字典包装更清晰
stat_names = ['total', 'average', 'median', 'highest', 'lowest']
result_dict = dict(zip(stat_names, stats))

5.2 列表和元组的转换

# 相互转换
my_list = [1, 2, 3, 4]
my_tuple = tuple(my_list)      # 列表转元组
new_list = list(my_tuple)      # 元组转列表

# 在实际中的应用
def safe_function(data):
    """接收数据,确保不修改原始数据"""
    # 将输入转换为元组(防止意外修改)
    data_tuple = tuple(data) if isinstance(data, list) else data

    # 处理数据...
    processed = [x * 2 for x in data_tuple]

    # 返回新列表(不修改输入)
    return processed

六、最佳实践总结

函数设计原则:

  • 一个函数只做一件事
  • 使用描述性的函数名
  • 函数长度不宜过长(建议不超过20行)

列表vs元组选择:

  • 使用列表:需要修改、添加、删除元素时
  • 使用元组:数据不变、作为字典键、函数返回多个值时

性能考虑:

  • 元组比列表创建和访问更快
  • 列表推导式比传统循环更快

代码可读性:

  • 使用列表推导式但要保持简洁
  • 复杂逻辑使用传统循环更清晰

这个指南涵盖了Python中函数、列表和元组的核心用法,掌握了这些基础知识,你就可以开始编写实用的Python程序了。建议多动手实践,通过实际项目加深理解。

相关帖子
健身卡因个人原因长期不去,商家说要收“保管费”,这会从余额里扣吗?
健身卡因个人原因长期不去,商家说要收“保管费”,这会从余额里扣吗?
如果因“三期”原因被违法解除劳动合同,女职工可以获得哪些赔偿?
如果因“三期”原因被违法解除劳动合同,女职工可以获得哪些赔偿?
如何辨别你购买的蜂蜜是纯正可长期保存的,还是易变质的掺假产品?
如何辨别你购买的蜂蜜是纯正可长期保存的,还是易变质的掺假产品?
大学毕业生在2026年将户口从学校集体户迁回原籍或迁往工作地,流程上有何不同?
大学毕业生在2026年将户口从学校集体户迁回原籍或迁往工作地,流程上有何不同?
如果对工伤复发的确认结论不认可,可以通过哪些合法渠道进行维权?
如果对工伤复发的确认结论不认可,可以通过哪些合法渠道进行维权?
开发商将车位打包卖给第三方公司,业主的停车权益该如何得到保障?
开发商将车位打包卖给第三方公司,业主的停车权益该如何得到保障?
马上消费金融利率,安逸花借款利息计算
马上消费金融利率,安逸花借款利息计算
在涉及遗产继承或抚养权纠纷时,出生医学证明能提供怎样的法律依据?
在涉及遗产继承或抚养权纠纷时,出生医学证明能提供怎样的法律依据?
智能玩具联网功能背后的数据安全与儿童隐私保护,家长应了解哪些知识?
智能玩具联网功能背后的数据安全与儿童隐私保护,家长应了解哪些知识?
个人债务优化重组申请流程有哪些步骤?从申请到落地全解析
个人债务优化重组申请流程有哪些步骤?从申请到落地全解析
更年期后,女性在职业生涯和个人兴趣发展上可能迎来哪些新机遇?
更年期后,女性在职业生涯和个人兴趣发展上可能迎来哪些新机遇?
汽车贷款期限包含宽限期吗?还款日与期限的计算
汽车贷款期限包含宽限期吗?还款日与期限的计算
除了便捷性,预制菜在执行的食品安全标准上与餐厅现做菜有何异同?
除了便捷性,预制菜在执行的食品安全标准上与餐厅现做菜有何异同?
写字楼门店抵押贷款负债率高怎么办?降低负债率提高批贷成功率
写字楼门店抵押贷款负债率高怎么办?降低负债率提高批贷成功率
商铺门面房抵押贷款保险必须买吗?财产保险与抵押贷款保险区别
商铺门面房抵押贷款保险必须买吗?财产保险与抵押贷款保险区别
面对2026年的市场环境,独立开发者应聚焦解决用户的哪些痛点?
面对2026年的市场环境,独立开发者应聚焦解决用户的哪些痛点?
别墅抵押贷款LPR怎么影响利率?LPR调整与月供变化关系解读
别墅抵押贷款LPR怎么影响利率?LPR调整与月供变化关系解读
如何通过角色扮演类玩具,有效培养孩子的同理心与情绪管理能力?
如何通过角色扮演类玩具,有效培养孩子的同理心与情绪管理能力?
过桥垫资让与担保效力?名为买卖实为借贷
过桥垫资让与担保效力?名为买卖实为借贷
别墅抵押贷款可以抵押给典当行吗?典当行别墅抵押贷款利弊
别墅抵押贷款可以抵押给典当行吗?典当行别墅抵押贷款利弊
公司经营贷款集团授信流程,企业集团统一授信
公司经营贷款集团授信流程,企业集团统一授信