别再死记硬背!Python函数知识点和练习题都在这里,速来挑战!
Python函数知识点教程
一、函数的定义与调用
- 定义函数:使用 def 关键字。
def greet(name):
print(f"Hello, {name}!")
- 调用函数:传递实际参数。
greet("Alice") # 输出:Hello, Alice!
二、函数的参数
- 位置参数:按顺序传递参数。
def add(a, b):
return a + b
print(add(2, 3)) # 5
- 默认参数:参数可指定默认值。
def power(x, n=2):
return x ** n
print(power(3)) # 9(使用默认n=2)
- 可变参数:*args 接收任意数量的位置参数(元组形式)。
def sum_all(*numbers):
return sum(numbers)
print(sum_all(1, 2, 3)) # 6
- 关键字参数:**kwargs 接收任意数量的关键字参数(字典形式)。
def print_info(**info):
for key, value in info.items():
print(f"{key}: {value}")
print_info(name="Alice", age=25)
三、返回值
- return 语句:函数可返回一个或多个值(多个值以元组形式返回)。
def get_user():
return "Alice", 25
name, age = get_user() # name="Alice", age=25
四、作用域
- 局部变量:函数内定义的变量,仅在函数内有效。
- 全局变量:函数外定义的变量,通过 global 关键字可在函数内修改。
x = 10
def update_x():
global x
x = 20
update_x()
print(x) # 20
五、Lambda函数
- 匿名函数:单行简单函数,用 lambda 定义。
square = lambda x: x ** 2
print(square(3)) # 9
六、递归函数
- 函数调用自身:需定义终止条件。
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
print(factorial(5)) # 120
七、装饰器
- 增强函数功能:在不修改原函数代码的前提下添加功能。
def timer(func):
def wrapper(*args, **kwargs):
import time
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"执行时间:{end - start}秒")
return result
return wrapper
@timer
def long_task():
time.sleep(2)
long_task() # 输出执行时间
20道练习题 & 答案
基础题
- 定义一个函数,计算两个数的乘积。
答案:
def multiply(a, b):
return a * b
- 调用 multiply(3, 4) 的结果是?
答案:12 - 函数默认参数示例:def greet(name="Guest"):,调用 greet() 的输出?
答案:Hello, Guest! - lambda 函数实现两数相加。
答案:add = lambda a, b: a + b - 函数返回多个值的示例。
答案:
def get_point():
return 3, 4
x, y = get_point()
进阶题
- 编写可变参数函数,计算所有输入数字的平均值。
答案:
def average(*nums):
return sum(nums) / len(nums) if nums else 0
- 关键字参数函数收集用户信息。
答案:
def user_info(**kwargs):
print(kwargs)
user_info(name="Alice", age=25) # 输出字典
- 全局变量与局部变量冲突示例。
答案:
x = 5
def test():
x = 10 # 局部变量
print(x)
test() # 10,全局x仍为5
- 递归函数计算斐波那契数列第n项。
答案:
def fib(n):
if n <= 1:
return n
return fib(n-1) + fib(n-2)
- 使用 lambda 对列表排序:sorted([(1,2), (3,1)], key=lambda x: x[1])。
答案:[(3,1), (1,2)](按元组第二个元素排序)。
应用题
- 编写函数判断字符串是否为回文。
答案:
def is_palindrome(s):
return s == s[::-1]
- 统计列表中元素的频率(返回字典)。
答案:
def count_freq(lst):
freq = {}
for item in lst:
freq[item] = freq.get(item, 0) + 1
return freq
- 实现装饰器,记录函数调用次数。
答案:
def counter(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
count += 1
print(f"函数被调用了{count}次")
return func(*args, **kwargs)
return wrapper
- 用递归实现二分查找。
答案:
def binary_search(arr, target, low, high):
if low > high:
return -1
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] > target:
return binary_search(arr, target, low, mid-1)
else:
return binary_search(arr, target, mid+1, high)
- 编写函数,将摄氏温度转换为华氏温度。
答案:
def celsius_to_fahrenheit(c):
return c * 9/5 + 32
挑战题
- 实现装饰器缓存函数结果(避免重复计算)。
答案:
def cache(func):
cached = {}
def wrapper(*args):
if args in cached:
return cached[args]
result = func(*args)
cached[args] = result
return result
return wrapper
- 函数柯里化:将 add(a, b, c) 转换为可链式调用的形式。
答案:
def curry_add(a):
def add_b(b):
def add_c(c):
return a + b + c
return add_c
return add_b
print(curry_add(1)(2)(3)) # 6
- 用闭包实现计数器(每次调用递增)。
答案:
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
c = make_counter()
print(c(), c()) # 1, 2
- 编写生成器函数,生成斐波那契数列。
答案:
def fib_generator():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
- 实现函数重载(通过参数类型区分)。
答案(使用类型检查):
def overload_example(x):
if isinstance(x, int):
print("处理整数")
elif isinstance(x, str):
print("处理字符串")
通过练习,可以全面掌握Python函数的设计、参数处理及高级特性!