Python 函数魔法书:基础、范例、避坑、测验与项目实战
Python 函数魔法书:基础、范例、避坑、测验与项目实战
内容简介
本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由 5 个版块组成,内容层层递进,逻辑清晰。
- 基础速通:n 个浓缩提炼的核心知识点,夯实编程基础;
- 经典范例:10 个贴近实际的应用场景,深入理解 Python3 的编程技巧和应用方法;
- 避坑宝典:10 个典型错误解析,提供解决方案,帮助读者避免常见的编程陷阱;
- 水平考试:30 道测试题目,检验学习成果,附有标准答案,以便自我评估;
- 实战案例: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!
参数类型
- 位置参数:按顺序传递。
- 关键字参数:通过参数名指定。
- 默认参数:定义时指定默认值。
- 可变参数:
*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")
返回True
,is_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 分)
-
以下哪个关键字用于定义函数?
A.func
B.def
C.function
D.define
答案:B -
以下哪个函数可以返回多个值?
A. 只能返回一个值
B. 使用return
返回多个值,以元组形式返回
C. 使用yield
返回多个值
D. 使用break
返回多个值
答案:B -
以下代码的输出是什么?
def greet(name="World"):return f"Hello, {name}!" print(greet())
A.
Hello, World!
B.Hello, name!
C. 报错
D.Hello, !
答案:A -
以下哪个函数参数类型可以接受任意数量的关键字参数?
A.*args
B.**kwargs
C.*kwargs
D.**args
答案:B -
以下代码的输出是什么?
def add(a, b=2):return a + b print(add(3))
A.
5
B.3
C. 报错
D.None
答案:A -
以下哪个函数可以用于计算列表的长度?
A.count()
B.len()
C.size()
D.length()
答案:B -
以下代码的输出是什么?
def multiply(a, b):return a * b print(multiply(3, 4))
A.
12
B.7
C.34
D. 报错
答案:A -
以下哪个函数可以用于对列表进行排序?
A.sort()
B.sorted()
C.order()
D.arrange()
答案:B -
以下代码的输出是什么?
def func(*args):return sum(args) print(func(1, 2, 3))
A.
6
B.(1, 2, 3)
C. 报错
D.None
答案:A -
以下哪个函数可以用于将字符串转换为整数?
A.int()
B.str()
C.float()
D.bool()
答案:A -
以下代码的输出是什么?
def greet(name):return f"Hello, {name}!" print(greet("Alice"))
A.
Hello, Alice!
B.Hello, name!
C. 报错
D.Hello, !
答案:A -
以下哪个函数可以用于反转列表?
A.reverse()
B.reversed()
C.flip()
D.invert()
答案:B -
以下代码的输出是什么?
def func(a, b, c=3):return a + b + c print(func(1, 2))
A.
6
B.3
C. 报错
D.None
答案:A -
以下哪个函数可以用于将列表转换为元组?
A.list()
B.tuple()
C.set()
D.dict()
答案:B -
以下代码的输出是什么?
def func(a, b):return a * b print(func(b=3, a=2))
A.
6
B.5
C. 报错
D.None
答案:A
(二)填空题(每题 3 分,共 30 分)
-
定义一个函数
greet
,接受一个参数name
,并返回Hello, {name}!
。def greet(name):return f"Hello, {name}!"
答案:
def greet(name): return f"Hello, {name}!"
-
以下代码的输出是什么?
def add(a, b):return a + b print(add(2, 3))
答案:
5
-
以下代码的输出是什么?
def func(*args):return len(args) print(func(1, 2, 3))
答案:
3
-
以下代码的输出是什么?
def func(a, b=2):return a * b print(func(3))
答案:
6
-
以下代码的输出是什么?
def func(a, b, c=3):return a + b + c print(func(1, 2, 4))
答案:
7
-
以下代码的输出是什么?
def func(a, b):return a ** b print(func(2, 3))
答案:
8
-
以下代码的输出是什么?
def func(a, b):return a // b print(func(10, 3))
答案:
3
-
以下代码的输出是什么?
def func(a, b):return a % b print(func(10, 3))
答案:
1
-
以下代码的输出是什么?
def func(a, b):return a / b print(func(10, 2))
答案:
5.0
-
以下代码的输出是什么?
def func(a, b):return a - b print(func(10, 3))
答案:
7
(三)编程题(每题 8 分,共 40 分)
-
编写一个函数
is_even
,判断一个整数是否为偶数。如果是偶数,返回True
,否则返回False
。答案:
def is_even(n):return n % 2 == 0
-
编写一个函数
factorial
,计算一个整数的阶乘。答案:
def factorial(n):if n == 0:return 1else:return n * factorial(n - 1)
-
编写一个函数
reverse_string
,反转一个字符串。
答案:def reverse_string(s):return s[::-1]
-
编写一个函数
find_max
,接受任意数量的参数,返回其中的最大值。答案:
def find_max(*args):return max(args)
-
编写一个函数
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:简易聊天机器人
功能描述:
实现一个简易聊天机器人,根据用户输入返回预设的响应。
代码:
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 个版块组成,内容层层递进…...

