百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

别再死记硬背!Python函数知识点和练习题都在这里,速来挑战!

itomcoil 2025-03-03 18:58 5 浏览


Python函数知识点教程


一、函数的定义与调用

  1. 定义函数:使用 def 关键字。
def greet(name):
    print(f"Hello, {name}!")
  1. 调用函数:传递实际参数。
greet("Alice")  # 输出:Hello, Alice!

二、函数的参数

  1. 位置参数:按顺序传递参数。
def add(a, b):
    return a + b
print(add(2, 3))  # 5
  1. 默认参数:参数可指定默认值。
def power(x, n=2):
    return x ** n
print(power(3))    # 9(使用默认n=2)
  1. 可变参数:*args 接收任意数量的位置参数(元组形式)。
def sum_all(*numbers):
    return sum(numbers)
print(sum_all(1, 2, 3))  # 6
  1. 关键字参数:**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

四、作用域

  1. 局部变量:函数内定义的变量,仅在函数内有效。
  2. 全局变量:函数外定义的变量,通过 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道练习题 & 答案

基础题

  1. 定义一个函数,计算两个数的乘积。
    答案
def multiply(a, b):
    return a * b
  1. 调用 multiply(3, 4) 的结果是?
    答案:12
  2. 函数默认参数示例:def greet(name="Guest"):,调用 greet() 的输出?
    答案:Hello, Guest!
  3. lambda 函数实现两数相加。
    答案:add = lambda a, b: a + b
  4. 函数返回多个值的示例。
    答案
def get_point():
    return 3, 4
x, y = get_point()

进阶题

  1. 编写可变参数函数,计算所有输入数字的平均值。
    答案
def average(*nums):
    return sum(nums) / len(nums) if nums else 0
  1. 关键字参数函数收集用户信息。
    答案
def user_info(**kwargs):
    print(kwargs)
user_info(name="Alice", age=25)  # 输出字典
  1. 全局变量与局部变量冲突示例。
    答案
x = 5
def test():
    x = 10  # 局部变量
    print(x)
test()  # 10,全局x仍为5
  1. 递归函数计算斐波那契数列第n项。
    答案
def fib(n):
    if n <= 1:
        return n
    return fib(n-1) + fib(n-2)
  1. 使用 lambda 对列表排序:sorted([(1,2), (3,1)], key=lambda x: x[1])
    答案:[(3,1), (1,2)](按元组第二个元素排序)。

应用题

  1. 编写函数判断字符串是否为回文。
    答案
def is_palindrome(s):
    return s == s[::-1]
  1. 统计列表中元素的频率(返回字典)。
    答案
def count_freq(lst):
    freq = {}
    for item in lst:
        freq[item] = freq.get(item, 0) + 1
    return freq
  1. 实现装饰器,记录函数调用次数。
    答案
def counter(func):
    count = 0
    def wrapper(*args, **kwargs):
        nonlocal count
        count += 1
        print(f"函数被调用了{count}次")
        return func(*args, **kwargs)
    return wrapper
  1. 用递归实现二分查找。
    答案
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)
  1. 编写函数,将摄氏温度转换为华氏温度。
    答案
def celsius_to_fahrenheit(c):
    return c * 9/5 + 32

挑战题

  1. 实现装饰器缓存函数结果(避免重复计算)。
    答案
def cache(func):
    cached = {}
    def wrapper(*args):
        if args in cached:
            return cached[args]
        result = func(*args)
        cached[args] = result
        return result
    return wrapper
  1. 函数柯里化:将 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
  1. 用闭包实现计数器(每次调用递增)。
    答案
def make_counter():
    count = 0
    def counter():
        nonlocal count
        count += 1
        return count
    return counter
c = make_counter()
print(c(), c())  # 1, 2
  1. 编写生成器函数,生成斐波那契数列。
    答案
def fib_generator():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
  1. 实现函数重载(通过参数类型区分)。
    答案(使用类型检查):
def overload_example(x):
    if isinstance(x, int):
        print("处理整数")
    elif isinstance(x, str):
        print("处理字符串")

通过练习,可以全面掌握Python函数的设计、参数处理及高级特性!

相关推荐

使用opencv-Python进行图像锐化处理

