当前位置: 首页 > news >正文

Python 函数魔法书:基础、范例、避坑、测验与项目实战

Python 函数魔法书:基础、范例、避坑、测验与项目实战


内容简介

本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由 5 个版块组成,内容层层递进,逻辑清晰。

  1. 基础速通n 个浓缩提炼的核心知识点,夯实编程基础;
  2. 经典范例10 个贴近实际的应用场景,深入理解 Python3 的编程技巧和应用方法;
  3. 避坑宝典10 个典型错误解析,提供解决方案,帮助读者避免常见的编程陷阱;
  4. 水平考试30 道测试题目,检验学习成果,附有标准答案,以便自我评估;
  5. 实战案例3 个迷你项目开发,带领读者从需求分析到代码实现,掌握项目开发的完整流程。

无论你是 Python3 初学者,还是希望提升实战能力的开发者,本系列文章都能为你提供清晰的学习路径和实用的编程技巧,助你快速成长为 Python3 编程高手。


阅读建议

  • 初学者:建议从 “基础速通” 开始,系统学习 Python3 的基础知识,然后通过 “经典范例”“避坑宝典” 加深理解,最后通过 “水平考试”“实战案例” 巩固所学内容;
  • 有经验的开发者:可以直接跳转到 “经典范例”“避坑宝典”,快速掌握 Python3 的高级应用技巧和常见错误处理方法,然后通过 “实战案例” 提升项目开发能力;
  • 选择性学习:如果读者对某个特定主题感兴趣,可以直接选择相应版块学习。各版块内容既相互独立又逻辑关联,方便读者根据自身需求灵活选择;
  • 测试与巩固:完成每个版块的学习后,建议通过 “水平考试” 检验学习效果,并通过 “实战案例” 将理论知识转化为实际技能;
  • 项目实战优先:如果你更倾向于实战学习,可以直接从 “实战案例” 入手,边做边学,遇到问题再回溯相关知识点。

一、基础速通

在 Python 中,函数是一段可重复使用的代码块,用于执行特定任务。通过定义函数,你可以将代码模块化,提升代码的可读性和维护性。

定义函数

使用 def 关键字定义函数,语法如下:

def 函数名(参数1, 参数2, ...):# 函数体return 返回值
  • 函数名:函数的名称,需遵循变量命名规则。
  • 参数:传递给函数的值,可选。
  • 函数体:函数执行的代码块。
  • return:返回结果,可选。

示例

以下是一个简单的函数示例:

def greet(name):return f"Hello, {name}!"# 调用函数
message = greet("Alice")
print(message)  # 输出: Hello, Alice!

参数类型

  1. 位置参数:按顺序传递。
  2. 关键字参数:通过参数名指定。
  3. 默认参数:定义时指定默认值。
  4. 可变参数
    • *args:接收任意数量的位置参数,作为元组。
    • **kwargs:接收任意数量的关键字参数,作为字典。

示例:多种参数

def describe_pet(pet_name, animal_type='dog'):print(f"I have a {animal_type} named {pet_name}.")# 使用默认参数
describe_pet("Buddy")  # 输出: I have a dog named Buddy.# 使用关键字参数
describe_pet(animal_type="cat", pet_name="Whiskers")  # 输出: I have a cat named Whiskers.

返回值

函数可以返回一个或多个值。使用 return 语句返回值,未指定时返回 None

示例:返回多个值

def get_user_info():name = "Alice"age = 30return name, age# 调用函数并接收返回值
user_name, user_age = get_user_info()
print(f"Name: {user_name}, Age: {user_age}")  # 输出: Name: Alice, Age: 30

总结

  • 函数通过 def 定义,可接受参数并返回值。
  • 参数类型包括位置参数、关键字参数、默认参数和可变参数。
  • 使用 return 返回值,未指定时返回 None

函数是 Python 编程中的核心工具,能有效提升代码的模块化和可维护性。


二、经典范例

以下是 10 个 Python 函数使用的经典范例,每个范例都包含完整的程序代码、代码解释说明、测试案例以及程序执行结果。这些案例可供初学者模仿和学习,从而快速掌握函数的编写方法,为进阶学习打下坚实的基础。

温馨提示:这里有一个认知误区。千万不要认为以下函数太简单,函数编写的精髓就是:函数体要小,就是几行语句。这样就可以显著提高代码的重用效率。这就是为什么你看到的函数代码,总是很简单的根本原因。


1. 计算阶乘

def factorial(n):if n == 0:return 1else:return n * factorial(n - 1)# 测试
result = factorial(5)
print(result)  # 输出: 120

解释:

  • 使用递归计算阶乘。
  • 测试案例:factorial(5),结果为 120

2. 反转字符串

