寒假学习笔记1.29

一、学习目标
掌握函数定义与调用的基本语法

理解不同参数类型(位置、关键字、默认、可变参数)

学会使用返回值与理解作用域概念

掌握lambda表达式的使用场景

了解模块化编程思想与代码组织

二、学习内容

  1. 函数定义与调用
    基本语法:

python
def greet(name):
"""打印问候语(文档字符串)"""
print(f"Hello, {name}!")

调用函数

greet("小明")
带返回值的函数:

python
def add(a, b):
"""返回两个数的和"""
return a + b

result = add(3, 5) # result = 8
无返回值函数:

python
def print_info(info):
"""仅执行操作,无返回值"""
print("信息:", info)
# 无return语句,默认返回None
2. 参数类型详解
位置参数:

python
def introduce(name, age, city):
print(f"我叫{name},{age}岁,来自{city}")

introduce("小明", 18, "北京") # 必须按顺序传递
关键字参数:

python
introduce(age=20, name="小红", city="上海") # 指定参数名,顺序不重要
默认参数:

python
def greet(name, greeting="你好"):
print(f"{greeting},{name}!")

greet("小明") # 使用默认问候语
greet("小红", "Hi") # 自定义问候语

注意:默认参数必须放在非默认参数之后

可变参数:

python

*args 接收任意数量的位置参数(元组)

def sum_numbers(*args):
total = 0
for num in args:
total += num
return total

print(sum_numbers(1, 2, 3)) # 6
print(sum_numbers(1, 2, 3, 4, 5)) # 15

**kwargs 接收任意数量的关键字参数(字典)

def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")

print_info(name="小明", age=18, city="北京")
参数组合顺序:

python
def complex_func(a, b, *args, c=10, **kwargs):
# a, b: 位置参数
# args: 可变位置参数
# c: 默认参数(关键字参数)
# kwargs: 可变关键字参数
pass
3. 返回值与作用域
多个返回值:

python
def get_min_max(numbers):
return min(numbers), max(numbers)

min_val, max_val = get_min_max([1, 5, 3, 9, 2])

实际上是返回一个元组,然后解包

作用域:

python
global_var = "全局变量"

def test_scope():
local_var = "局部变量"
print(global_var) # 可以访问全局变量
# print(local_var) # 函数外无法访问局部变量

# 修改全局变量需要使用global关键字
global global_var
global_var = "已修改"

test_scope()
print(global_var) # 输出:已修改
4. Lambda表达式
基本语法:

python

传统函数

def square(x):
return x ** 2

Lambda表达式

square = lambda x: x ** 2

直接使用

result = (lambda x, y: x + y)(3, 5) # 8
常见应用场景:

python

1. 排序(根据第二个元素排序)

pairs = [(1, 9), (2, 5), (3, 7)]
pairs.sort(key=lambda x: x[1]) # [(2, 5), (3, 7), (1, 9)]

2. 映射(map)

numbers = [1, 2, 3, 4]
squares = list(map(lambda x: x**2, numbers)) # [1, 4, 9, 16]

3. 过滤(filter)

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

4. 与内置函数结合

from functools import reduce
total = reduce(lambda x, y: x + y, numbers) # 10
5. 模块化编程
将代码组织到多个文件中:

python

calculator.py

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

def multiply(a, b):
return a * b

main.py

import calculator
result = calculator.add(3, 5)
常用导入方式:

python
import math # 导入整个模块
from math import sqrt, pi # 导入特定函数/变量
import numpy as np # 导入并设置别名

避免使用 from module import * (可能造成命名冲突)

三、实践练习
练习1:学生成绩统计函数
python
def analyze_scores(scores):
"""分析成绩列表,返回统计信息"""
if not scores: # 检查列表是否为空
return None

stats = {
    "count": len(scores),
    "average": sum(scores) / len(scores),
    "highest": max(scores),
    "lowest": min(scores),
    "passed": len([s for s in scores if s >= 60])
}
return stats

使用函数

scores = [85, 92, 78, 45, 67, 88, 91]
result = analyze_scores(scores)

if result:
for key, value in result.items():
print(f"{key}: {value}")
练习2:简易计算器
python
def calculator():
"""简易计算器,支持加减乘除"""
operations = {
"+": lambda x, y: x + y,
"-": lambda x, y: x - y,
"*": lambda x, y: x * y,
"/": lambda x, y: x / y if y != 0 else "除数不能为0"
}

while True:
    print("\n简易计算器")
    print("支持操作:+, -, *, /")
    print("输入 'q' 退出")
    
    choice = input("请选择操作:")
    if choice.lower() == 'q':
        print("感谢使用!")
        break
    
    if choice not in operations:
        print("无效操作!")
        continue
    
    try:
        num1 = float(input("输入第一个数字:"))
        num2 = float(input("输入第二个数字:"))
        result = operations[choice](num1, num2)
        print(f"结果:{result}")
    except ValueError:
        print("请输入有效数字!")

练习3:文件处理模块
python

创建文件处理工具函数

def read_file(filename):
"""读取文件内容"""
try:
with open(filename, 'r', encoding='utf-8') as file:
return file.read()
except FileNotFoundError:
print(f"文件 {filename} 不存在")
return None

def write_file(filename, content):
"""写入内容到文件"""
with open(filename, 'w', encoding='utf-8') as file:
file.write(content)
print(f"内容已写入 {filename}")

def append_to_file(filename, content):
"""追加内容到文件"""
with open(filename, 'a', encoding='utf-8') as file:
file.write(content)
print(f"内容已追加到 {filename}")

使用示例

write_file("日记.txt", "2025年1月30日\n今天学习了Python函数。\n")
append_to_file("日记.txt", "感觉很有收获!\n")
content = read_file("日记.txt")
print("文件内容:")
print(content)
四、遇到的问题与解决
问题:函数修改了全局变量但没有生效

解决:需要使用 global 关键字声明要修改的全局变量

建议:尽量避免修改全局变量,通过返回值传递结果

问题:默认参数的可变对象陷阱

解决:默认参数在函数定义时求值,使用不可变对象作为默认值

python

错误示例

def add_item(item, items=[]):
items.append(item)
return items

正确示例

def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
问题:lambda表达式过度使用导致代码可读性差

解决:复杂逻辑使用普通函数,lambda仅用于简单操作

原则:一行能表达清楚的逻辑使用lambda

问题:函数命名冲突

解决:使用有意义的名称,避免与内置函数重名

检查:不要使用 sum、max、min 等作为函数名

五、学习总结
函数是Python模块化编程的基础,提高了代码复用性和可维护性

理解了四种参数类型的区别和使用场景:

位置参数:最常见的参数形式

关键字参数:提高代码可读性

默认参数:为参数提供默认值

可变参数:处理不确定数量的参数

掌握了作用域规则:局部变量、全局变量及其访问规则

lambda表达式适用于简单的匿名函数,常用于函数式编程

开始学习将代码组织到多个文件中,实现模块化开发

posted @ 2026-01-30 22:07  头发少的文不识  阅读(6)  评论(0)    收藏  举报