使用OpenCV函数cv::filter2D执行一些拉普拉斯滤波以进行图像锐化使用OpenCV函数cv::distanceTransform以获得二值图像的派生(derived)表示,...

Python-OpenCV 7. 图像二值化

一、介绍图像二值化(ImageBinarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。在数字图像处理中,二值图像占有非常重要的地位,图...

OpenCV+Python裁剪图像

最近使用OpenCV+Python做了一个程序,功能是自动将照片中的文本部分找出来并裁剪/旋转保存为新的图片。这个功能用专业些的说法就是选择并提取感兴趣区域(ROI(RegionofInteres...

简单易懂的人脸识别!用PythonOpenCV实现(适合初...

前言:OpenCV是一个开源的计算机视觉和机器学习库。它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包。根据这个项目的关于页面,OpenCV已被广泛运用在各种项目上,从谷歌街景...

OpenCV行人检测应用方案--基于米尔全志T527开发板

本文将介绍基于米尔电子MYD-LT527开发板(米尔基于全志T527开发板)的OpenCV行人检测方案测试。摘自优秀创作者-小火苗一、软件环境安装1.在全志T527开发板安装OpenCVsudoap...

纯Python构建Web应用:Remi与 OpenCV 结合实现图像处理与展示

引言大家好,我是ICodeWR。在前几篇文章中,我们介绍了Remi的基础功能、多页面应用、动态更新、与Flask结合、与数据库结合、与Matplotlib结合以及与Pandas结合。...

【AI实战项目】基于OpenCV的“颜色识别项目”完整操作过程

OpenCV是一个广受欢迎且极为流行的计算机视觉库,它因其强大的功能、灵活性和开源特性而在开发者和研究者中备受青睐。学习OpenCV主要就是学习里面的计算机视觉算法。要学习这些算法的原理,知道它们适用...

Python自动化操控术:PyAutoGUI全场景实战指南

一、PyAutoGUI核心武器库解析1.1鼠标操控三剑客importpyautogui#绝对坐标移动(闪电速度)pyautogui.moveTo(100,200,duration=0....

从零开始学python爬虫(七):selenium自动化测试框架的介绍

本节主要学习selenium自动化测试框架在爬虫中的应用,selenium能够大幅降低爬虫的编写难度,但是也同样会大幅降低爬虫的爬取速度。在逼不得已的情况下我们可以使用selenium进行爬虫的编写。...

「干货分享」推荐5个可以让你事半功倍的Python自动化脚本

作者:俊欣来源:关于数据分析与可视化相信大家都听说自动化流水线、自动化办公等专业术语,在尽量少的人工干预的情况下,机器就可以根据固定的程序指令来完成任务,大大提高了工作效率。今天小编来为大家介绍几个P...

python+selenium+pytesseract识别图片验证码

一、selenium截取验证码#私信小编01即可获取大量Python学习资源#私信小编01即可获取大量Python学习资源#私信小编01即可获取大量Python学习资源importjso...

Python爬虫实战 | 利用多线程爬取 LOL 高清壁纸

一、背景介绍随着移动端的普及出现了很多的移动APP,应用软件也随之流行起来。最近看到英雄联盟的手游上线了,感觉还行,PC端英雄联盟可谓是爆火的游戏,不知道移动端的英雄联盟前途如何,那今天我们使用到...

一套真实的Python面试题,几十个题目汇总

1.(1)python下多线程的限制以及多进程中传递参数的方式python多线程有个全局解释器锁(globalinterpreterlock),这个锁的意思是任一时间只能有一个线程使用解释器,跟...

一文读透,Python暴力(BF)字符串匹配算法到 KMP 算法之间的变化

1.字符串匹配算法所谓字符串匹配算法,简单地说就是在一个目标字符串中查找是否存在另一个模式字符串。如在字符串"ABCDEFG"中查找是否存在“EF”字符串。可以把字符...

Python实现屏幕自动截图

教程目录需要实现的功能:自动屏幕截图具体需求:1.支持设置截图频率和截图文件存储路径2.在存储截图时判断与前一张截图的相似度,只有屏幕发生了显著的变化才存储截图所需技术(搜索关键词):1.屏幕截...