def reverse_string(s):return s[::-1]# 测试
result = reverse_string("hello")
print(result)  # 输出: olleh

解释:

  • 使用切片操作反转字符串。
  • 测试案例:reverse_string("hello"),结果为 olleh

3. 合并两个字典

def merge_dicts(d1, d2):return {**d1, **d2}# 测试
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
result = merge_dicts(dict1, dict2)
print(result)  # 输出: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

解释:

  • 使用 ** 解包操作符合并两个字典。
  • 测试案例:merge_dicts(dict1, dict2),结果为 {'a': 1, 'b': 2, 'c': 3, 'd': 4}

4. 检查字符串是否为回文

def is_palindrome(s):return s == s[::-1]# 测试
print(is_palindrome("madam"))  # 输出: True
print(is_palindrome("hello"))  # 输出: False

解释:

  • 判断字符串是否与其反转字符串相等。
  • 测试案例:is_palindrome("madam") 返回 Trueis_palindrome("hello") 返回 False

5. 计算两个数的最大公约数(GCD)

def gcd(a, b):while b:a, b = b, a % breturn a# 测试
result = gcd(48, 18)
print(result)  # 输出: 6

解释:

  • 使用欧几里得算法计算两个数的最大公约数。
  • 测试案例:gcd(48, 18),结果为 6

6. 将列表中的元素去重

def remove_duplicates(lst):return list(set(lst))# 测试
result = remove_duplicates([1, 2, 2, 3, 4, 4, 5])
print(result)  # 输出: [1, 2, 3, 4, 5]

解释:

  • 使用 set 去重,然后转换回列表。
  • 测试案例:remove_duplicates([1, 2, 2, 3, 4, 4, 5]),结果为 [1, 2, 3, 4, 5]

7. 将字符串转换为整数

def str_to_int(s):return int(s)# 测试
result = str_to_int("123")
print(result)  # 输出: 123

解释:

  • 使用 int() 函数将字符串转换为整数。
  • 测试案例:str_to_int("123"),结果为 123

8. 计算列表中元素的平方

def square_list(lst):return [x**2 for x in lst]# 测试
result = square_list([1, 2, 3, 4, 5])
print(result)  # 输出: [1, 4, 9, 16, 25]

解释:

  • 使用列表推导式计算列表中每个元素的平方。
  • 测试案例:square_list([1, 2, 3, 4, 5]),结果为 [1, 4, 9, 16, 25]

9. 计算字符串中每个字符的出现次数

def count_characters(s):return {char: s.count(char) for char in set(s)}# 测试
result = count_characters("hello")
print(result)  # 输出: {'h': 1, 'e': 1, 'l': 2, 'o': 1}

解释:

  • 使用字典推导式计算字符串中每个字符的出现次数。
  • 测试案例:count_characters("hello"),结果为 {'h': 1, 'e': 1, 'l': 2, 'o': 1}

10. 将列表中的元素按升序排序

def sort_list(lst):return sorted(lst)# 测试
result = sort_list([3, 1, 4, 1, 5, 9, 2])
print(result)  # 输出: [1, 1, 2, 3, 4, 5, 9]

解释:

  • 使用 sorted() 函数对列表进行升序排序。
  • 测试案例:sort_list([3, 1, 4, 1, 5, 9, 2]),结果为 [1, 1, 2, 3, 4, 5, 9]

以上是 10 个 Python 函数的经典范例,涵盖了常见的编程任务和算法。每个范例都附有详细的解释和测试案例,方便理解和实践。


三、避坑宝典

在 Python 函数使用中,常见的错误包括语法错误、逻辑错误和运行时错误。以下是 10 种经典错误或者警告及其解决方法。


1. 忘记返回值

错误代码:

def add(a, b):result = a + bprint(add(2, 3))  # 输出: None

错误原因:
函数没有使用 return 返回值,默认返回 None

纠正方法:
添加 return 语句。

正确代码:

def add(a, b):return a + bprint(add(2, 3))  # 输出: 5

2. 函数参数顺序错误

错误代码:

def greet(name, message):print(f"{message}, {name}!")greet("Hello", "Alice")  # 输出: Alice, Hello!

错误原因:
参数顺序与函数定义不匹配。

纠正方法:
调整参数顺序或使用关键字参数。

正确代码:

greet(name="Alice", message="Hello")  # 输出: Hello, Alice!

3. 默认参数为可变对象

错误代码:

def add_item(item, items=[]):items.append(item)return itemsprint(add_item(1))  # 输出: [1]
print(add_item(2))  # 输出: [1, 2]

错误原因:
默认参数 items=[] 是可变对象,会在多次调用中共享。

纠正方法:
使用 None 作为默认值,并在函数内初始化。

正确代码:

def add_item(item, items=None):if items is None:items = []items.append(item)return itemsprint(add_item(1))  # 输出: [1]
print(add_item(2))  # 输出: [2]

4. 未处理函数参数类型

错误代码:

def divide(a, b):return a / bprint(divide(10, 0))  # ZeroDivisionError

错误原因:
未检查除数是否为零。

纠正方法:
添加参数检查。

正确代码:

def divide(a, b):if b == 0:return "Error: Division by zero"return a / bprint(divide(10, 0))  # 输出: Error: Division by zero

5. 函数名与内置函数冲突

错误代码:

def sum(lst):return sum(lst)  # RecursionErrorprint(sum([1, 2, 3]))

错误原因:
函数名 sum 与内置函数 sum 冲突,导致递归调用。

纠正方法:
避免使用内置函数名。

正确代码:

def my_sum(lst):return sum(lst)print(my_sum([1, 2, 3]))  # 输出: 6

6. 未捕获异常

错误代码:

def get_value(d, key):return d[key]print(get_value({"a": 1}, "b"))  # KeyError

错误原因:
未处理字典中不存在的键。

纠正方法:
使用 try-except 捕获异常。

正确代码:

def get_value(d, key):try:return d[key]except KeyError:return "Key not found"print(get_value({"a": 1}, "b"))  # 输出: Key not found

7. 递归深度过大

错误代码:

def factorial(n):return n * factorial(n - 1)print(factorial(5))  # RecursionError

错误原因:
递归没有终止条件,导致栈溢出。

纠正方法:
添加递归终止条件。

正确代码:

def factorial(n):if n == 0:return 1return n * factorial(n - 1)print(factorial(5))  # 输出: 120

8. 变量作用域错误

错误代码:

def set_value():value = 10set_value()
print(value)  # NameError

错误原因:
value 是局部变量,不能在函数外访问。

纠正方法:
使用返回值或全局变量。

正确代码:

def set_value():return 10value = set_value()
print(value)  # 输出: 10

9. 未处理可变参数

错误代码:

def print_args(*args):print(args)print_args(1, 2, 3)  # 输出: (1, 2, 3)
print_args([1, 2, 3])  # 输出: ([1, 2, 3],)

错误原因:
未正确处理列表作为可变参数。

纠正方法:
使用 * 解包列表。

正确代码:

print_args(*[1, 2, 3])  # 输出: (1, 2, 3)

10. 未处理关键字参数

错误代码:

def print_kwargs(**kwargs):print(kwargs)print_kwargs(a=1, b=2)  # 输出: {'a': 1, 'b': 2}
print_kwargs({"a": 1, "b": 2})  # TypeError

错误原因:
未正确处理字典作为关键字参数。

纠正方法:
使用 ** 解包字典。

正确代码:

print_kwargs(**{"a": 1, "b": 2})  # 输出: {'a': 1, 'b': 2}

四、水平考试

Python 函数测试试卷及答案。其中选择题15题、填空题10题、编程题5题,每题后附有答案。试卷满分为100分。


(一)选择题(每题 2 分,共 30 分)

  1. 以下哪个关键字用于定义函数?
    A. func
    B. def
    C. function
    D. define
    答案:B

  2. 以下哪个函数可以返回多个值?
    A. 只能返回一个值
    B. 使用 return 返回多个值,以元组形式返回
    C. 使用 yield 返回多个值
    D. 使用 break 返回多个值
    答案:B

  3. 以下代码的输出是什么?

    def greet(name="World"):return f"Hello, {name}!"
    print(greet())
    

    A. Hello, World!
    B. Hello, name!
    C. 报错
    D. Hello, !
    答案:A

  4. 以下哪个函数参数类型可以接受任意数量的关键字参数?
    A. *args
    B. **kwargs
    C. *kwargs
    D. **args
    答案:B

  5. 以下代码的输出是什么?

    def add(a, b=2):return a + b
    print(add(3))
    

    A. 5
    B. 3
    C. 报错
    D. None
    答案:A

  6. 以下哪个函数可以用于计算列表的长度?
    A. count()
    B. len()
    C. size()
    D. length()
    答案:B

  7. 以下代码的输出是什么?

    def multiply(a, b):return a * b
    print(multiply(3, 4))
    

    A. 12
    B. 7
    C. 34
    D. 报错
    答案:A

  8. 以下哪个函数可以用于对列表进行排序?
    A. sort()
    B. sorted()
    C. order()
    D. arrange()
    答案:B

  9. 以下代码的输出是什么?

    def func(*args):return sum(args)
    print(func(1, 2, 3))
    

    A. 6
    B. (1, 2, 3)
    C. 报错
    D. None
    答案:A

  10. 以下哪个函数可以用于将字符串转换为整数?
    A. int()
    B. str()
    C. float()
    D. bool()
    答案:A

  11. 以下代码的输出是什么?

    def greet(name):return f"Hello, {name}!"
    print(greet("Alice"))
    

    A. Hello, Alice!
    B. Hello, name!
    C. 报错
    D. Hello, !
    答案:A

  12. 以下哪个函数可以用于反转列表?
    A. reverse()
    B. reversed()
    C. flip()
    D. invert()
    答案:B

  13. 以下代码的输出是什么?

    def func(a, b, c=3):return a + b + c
    print(func(1, 2))
    

    A. 6
    B. 3
    C. 报错
    D. None
    答案:A

  14. 以下哪个函数可以用于将列表转换为元组?
    A. list()
    B. tuple()
    C. set()
    D. dict()
    答案:B

  15. 以下代码的输出是什么?

    def func(a, b):return a * b
    print(func(b=3, a=2))
    

    A. 6
    B. 5
    C. 报错
    D. None
    答案:A


