Appearance
函数——定义、参数、返回值、作用域
概念讲解
函数是一段可以反复使用的代码块。好的函数设计原则:一个函数只做一件事。
python
def 函数名(参数1, 参数2=默认值):
# 函数体
return 结果参数类型:
- 位置参数:按顺序传递
- 关键字参数:
name=value形式,可不按顺序 - 默认参数:有默认值的参数
- 可变参数:
*args(元组)、**kwargs(字典)
作用域:
- 局部作用域:函数内部定义的变量,只在函数内有效
- 全局作用域:函数外部定义的变量,整个文件可见
- 在函数内部用
global声明可以修改全局变量(但尽量少用)
代码示例
函数组合:文本分析器
python
def count_words(text):
"""统计文本中的单词数和平均词长"""
words = text.split()
if not words:
return 0, 0.0
total_length = sum(len(w) for w in words)
return len(words), total_length / len(words)
def word_frequency(text):
"""统计每个单词出现的频率"""
words = text.lower().split()
freq = {}
for word in words:
freq[word] = freq.get(word, 0) + 1
return freq
def top_words(text, n=5):
"""返回出现频率最高的n个词"""
freq = word_frequency(text)
sorted_words = sorted(freq.items(), key=lambda x: x[1], reverse=True)
return sorted_words[:n]
# 使用
text = "Python is great Python is easy Python is popular"
num_words, avg_len = count_words(text)
print(f"单词数: {num_words}, 平均词长: {avg_len:.1f}")
print("词频统计:")
for word, count in word_frequency(text).items():
print(f" {word}: {count}")
print(f"最常见的3个词: {top_words(text, 3)}")可变默认参数的坑
python
# 错误写法:默认参数用了可变对象
def bad_append(item, targets=[]):
targets.append(item)
return targets
# 正确写法:用None作为哨兵值
def good_append(item, targets=None):
if targets is None:
targets = []
targets.append(item)
return targets
print(bad_append(1)) # [1]
print(bad_append(2)) # [1, 2] ← 意外!默认列表被保留了
print(good_append(1)) # [1]
print(good_append(2)) # [2] ← 正确,每次都是新列表练习题
题目:写一个函数,接受任意个整数,返回其中的最大值、最小值和平均值。
要求:
- 不使用
max()、min()、sum()等内置函数 - 如果传入空列表,返回
None
参考答案
python
def stats(*numbers):
if not numbers:
return None
max_val = min_val = numbers[0]
total = 0
for n in numbers:
if n > max_val:
max_val = n
if n < min_val:
min_val = n
total += n
return {
'max': max_val,
'min': min_val,
'avg': total / len(numbers)
}
result = stats(10, 5, 8, 20, 3)
print(result)
# {'max': 20, 'min': 3, 'avg': 9.2}关键思维:
*numbers收集所有位置参数为元组- 初始化
max_val = min_val = numbers[0],避免空列表问题 - 返回字典而非多个值,调用方更清晰