vim交换文件的作用
1.数据恢复:因为vim异常的退出,使用交换文件可以恢复之前的修改内容。 2.防止多人同时编辑:vim检测到交换文件的存在,会给出提示,以避免一个文件同时被多人编辑。 (vim交换文件的工作原理:vim交换文件的工作…...
[NOI1995] 石子合并
[NOI1995] 石子合并 题目描述 在一个圆形操场的四周摆放 N N N 堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的 2 2 2 堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 试设计出一个算法,计算出将 …...

真正的智能与那只蝴蝶
“蝴蝶效应”可以展开为对智能本质与大算力关系的追问,其中“蝴蝶”作为隐喻可能指向多重维度——从混沌理论的“蝴蝶效应”到庄子“物我两忘”的蝴蝶之梦。这种并置本身暗示了智能与宇宙秩序、认知边界之间的深刻张力。以下从三个层面展开分析:一、混沌…...
C++小病毒-1.0勒索(更新次数:2)
内容供学习使用,不得转卖,代码复制后请1小时内删除,此代码会危害计算机安全,谨慎操作 在C20环境下,并在虚拟机里运行此代码!,病毒带来后果自负! 使用时请删除在main()里的注释,并修改位置至C:\\(看我代码注释)//可以改成WIN Main() #include <iostream> #i…...
Node.js 的底层原理
Node.js 的底层原理 1. 事件驱动和非阻塞 I/O Node.js 基于 Chrome V8 引擎,使用 JavaScript 作为开发语言。它采用事件驱动和非阻塞 I/O 模型,使其轻量且高效。通过 libuv 库实现跨平台的异步 I/O,包括文件操作、网络请求等。 2. 单线程事…...

基于Django的豆瓣影视剧推荐系统的设计与实现
【Django】基于Django的豆瓣影视剧推荐系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用了Python作为后端开发语言,采用Django作为后端架构,结…...
P10638 BZOJ4355 Play with sequence Solution
Description 给定 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),有 m m m 个操作,分以下三种: assign ( l , r , k ) \operatorname{assign}(l,r,k) assign(l,r,k):对每个 i ∈ [ l , r ] i \…...

MySQL误删数据怎么办?
文章目录 1. 从备份恢复数据2. 通过二进制日志恢复数据3. 使用数据恢复工具4. 利用事务回滚恢复数据5. 预防误删数据的策略总结 在使用MySQL进行数据管理时,误删数据是一个常见且具有高风险的操作。无论是因为操作失误、系统故障,还是不小心执行了删除命…...
项目测试之MockMvc
文章目录 基础基础概念Mockxxx一般实现文件位置 实战MockMvc与Test注解不兼容RequestParams参数RequestBody参数 基础 基础概念 定义:是Spring框架提供的一种用于测试Spring MVC控制器的工具,它允许开发者在不启动完整的web服务器的情况下,…...

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