(二)填空题(每题 3 分,共 30 分)

  1. 定义一个函数 greet,接受一个参数 name,并返回 Hello, {name}!

    def greet(name):return f"Hello, {name}!"
    

    答案:def greet(name): return f"Hello, {name}!"

  2. 以下代码的输出是什么?

    def add(a, b):return a + b
    print(add(2, 3))
    

    答案:5

  3. 以下代码的输出是什么?

    def func(*args):return len(args)
    print(func(1, 2, 3))
    

    答案:3

  4. 以下代码的输出是什么?

    def func(a, b=2):return a * b
    print(func(3))
    

    答案:6

  5. 以下代码的输出是什么?

    def func(a, b, c=3):return a + b + c
    print(func(1, 2, 4))
    

    答案:7

  6. 以下代码的输出是什么?

    def func(a, b):return a ** b
    print(func(2, 3))
    

    答案:8

  7. 以下代码的输出是什么?

    def func(a, b):return a // b
    print(func(10, 3))
    

    答案:3

  8. 以下代码的输出是什么?

    def func(a, b):return a % b
    print(func(10, 3))
    

    答案:1

  9. 以下代码的输出是什么?

    def func(a, b):return a / b
    print(func(10, 2))
    

    答案:5.0

  10. 以下代码的输出是什么?

    def func(a, b):return a - b
    print(func(10, 3))
    

    答案:7


(三)编程题(每题 8 分,共 40 分)

  1. 编写一个函数 is_even,判断一个整数是否为偶数。如果是偶数,返回 True,否则返回 False

    答案

    def is_even(n):return n % 2 == 0
    
  2. 编写一个函数 factorial,计算一个整数的阶乘。

    答案

    def factorial(n):if n == 0:return 1else:return n * factorial(n - 1)
    
  3. 编写一个函数 reverse_string,反转一个字符串。
    答案

    def reverse_string(s):return s[::-1]
    
  4. 编写一个函数 find_max,接受任意数量的参数,返回其中的最大值。

    答案

    def find_max(*args):return max(args)
    
  5. 编写一个函数 count_vowels,统计字符串中元音字母(a, e, i, o, u)的个数。
    答案

    def count_vowels(s):vowels = "aeiou"return sum(1 for char in s if char in vowels)
    

总分:100 分


五、实战案例

本节内容包含 3 编程学习案例,具体项目如下:

  1. 简易聊天机器人
  2. 待办事项提醒器
  3. 密码生成器

项目 1:简易聊天机器人

功能描述:
实现一个简易聊天机器人,根据用户输入返回预设的响应。

代码:

def chatbot_response(user_input):responses = {"hello": "Hello! How can I help you?","how are you": "I'm just a bot, but I'm doing great!","bye": "Goodbye! Have a nice day!","default": "I'm not sure how to respond to that."}return responses.get(user_input.lower(), responses["default"])# 测试案例
print(chatbot_response("Hello"))  # 输出: Hello! How can I help you?
print(chatbot_response("How are you"))  # 输出: I'm just a bot, but I'm doing great!
print(chatbot_response("What's your name?"))  # 输出: I'm not sure how to respond to that.

执行结果:

Hello! How can I help you?
I'm just a bot, but I'm doing great!
I'm not sure how to respond to that.

项目 2:简易待办事项提醒器

功能描述:
实现一个简易待办事项提醒器,支持添加任务、设置提醒时间,并在指定时间提醒用户。

代码:

import time
from datetime import datetimedef add_task(tasks, task, reminder_time):tasks.append({"task": task, "reminder_time": reminder_time})def check_reminders(tasks):current_time = datetime.now()for task in tasks:if current_time >= task["reminder_time"]:print(f"Reminder: {task['task']} is due now!")tasks.remove(task)# 测试案例
tasks = []
add_task(tasks, "Buy groceries", datetime(2025, 1, 27, 10, 26))  # 设置提醒时间为 2025-1-27 10:26
add_task(tasks, "Read a book", datetime(2025, 1, 27, 10, 28))    # 设置提醒时间为 2025-1-27 10:28while tasks:check_reminders(tasks)time.sleep(60)  # 每分钟检查一次

执行结果:

Reminder: Buy groceries is due now!  # 当时间到达 2025-1-27 10:26 时输出
Reminder: Read a book is due now!    # 当时间到达 2025-1-27 10:28 时输出

项目 3:密码生成器

功能描述:
实现一个密码生成器,生成包含大小写字母、数字和特殊字符的随机密码。

代码:

import random
import stringdef generate_password(length=12):characters = string.ascii_letters + string.digits + string.punctuationpassword = ''.join(random.choice(characters) for _ in range(length))return password# 测试案例
print("Generated Password:", generate_password())  # 输出: 随机生成的密码,如 "A1b@C3d$E5f^"

执行结果:

Generated Password: A1b@C3d$E5f^

总结

以上 5 个迷你项目涵盖了密码生成、待办事项提醒、聊天机器人、等新颖且实用的功能。每个项目都附有测试案例和执行结果,适合用于学习和练习 Python 函数的综合应用。

相关文章:

Python 函数魔法书:基础、范例、避坑、测验与项目实战

Python 函数魔法书:基础、范例、避坑、测验与项目实战 内容简介 本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由 5 个版块组成,内容层层递进…...

Unbutu虚拟机+eclipse+CDT编译调试环境搭建

问题1: 安装CDT,直接Help->eclipse Market space-> 搜cdt , install,等待重启即可. 问题2:C变量不识别vector ’could not be resolved 这是库的头文件没加好,右键Properties->C Build->Enviroment,增加…...

项目部署(springboot项目)

1、安装Nginx,并开启 2、前端项目打包:npm run build:prod--->dist 3、后端项目打包:install--->xxx.jar 4、开放需要的端口号:比如我的后端项目端口号为8282,则需要防火墙和服务器同时开发8282端口 5、将di…...

Spring MVC拦截器

文章目录 1. 拦截器(interceptor)的作用2. 拦截器和过滤器区别3. 拦截器是快速入门 1. 拦截器(interceptor)的作用 Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。 将拦截器按一定的顺序联结成一条链,这条…...

Nginx 路由匹配(Nginx Route Matching)

从小白到高手:深入Nginx 路由匹配 在现代互联网应用中,Nginx 作为一款高性能的 Web 服务器,因其灵活性和高效性而广泛应用于各类网站和服务。Nginx 的路由匹配规则是其核心功能之一,负责决定如何处理传入的请求。通过这些规则&am…...

基于RIP的MGRE实验

实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议,搞通公网配置MGRE VPNNHRP的配置配置RIP路由协议来传递两端私网路由测试全网通 实验配置 1、配置IP地址 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 15.0.0.1 24 [R1]int LoopBack 0 [R1-LoopBack0]i…...

Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)

目录 前言1. 基本知识2. Demo3. 实战代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全&am…...

【Java基础-41.5】深入解析Java异常链:构建清晰的错误追踪体系

