欢迎光临本地信息咨询网
详情描述
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年,社会舆论和年轻人对彩礼“限高”政策的普遍看法是什么?
计算经济补偿金时,工资基数是指应发工资还是实发工资?
计算经济补偿金时,工资基数是指应发工资还是实发工资?
到2026年,社保“第六险”的评估标准是否更加统一和规范了?
到2026年,社保“第六险”的评估标准是否更加统一和规范了?
贷款期间房产信息变更,讲解信息修改及二次抵押备案调整流程
贷款期间房产信息变更,讲解信息修改及二次抵押备案调整流程
从千兆宽带降级到百兆,运营商要求缴纳高额设备调测费是否合理?
从千兆宽带降级到百兆,运营商要求缴纳高额设备调测费是否合理?
2026年新的食品标识规定,是否让预制菜配料表更透明易懂?
2026年新的食品标识规定,是否让预制菜配料表更透明易懂?
智能汽车记录的行车轨迹信息是否属于个人隐私信息范畴
智能汽车记录的行车轨迹信息是否属于个人隐私信息范畴
如何区分是为了实际需求购物,还是为了短暂的情绪抚慰而进行消费?
如何区分是为了实际需求购物,还是为了短暂的情绪抚慰而进行消费?
2026年,企业的加班审批制度如果过于严格,是否会催生更多隐形加班?
2026年,企业的加班审批制度如果过于严格,是否会催生更多隐形加班?
企业内部非正式的社交活动,如何可能加深某些群体的“隐性”排斥感?
企业内部非正式的社交活动,如何可能加深某些群体的“隐性”排斥感?
对于有过敏性鼻炎的人,在特定季节应如何护理以减少鼻子出血风险?
对于有过敏性鼻炎的人,在特定季节应如何护理以减少鼻子出血风险?
小满节气“苦菜秀”的说法从何而来,这种植物背后有哪些有趣的故事与文化?
小满节气“苦菜秀”的说法从何而来,这种植物背后有哪些有趣的故事与文化?
对维修基金的使用情况有疑问,业主可以通过哪些合法途径进行监督?
对维修基金的使用情况有疑问,业主可以通过哪些合法途径进行监督?
2026年国际原油市场价格波动,主要受全球哪些非政治性供需因素影响?
2026年国际原油市场价格波动,主要受全球哪些非政治性供需因素影响?