时间轮:XXL-JOB 高效、精准定时任务调度实现思路分析
大家好,我是此林。 定时任务是我们项目中经常会遇到的一个场景。那么如果让我们手动来实现一个定时任务框架,我们会怎么做呢? 1. 基础实现:简单的线程池时间轮询 最直接的方式是创建一个定时任务线程池,用户每提交一…...
CTF-web: Python YAML反序列化利用
PyYAML存在以下几个特殊标签,如果这些标签被不安全的解析,会造成解析漏洞 从 PyYaml 版本 6.0 开始,load 的默认加载器已切换到 SafeLoader,以降低远程代码执行的风险。更新后易受攻击的是 yaml.unsafe_load 和 yaml.load(input, Loaderyaml.UnsafeLoade…...
代码随想录算法训练营第三十八天-动态规划-完全背包-139.单词拆分
类似于回溯算法中的拆分回文串题目是要求拆分字符串,问这些字符串是否出现在字典里。但这道题可以反着来考虑,从字典中的单词能不能组成所给定的字符串 如果这样考虑, 这个字符串就背包,容器字典中的单词就是一个一个物品问题就转…...

ML基础-Jupyter notebook中的魔法命令
在 Jupyter Notebook 或 IPython 环境中,“魔法命令”(Magic Commands)是一些以百分号(%)或惊叹号(!)开头的特殊命令,用于执行一些与代码运行环境相关的操作,而不仅仅是执行普通的 P…...

Zookeeper入门部署(单点与集群)
本篇文章基于docker方式部署zookeeper集群,请先安装docker 目录 1. docker初期准备 2.启动zookeeper 2.1 单点部署 2.2 集群部署 3. Linux脚本实现快速切换启动关闭 1. docker初期准备 拉取zookeeper镜像 docker pull zookeeper:3.5.6 如果拉取时间过长…...
Kafa分区策略实现
引言 Kafka 的分区策略决定了生产者发送的消息会被分配到哪个分区中,合理的分区策略有助于实现负载均衡、提高消息处理效率以及满足特定的业务需求。 轮询策略(默认) 轮询策略是 Kafka 默认的分区策略(当消息没有指定键时&…...
Pyside/Pyqt中QWebEngineView和QWebEnginePage的区别
在 PySide/Qt 的 WebEngine 模块中,QWebEngineView 和 QWebEnginePage 是两个紧密相关但职责不同的类。以下是它们的核心区别和关系: 1. 职责区分 类名核心职责模块归属QWebEngineView作为可视化的窗口部件(Widget),负…...
Kafka的内部通信协议
引言 kafka内部用到的常见协议和优缺点可以看看原文 Kafka用到的协议 本文奖详细探究kafka核心通信协议和高性能的关键 网络层通信的实现 基于 Java NIO:Kafka 的网络通信层主要基于 Java NIO 来实现,这使得它能够高效地处理大量的连接和数据传输。…...

强大到工业层面的软件
电脑数据删不干净,简直是一种让人抓狂的折磨!明明已经把文件扔进了回收站,清空了,可那些残留的数据就像牛皮癣一样,怎么也除不掉。这种烦恼简直无处不在,让人从头到脚都感到无比烦躁。 首先,心…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
验证redis数据结构
一、功能验证 1.验证redis的数据结构(如字符串、列表、哈希、集合、有序集合等)是否按照预期工作。 2、常见的数据结构验证方法: ①字符串(string) 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...

VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
一、条形码识别改名使用教程 打开软件并选择处理模式:打开软件后,根据要处理的文件类型,选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件,就选择 “PDF 识别模式”;若是处理图片文件&…...
Python打卡训练营学习记录Day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...