在Java编程中,异常处理是保证程序健壮性和可维护性的重要部分。然而,在实际开发中,异常往往不是孤立发生的,而是由一系列相关的异常引发的。为了更好地理解和处理这种复杂的异常场景,Java引入了 异常链(Exc…...

STM32使用VScode开发

文章目录 Makefile形式创建项目新建stm项目下载stm32cubemx新建项目IED makefile保存到本地arm gcc是编译的工具链G++配置编译Cmake +vscode +MSYS2方式bilibiliMSYS2 统一环境配置mingw32-make -> makewindows环境变量Cmake CmakeListnijia 编译输出elfCMAKE_GENERATOR查询…...

特权模式docker逃逸

目录 1.环境 2.上线哥斯拉 3.特权模式逃逸 1.判断是否为docker环境 2.判断是否为特权模式 3.挂载宿主机磁盘到docker 4.计划任务反弹shell 1.环境 ubuntu部署一个存在CVE-2017-12615的docker: (ip:192.168.117.147) kali(ip:192.168.117.128) 哥斯拉 2.上线哥斯拉…...

装出字符串中国第一个匹配项的下标

hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧! function strStr(haystack, needle) {return haystack.indexOf(needle); }// 测试示例 const haystack "sadbutsad"; const needle "sad&q…...

从腾讯云数据仓库TCHouse安全地转移数据到AWS Redshift

实现从AWS Direct Connect连接到腾讯云数据仓库TCHouse-P、TCHouse-C或TCHouse-D,然后使用AWS Glue读取数据并在AWS Redshift中创建对应表并复制数据,需要按照以下步骤进行操作: 网络连接设置 AWS Direct Connect配置: 在AWS管理…...

DataComp:探索下一代多模态数据集

目录 一、TL;DR 二、方法 2.1 为什么要单独研究数据质量? 2.2 数据质量的研究范式 三、其他的工作(related work) 3.1 传统的做法 3.2 数据剪枝和去重(paper直接翻译) 四、DataComp的benchmark 4.1 竞赛条件限…...

【linux】Linux 常见目录特性、权限和功能

目录特性默认权限主要功能/用途/根目录,所有目录的起点755文件系统的顶层目录,包含所有其他子目录和文件/bin基础二进制命令目录(系统启动和修复必需的命令)755存放所有用户可用的基本命令(如 ls, cp, bash 等&#xf…...

基于SpringBoot电脑组装系统平台系统功能实现六

一、前言介绍: 1.1 项目摘要 随着科技的进步,计算机硬件技术日新月异,包括处理器(CPU)、主板、内存、显卡等关键部件的性能不断提升,为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…...

Direct2D 极速教程(1) —— 画图形

极速导航 Direct2D 简介创建新项目:001-DrawGraphics弄一个白窗口在窗口上画图 Direct2D 简介 大家在学 WINAPI 的时候的时候有没有想过,怎么在一副窗口上画图呢?大家知道 Windows 系统是 GUI 图形用户界面 系统,以 Graphics 图形…...

DF 开发1

https://www.bilibili.com/video/BV1RFChYxEhJ/ 多个 workspace 图片上传 S3 上传大量文档 https://www.bilibili.com/video/BV1ySsEeUE6i 解决方案 返回 metadata https://www.bilibili.com/video/BV1t3e5eaENo 给出内容引用出处 模型负载均衡 可以以 ollama 在不同端口起服…...

[Computer Vision]实验二:图像特征点提取

目录 一、实验内容 二、实验过程及结果 2.1 Harris角点检测 2.2 SIFT算法 三、实验小结 一、实验内容 采用Harris与SIFT分别提取特征点及对应的描述子,对比两者的区别(特征点数量、分布、描述子维度、图像变化对二者的影响等)利用特征匹…...

在做题中学习(82):最小覆盖子串

解法:同向双指针——>滑动窗口 思路:题目要求找到s里包含t所有字符的最小子串,这就需要记录在s中每次查找并扩大范围时所包含进去的字符种类是否和t的相同,并且:题目提示t中会有重复字符,因此不能简单认…...

< OS 有关> BaiduPCS-Go 程序的 菜单脚本 Script: BaiduPCS-Go.Menu.sh (bdgo.sh)

目标: 使用 日本阿里云的 VPM 传输文件。 暂时方案: 使用 主机JPN 下载 https://huggingface.co/ 上模型从 JPN 放到 度狗上在家里从狗度下载 为了减少编程,尽量使用现在软件 ,就找到 GitHub - qjfoidnh/BaiduPCS-Go: iikira…...

redis缓存和springboot缓存包冲突怎么办

如果Redis缓存与Spring Boot缓存包发生冲突&#xff0c;可以采取以下几种解决方案&#xff1a; 排除Spring Boot缓存包&#xff1a;在pom.xml文件中排除Spring Boot的缓存依赖&#xff0c;以避免与Redis缓存冲突。例如&#xff1a; <dependency><groupId>org.spr…...

云计算技术深度解析与代码使用案例

云计算技术深度解析与代码使用案例 引言 随着信息技术的飞速发展,云计算作为一种革命性的技术,正在逐步改变我们的生活和工作方式。云计算不仅提供了前所未有的计算能力和存储资源,还以其灵活性和可扩展性,成为现代企业数字化转型的重要支撑。本文将深入探讨云计算的核心…...

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)

祈愿在2025蛇年里&#xff0c; 伟大的祖国风调雨顺、国泰民安、每个人齐心协力&#xff0c;共同经历这百年未有之大变局时代&#xff08;国际政治、AI技术……&#xff09; 祝福亲友同事孩子们平安健康&#xff08;安全、安全、安全&#xff09;、巳巳如意&#xff01; 背景需…...

React Router v6配置路由守卫

首先准备好以下页面 登录页&#xff1a;用户可以在此页面登录。 受保护页&#xff1a;只有登录的用户可以访问&#xff0c;否则会重定向到登录页。 公共页面&#xff1a;不需要鉴权&#xff0c;任何人都可以访问。 1. 安装依赖 首先&#xff0c;我们需要安装 react-router-do…...

双层Git管理项目,github托管显示正常

双层Git管理项目&#xff0c;github托管显示正常 背景 在写React项目时&#xff0c;使用Next.js,该项目默认由git托管。但是我有在项目代码外层记笔记的习惯&#xff0c;我就在外层使用了git托管。 目录如下 code 层内也有.git 文件&#xff0c;对其托管。 我没太在意&…...

Linux--权限

Linux系统的权限管理是保障系统安全的重要机制&#xff0c;以下详细讲解权限相关概念及操作指令&#xff1a; 一、基础权限机制 1. 权限的三元组&#xff0c;读&#xff08;r&#xff09;、写&#xff08;w&#xff09;、执行&#xff08;x&#xff09; 每个文件或目录有三组…...

第25章 项目启航前的密谈

在那弥漫着严谨与专注气息的会议室里&#xff0c;苏睿所长端坐在会议桌前&#xff0c;宛如一座沉稳的山峰&#xff0c;散发着一种让人安心的力量。他的神情认真而庄重&#xff0c;目光中透着几分感慨&#xff0c;仿佛在时光的长河中回溯着项目的点点滴滴。微微侧身看向东方艾艾…...

ModernBERT 为我们带来了哪些启示?

当谷歌在 2018 年推出 BERT 模型时&#xff0c;恐怕没有料到这个 3.4 亿参数的模型会成为自然语言处理领域的奠基之作。 六年后的今天&#xff0c;面对动辄千亿参数的大语言模型浪潮&#xff0c;Answer.AI、LightOn与 HuggingFace 联手打造的 ModernBERT 却选择了一条返璞归真的…...

【MySQL】--- 复合查询 内外连接

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; MySQL &#x1f3e0; 基本查询回顾 假设有以下表结构&#xff1a; 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的姓名首字母为…...

Android Studio打包APK

1.导出APK安装包 如果是首次打包&#xff0c;Create new 单击蓝色对话框右边文件夹&#x1f4c2;图标 &#xff0c;选择密钥保存路径&#xff0c;然后在下方File name对话框中填写您想要名称&#xff0c;再点击OK回到密钥创建对话框。 在此对话框中填写密码&#xff08;Passwo…...

RKNN_C++版本-YOLOV5

1.背景 为了实现低延时&#xff0c;所以开始看看C版本的rknn的使用&#xff0c;确实有不足的地方&#xff0c;请指正&#xff08;代码借鉴了rk官方的仓库文件&#xff09;。 2.基本的操作流程 1.读取模型初始化 // 设置基本信息 // 在postprocess.h文件中定义&#xff0c;详见…...

Git常用命令集合

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... git init <directory》初始化本地仓库 git add <file> 添加文件到暂存区 git …...

【deepseek】deepseek-r1本地部署-第一步:下载LM Studio

要下载LM Studio&#xff0c;可以按照以下步骤进行&#xff1a; 一、访问LM Studio官方网站 打开必应&#xff08;注意&#xff01;百度无法打开官网&#xff09;&#xff0c;输入LM Studio的官方网址&#xff1a;LM Studio - Discover, download, and run local LLMs。进入L…...

【数据结构】_链表经典算法OJ:合并两个有序数组

目录 1. 题目描述及链接 2. 解题思路 3. 程序 3.1 第一版 3.2 第二版 1. 题目描述及链接 题目链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给…...

mybatis(78/134)

前天学了很多&#xff0c;关于java的反射机制&#xff0c;其实跳过了new对象&#xff0c;然后底层生成了字节码&#xff0c;创建了对应的编码。手搓了一遍源码&#xff0c;还是比较复杂的。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE …...

【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR、流水线及伪指令

文章目录 指令格式&#xff08;重点&#xff09;1. 立即数2. 寄存器位移 一、数据传送指令1. MOV指令2. MVN指令3. LDR指令 二、数据计算指令1. ADD指令1. SUB指令1. MUL指令 三、位运算指令1. AND指令2. ORR指令3. EOR指令4. BIC指令 四、比较指令五、跳转指令1. B/BL指令2. l…...

Mybatis配置文件详解

MyBatis通过XML或注解的方式将Java对象与数据库中的记录进行映射&#xff0c;极大地简化了数据访问层的开发。而在MyBatis的核心组成部分中&#xff0c;配置文件扮演着举足轻重的角色。它不仅定义了MyBatis的运行环境&#xff0c;还配置了数据源、事务管理、映射器等关键元素&a…...

一组开源、免费、Metro风格的 WPF UI 控件库

前言 今天大姚给大家分享一个开源、免费、Metro风格的 WPF UI 控件库&#xff1a;MahApps.Metro。 项目介绍 MahApps.Metro 是一个开源、免费、Metro风格的 WPF UI 控件库&#xff0c;提供了现代化、平滑和美观的控件和样式&#xff0c;帮助开发人员轻松创建具有现代感的 Win…...

.NET MAUI 入门学习指南

引言 在当今移动应用和跨平台开发的热潮中,.NET MAUI(Multi - platform App UI)应运而生,为开发者提供了一种高效、统一的方式来构建跨多个平台(如 iOS、Android、Windows 等)的原生应用。它整合了 Xamarin.Forms 的优点,并在此基础上进行了诸多改进和创新,使得开发者…...

【超详细】ELK实现日志采集(日志文件、springboot服务项目)进行实时日志采集上报

本文章介绍&#xff0c;Logstash进行自动采集服务器日志文件&#xff0c;并手把手教你如何在springboot项目中配置logstash进行日志自动上报与日志自定义格式输出给logstash。kibana如何进行配置索引模式&#xff0c;可以在kibana中看到采集到的日志 日志流程 logfile-> l…...

本地大模型编程实战(04)给文本自动打标签

文章目录 准备实例化本地大模型情感分析更精细的控制总结代码 使用本地大模型可以根据需要给文本打标签&#xff0c;本文介绍了如何基于 langchain 和本地部署的大模型给文本打标签。 本文使用 llama3.1 作为本地大模型&#xff0c;它的性能比非开源大模型要查一下&#xff0c;…...

JavaScript反爬技术解析与应对

JavaScript 反爬技术解析与应对 前言 在当今 Web 爬虫与数据抓取的生态环境中&#xff0c;网站运营方日益关注数据安全与隐私保护&#xff0c;因此逐步采用多种反爬技术来限制非授权访问。本文从 JavaScript 角度出发&#xff0c;深入剖析主流反爬策略的技术原理&#xff0c;…...

【C++动态规划 状态压缩】2741. 特别的排列|2020

本文涉及知识点 C动态规划 状态压缩 LeetCode2741. 特别的排列 给你一个下标从 0 开始的整数数组 nums &#xff0c;它包含 n 个 互不相同 的正整数。如果 nums 的一个排列满足以下条件&#xff0c;我们称它是一个特别的排列&#xff1a; 对于 0 < i < n - 1 的下标 i…...

省级数字经济发展水平数据(2011-2022年)-社科数据

省级数字经济发展水平数据&#xff08;2011-2022年&#xff09;-社科数据https://download.csdn.net/download/paofuluolijiang/90028602 https://download.csdn.net/download/paofuluolijiang/90028602 数字经济是指以数据资源为关键要素、以现代信息网络为主要载体、以信息…...

【问题解决】el-upload数据上传成功后不显示成功icon

el-upload数据上传成功后不显示成功icon 原因 由于后端返回数据与要求形式不符&#xff0c;使用el-upload默认方法调用onSuccess钩子失败&#xff0c;上传文件的状态并未发生改变&#xff0c;因此数据上传成功后并未显示成功的icon标志。 解决方法 点击按钮&#xff0c;调用…...

新站如何快速获得搜索引擎收录?

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/8.html 新站想要快速获得搜索引擎收录&#xff0c;需要采取一系列有针对性的策略。以下是一些具体的建议&#xff1a; 一、网站内容优化 高质量原创内容&#xff1a; 确保网站内容原创、…...

判断子序列

hello 大家好&#xff01;今天开写一个新章节&#xff0c;每一天一道算法题。让我们一起来学习算法思维吧&#xff01; function isSubsequence(s, t) {// 初始化两个指针&#xff0c;分别指向字符串 s 和 t 的起始位置let i 0; let j 0; // 当两个指针都未超出对应字符串的长…...

【Leetcode 热题 100】416. 分割等和子集

问题背景 给你一个 只包含正整数 的 非空 数组 n u m s nums nums。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 数据约束 1 ≤ n u m s . l e n g t h ≤ 200 1 \le nums.length \le 200 1≤nums.length≤200 1 ≤ n u m s [ i ] ≤ …...

Kotlin开发(六):Kotlin 数据类,密封类与枚举类

引言 想象一下&#xff0c;你是个 Kotlin 开发者&#xff0c;敲着代码忽然发现业务代码中需要一堆冗长的 POJO 类来传递数据。烦得很&#xff1f;别急&#xff0c;Kotlin 贴心的 数据类 能帮你自动生成 equals、hashCode&#xff0c;直接省时省力&#xff01;再想想需要多种状…...

关于2024年

关于2024年 十分钟前我从床上爬起来&#xff0c;坐在电脑面前先后听了《黄金时代》——声音碎片和《Song F》——达达两首歌&#xff0c;我觉得躺着有些无聊&#xff0c;又或者除夕夜的晚上躺着让我觉得有些不适&#xff0c;我觉得自己应该爬起来&#xff0c;爬起来记录一下我…...