31天Python入门——第9天:再学函数
|
文章目录
- 再学函数
- 1. 变量在函数中的作用域
- 2. 函数的参数传递.
- 补充学习: 不定长参数*args和**kwargs
- 3. 值传递和引用传递
- 补充学习: 把函数作为参数传递
- 4. 匿名函数
- 5. python中内置的常用函数
- zip()
- map()
- filter()
- all()
- any()
- 6. 函数练习

再学函数
1. 变量在函数中的作用域
变量的作用域是指变量的作用范围.
局部变量: 在函数体或局部范围内声明的变量称为局部变量.局部变量仅在局部作用域内有效.
全局变量: 在函数之外或在全局范围内声明的变量称为全局变量.全局变量允许在函数内部和外部访问,但是不允许在函数内部修改.
golbal: 用于在函数内部访问和修改全局作用域中的变量
.通过在函数内部使用 global
关键字声明变量,该变量就可以在函数内部被修改,并且修改后的值也会影响到全局作用域中的变量.
x = 10def modify_global_variable():global xx = 20print(x)
modify_global_variable()
print(x)
nonlocal: 用于在嵌套函数中修改嵌套作用域外的变量
。它允许你在内部函数中访问并修改外部函数的局部变量,而不是创建一个新的同名局部变量
.并且会影响到外部函数中的同名变量.这样可以实现在嵌套函数中共享和修改变量的目的.(如果不加nonlocal, 也是可以在嵌套函数中访问到外层的变量的,只是无法修改)
def outer():x = "local"def inner():nonlocal xx = "nonlocal"print(x)inner()print("outer:", x)x = 'global'outer()print('global:', x)
2. 函数的参数传递.
函数参数的传递可以分为4类:
-
位置参数: 调用函数时根据函数定义的参数的位置来传递参数.
-
关键字参数: 函数调用通过key=value的形式来传递参数, 可以让函数更加的清晰, 同时也不需要强调顺序.
def self_introduction(name, age, gender):print(f"你好, 我的名字叫{name}")print(f"今年{age}岁, 性别{gender}")self_introduction(name="zhangsan", age=25, gender='男')
需要注意的是: 位置参数和关键字参数可以混用, 但是位置参数必须在前面, 且需要匹配顺序.
但是关键字参数之间, 不存在先后顺序.
# 强制关键字参数.
def self_introduction(name, age, *, gender):print(f"你好, 我的名字叫{name}")print(f"今年{age}岁, 性别{gender}")self_introduction("lisi", '男', gender=25)
- 缺省参数: 也叫做默认参数, 用于在定义函数的时候为参数提供默认值, 调用函数时可以不传递该参数的值, 所有的位置参数必须出现在默认参数前, 包括函数定义和调用.
def self_introduction(name, age, come_from='中国'):print(f"你好, 我的名字叫{name}, 今年{age}岁, 我来自{come_from}")self_introduction(name="zhangsan", age=25)
-
不定长参数: 也叫做可变参数, 用于不确定调用的时候会传递多少参数.
a.
位置传递
: *args. 传递给函数的所有参数, 都会被args所接受,会根据传进去的参数的位置组成一个元组
.- *args允许函数接受任意数量的位置参数.
它以元组的形式传递参数,函数内部可以使用args变量来获取到参数.
b.
关键字传递
: **kwargs, 在参数是key=value的情况下, 所有的key-value都会被kwargs接收, 同时会将key-value组成一个字典.- **kwargs允许函数接收任意数量的关键字参数.
它以字典的形式传递参数, 函数内部可以使用kwargs变量来引用这个字典.
def average(a, b, c):print((a + b + c) / 3)
1.通过位置传递不定常参数
# 通过位置传递不定长参数def average(*args):# print(type(args)) -> 元组# print(args) -> (1,2,3,4,5,6)print(sum(args) / len(args))average(1, 2, 3, 4, 5 ,6)
2.通过关键字传递不定长参数
def self_introduction(**kwargs):print(kwargs)# print(f"你好, 我的名字叫{name}, 今年{age}岁, 我来自{come_from}")self_introduction(name="zhangsan", age=25, come_from='北京')
3.不定长参数在Python当中的应用
def self_introduction(*args, **kw):# print(args)# print(kw)# print(type(kwargs))# print(kwargs)print(f"你好, 我的名字叫{args[0]}, 今年{kw['age']}岁, 我来自{kw['come_from']}")self_introduction("zhangsan", age=25, come_from='北京')
补充学习: 不定长参数*args和**kwargs
请看这块代码:
def wrapper(*args, **kwargs):# 这里直接使用args和kwargs,并没有加上*号cache_key = (args, tuple(sorted(kwargs.items())))if cache_key in cache:return cache.get(cache_key)# 这里使用的是加上*号的*args和**argsresult = func(*args, **kwargs)cache[cache_key] = resultreturn result
注意我在上面代码中注释部分的内容, 现在请思考不加 * 号的不定长参数和加上 * 号的不定长参数在用法上有什么区别?
首先再次说明一下Python当中的*args和**kwargs的用法:
-
*args
- 作用:*args 用于将多个位置参数(非关键字参数)收集为一个
元组
- 语法:
在函数定义中,*args 放在形参列表的最后,表示接收所有未被其他形参捕获的位置参数
- 作用:*args 用于将多个位置参数(非关键字参数)收集为一个
-
**kwargs
- 作用:**kwargs 用于将多个关键字参数收集为一个
字典
- 语法:
在函数定义中,**kwargs 放在形参列表的最后,表示接收所有未被其他形参捕获的关键字参数
- 作用:**kwargs 用于将多个关键字参数收集为一个
-
结合使用 *args 和 **kwargs
在函数定义中,*args 和 **kwargs 可以同时使用,但 *args 必须在 **kwargs 之前
在上面的代码中:
def wrapper(*args, **kwargs):# 这里直接使用args和kwargs,并没有加上*号cache_key = (args, tuple(sorted(kwargs.items())))if cache_key in cache:return cache.get(cache_key)# 这里使用的是加上*号的*args和**argsresult = func(*args, **kwargs)cache[cache_key] = resultreturn result
函数定义当中的形参: def wrapper(*args, **kwargs):
- *args 和 **kwargs 的接收:
- *args 接收所有位置参数, 存储为元组
- **kwargs 接收所有关键字参数, 存储为字典
下面在函数体中使用不定长参数:
# 这里直接使用args和kwargs,并没有加上*号
cache_key = (args, tuple(sorted(kwargs.items())))
print(type(args)) # tuple
print(type(kwargs)) # dict
args 和 kwargs 是作为普通变量使用的,而不是作为参数传递给函数. 这里的 args 是一个元组,kwargs 是一个字典,它们已经被函数定义中的 *args 和 **kwargs 收集并存储了
如果直接打印这里的args和kwargs的类型会发现分别是tuple()和dict()
但是我们发现在函数调用中使用的是加上*号的不定长参数:
# 这里使用的是加上*号的*args和**args
result = func(*args, **kwargs)
其实, 在函数调用中,*args 和 **kwargs 用于将已有的数据结构(元组或字典)**解包** 为函数的参数
:
- *args:将一个元组
解包
为多个位置参数 - **kwargs:将一个
字典
解包为多个关键字参数
总结:
- 在
函数定义
中,*args 和 **kwargs 用于收集动态参数 - 在
函数调用
中,*args 和 **kwargs 用于解包已有的数据结构(元组或字典)为函数的参数
3. 值传递和引用传递
值传递(Pass by Value)和引用传递(Pass by Reference)是关于函数参数传递方式的两个概念.
值传递是指将实际参数的值复制一份给形式参数,函数中对形式参数的修改不会影响到实际参数的值
。在值传递中,函数中对形式参数的修改只会影响到函数内部,不会影响到函数外部。
# 值传递
def modify_value(x):x = 10print(x)value = 5
modify_value(value)
print(value)
引用传递是指将实际参数的引用(地址)传递给形式参数,形式参数和实际参数指向同一块内存地址,函数中对形式参数的修改会影响到实际参数的值。在引用传递中,函数中对形式参数的修改会反映到函数外部.
# 引用传递
def modify_list(lst):lst.append(4) # 修改参数(列表)的内容print(1, id(lst))# lst += [5] # 不会创建新对象, 所以id值不变, 注意这里不要误解+=lst = lst + [5] # 创建了新对象print(2, id(lst))print(1, lst)my_list = [1, 2, 3]
print(3, id(my_list))
modify_list(my_list)
print(2, my_list)
补充说明:
- 不可变对象(如字符串、元组、数字等):修改内容时会创建新的对象,id 值会改变
- 可变对象(如列表、字典、集合等):修改内容时不会创建新的对象,id 值保持不变
需要注意的是,虽然在Python中没有严格的引用传递机制,但是对于可变对象(如列表、字典等),它们的传递方式是引用传递,因为它们的值可以在函数内部被修改. 而对于不可变对象(如数字、字符串等),它们的传递方式类是值传递,因为函数内部对形式参数的修改不会影响到实际参数
理解值传递和引用传递的概念对于编写和调试代码非常重要,可以帮助我们更好地理解函数参数传递的机制和代码中的行为.
# 注意比较下面两种调用方式:
def f(x, li=[]):for i in range(x):li.append(i)print(li)# 1. 方式一
print('当参数为4')
f(4)
print('当参数为5')
# 注意哦, 这里使用的依然是之前的那个默认的li的地址
f(5)# 2. 方式二
print('当参数为4')
f(4)
print('当参数为5')
f(5, li=[4, 5]) # 这里使用的是指定的列表, 所以地址变了
补充学习: 把函数作为参数传递
# 当把函数作为参数传递.
a_list = [15, 111, 2232, 123123, 324234]# 将a_List排序, 排序的根据是数字的个位.
def sorted_by(num):num_string = str(num)[-1]return int(num_string)b_list = sorted(a_list, key=sorted_by)
print(b_list)# 改写之前的计算器:def add(a, b):return a + bdef calc(a, b, func):return func(a, b)res = calc(6, 6, add)
print(res)
4. 匿名函数
也称为lambda函数,是一种简洁的函数定义方式,用于创建一次性的、简单的函数.
匿名函数的语法形式为:lambda 参数: 表达式
匿名函数的返回值就是 表达式的结果
它由关键字 lambda
开头,后跟一个或多个参数,然后是冒号 :
,最后是一个表达式, 匿名函数执行表达式的计算,并返回结果.
匿名函数通常用于需要简单函数逻辑的地方,尤其是在需要传递函数作为参数的情况下,可以更简洁地定义函数,避免定义命名函数的繁琐
。但需要注意的是,匿名函数通常用于表达式较短、逻辑简单的情况,对于复杂的函数逻辑,仍然建议使用命名函数进行定义
def add(a, b):return a + b
lambda a, b: a + b
案例: numbers = [5, 2, 7, 1, 9] 对此列表排序, 根据对3取余的 结果进行排序.
# numbers = [5, 2, 7, 1, 9] 对此列表排序, 根据对3取余的 结果进行排序.
# 2 2 1 1 0
numbers = [5, 2, 7, 1, 9]a_list = sorted(numbers, key=lambda x: x % 3)
print(a_list)
改写前面的计算器程序:
def calculator(a, b, operator):operator_dict = {'+': lambda x, y: x + y,'-': lambda x, y: x - y,'*': lambda x, y: x * y,'/': lambda x, y: x / y,}return operator_dict.get(operator)(a, b)res = calculator(6, 6, '*')
print(res)
5. python中内置的常用函数
zip()
zip: zip([iterable, …]),
将多个可迭代对象打包成元组.
它返回一个可迭代的对象,该对象生成元组,每个元组包含来自每个可迭代对象的元素,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同.
以长的为主使用zip_longest方法
# zip
from itertools import zip_longest
numbers = [1, 2, 3, 4]
letters = ['a', 'b', 'c']
x_list = ['d', 'e']zipped = list(zip_longest(numbers, letters, x_list, fillvalue=0))
print(zipped)for item in zipped:print(item)
map()
map(): map(function, iterable):对可迭代对象中的每个元素应用指定的函数.
# map
def square(x):return x ** 2numbers = [1, 2, 3, 4, 5]# 要将numbers中的数字全部转换为字符串.
a_list = list(map(str, numbers))
print(a_list)
squared_numbers = map(lambda x: x**2, numbers)
print(squared_numbers)
print(list(squared_numbers))
filter()
filter(): filter(function, iterable): 对可迭代对象中的元素进行过滤. 返回值为True时保存
# filter
def is_even(x):return x % 2 == 0numbers = [1, 2, 3, 4, 5]even_numbers = filter(lambda x: x % 2 != 0, numbers)print(list(even_numbers)) # [1, 3, 5]
all()
all(): all(iterable):判断可迭代对象中的所有元素是否都为真.如果是返回 True,否则返回 False.
# all 判断可迭代对象中的所有元素是否都为真.如果是返回 True,否则返回 False.
print(all(['a', 'b', 'c', ''])) # False
print(all([])) # True 注意哦,Python规定如果可迭代对象为空, all()的结果就是 Truenumbers = [1, 2, 3, 4, 5, -1]
# 使用 all() 函数判断是否所有元素都大于0
sign = all(num > 0 for num in numbers)
print(sign) # False
any()
any(): any(iterable): 判断可迭代对象中的任何一个元素是否为真(有一个为真就是真).不是则返回 False,如果有一个为 True,则返回 True.
# any
# print(any(['', 0, '', None]))
# print(any([]))
numbers = [1, 3, 5, -1]
# 使用 any() 函数判断numbers中是否存在偶数元素
sign = any(num % 2 == 0 for num in numbers)
print(sign)
6. 函数练习
1.编写一个函数 get_sum_of_lists,接受多个列表作为参数,并返回它们对应位置元素的和的列表 短列表缺少的用0补齐.
from itertools import zip_longest
# [1, 2, 3, 4, 5, 6]
# [6, 5, 4, 3, 2, 1]
# 拆包
def get_sum_of_lists(*args):# print(*args)zipped = list(zip_longest(*args, fillvalue=0))result = list(map(sum, zipped))return resultlst1 = [1, 2, 3, 4, 5, 6, 7, 8]
lst2 = [6, 5, 4, 3, 2, 1]
lst3 = [6, 5, 4, 3, 2, 1, 3, 6]res = get_sum_of_lists(lst1, lst2, lst3)
print(res)
2.实现一个函数 get_max_length(words),接收一个字符串列表 words,返回列表中最长的单词的长度.
例如,对于输入列表 [‘apple’, ‘banana’, ‘orange’, ‘watermelon’],函数应该返回 10,因为最长的单词是 ‘watermelon’,它的长度为 10
def get_max_length(words):# len_list = list(map(len, words))len_list = [len(word) for word in words]return max(len_list)lst = ['apple', 'banana', 'orange', 'watermelon']
print(get_max_length(lst))
3.实现一个函数get_primes
, 接收一个参数n, 函数功能是: 返回n以内(包含n)的所有的质数. get_primes函数体内使用lambda实现.
只能被1跟它本身整除的数. 2, 3, 4, 5 ,6 ,7 ,8 ,9, 10 每一次取余的结果都不是0, 那么它就是质数. 反之, 就不是质数.
# all, all true , false
# filter
# 5 2 3 4
# 6 2 3 4 5
def get_primes(n):primes_list = list(filter(lambda x: all(x % i != 0 for i in range(2, x)), range(2, n + 1)))return primes_listprimes = get_primes(20)
print(primes)
|
|
相关文章:
31天Python入门——第9天:再学函数
你好,我是安然无虞。 文章目录 再学函数1. 变量在函数中的作用域2. 函数的参数传递.补充学习: 不定长参数*args和**kwargs 3. 值传递和引用传递补充学习: 把函数作为参数传递 4. 匿名函数5. python中内置的常用函数zip()map()filter()all()any() 6. 函数练习 再学函…...
卡特兰数在数据结构上面的运用
原理 Catalan数是一个数列,其第n项表示n个不同结点可以构成的二叉排序树的数量。Catalan数的第n项公式为:  其中,是组合数,表示从2n个元素中选择n个元素的组合数。 Catalan数的原理可以通过以下方式理解&…...
如何分析和解决服务器的僵尸进程问题
### 如何分析和解决服务器的僵尸进程问题 #### **一、僵尸进程的定义与影响** **僵尸进程(Zombie Process)** 是已终止但未被父进程回收资源的进程。其特点: - **状态标识**:在进程列表(如 ps 或 top)中标…...
Kafka分区分配策略详解
Kafka分区分配策略详解 Kafka作为当前最流行的分布式消息队列系统,其分区分配策略直接影响着系统的性能、可靠性和可扩展性。合理的分区分配不仅能够提高数据处理的效率,还能确保系统负载的均衡。 Kafka提供了多种内置的分区分配策略,包括R…...
Vs code搭建uniapp-vue项目
安装vue环境npm install -g vue/clinode版本建议18或者18以上 vue create -p dcloudio/uni-preset-vue 项目名称----正式版vue create -p dcloudio/uni-preset-vue#alpha 项目名称----alpha版Vue3/Vite版 npx degit dcloudio/uni-preset-vue#vite 项目名称---js-正式版npx degi…...
cursor常用快捷键(JetBrains Darcula主题风格)
一、基础操作速查 打开/创建项目 打开项目:Ctrl Shift O(选择文件夹)新建文件:Ctrl N保存文件:Ctrl S关闭当前标签页:Ctrl F4 代码编辑 复制当前行:Ctrl D删除当前行:Ctrl …...
easyExcel2.2.10中为0数据显示为空
在 EasyExcel 2.2.10 中,如果希望将数值为 0 的数据在 Excel 中显示为空(即不显示 0),可以通过以下方法实现: 1. 使用 ExcelProperty 的 format 参数 通过设置单元格格式为 #(# 会忽略 0)&…...
Walrus 经济模型 101
本文作者:Steve_4P,文章仅代表作者观点。 要点总结 2025 年 3 月 20 日,Walrus 基金会宣布成功融资 约 1.4 亿美元,投资方包括 Standard Crypto、a16z 等机构。Walrus 当前估值约 20 亿美元,其中 7% 代币供应量分配给…...
WordPress二次开发中常用到的一些变量和函数
WordPress是一个开源的博客软件平台,由于其强大的功能和灵活性,被广泛用于各种网站的建设。对于开发者来说,了解并掌握WordPress中的常用变量和函数是非常重要的。在WordPress二次开发中,以下是一些常用的变量和函数: …...
【视频】OpenCV:色彩空间转换、灰度转伪彩
1、颜色空间转换 使用OpenCV的函数 cv::applyColorMap 可以将灰度或者正常的RGB格式图片,转换成其它伪彩色,代码很简单: 1)使用 cv::imread 加载图片; 2)使用 std::vector<cv::Mat> matrices 暂存转换后的所有图像; 3)使用 cv::applyColorMap 转换图片颜色; 4)…...
淘宝历史价格数据获取指南:API 与爬虫方案的合法性与效率对比
引言 在淘宝平台的购物生态中,消费者希望通过了解商品历史价格来判断当前价格是否实惠,商家也需要借助历史价格数据制定合理的营销策略、分析市场趋势。获取淘宝商品历史价格数据主要有 API 和爬虫两种方案,它们在合法性与效率上存在显著差异…...
【Redis】高性能内存数据库的多场景应用
在现代互联网应用的开发版图中,Redis 凭借其卓越的性能和丰富的数据结构,成为了众多开发者不可或缺的技术利器。作为一款基于内存的高性能数据库,Redis 不仅能提供快速的数据读写操作,还能在多种复杂的应用场景中发挥关键作用。本…...
Pycharm社区版创建Flask项目详解
一、创建工程项目 二、配置工程目录 新建的空项目下创建目录。 1、新建app.py文件 2、app.py代码如下: from flask import Flask, render_templateapp Flask(__name__)app.route("/") def root():"""主页:return: Index.html"&qu…...
鸿蒙NEXT开发案例:程序员计算器
【环境准备】 • 操作系统:Windows 10 • 开发工具:DevEco Studio 5.0.1 Release Build Version: 5.0.5.306 • 目标设备:华为Mate60 Pro • 开发语言:ArkTS • 框架:ArkUI • API版本:API 13 【项目…...
TCP 三次握手与四次挥手过程
TCP 作为一种面向连接的、可靠的传输层协议,其连接管理机制对于保障数据的可靠传输至关重要。 三次握手(建立连接) 三次握手是 TCP 建立连接时所采用的机制,其目的在于确保客户端和服务器双方都具备发送和接收数据的能力&#x…...
仿新浪微博typecho主题源码
源码介绍 仿新浪微博typecho主题源码,简约美观,适合做个人博客,该源码为主题模板,需要先搭建typecho,然后吧源码放到对应的模板目录下,后台启用即可 源码特点 支持自适应 个性化程度高 可设置背景图、顶…...
python面试高频考点(深度学习大模型方向)
1. python中yeild和return的区别? 2. 介绍一下pytohn中的上下文管理器? 在Python中,上下文管理器(Context Manager) 是一种通过 with 语句管理资源的协议,确保资源(如文件、数据库连接、线程锁…...
【网络层协议】NAT技术内网穿透
IP地址数量限制 我们知道,IP地址(IPv4)是一个4字节32位的整数,那么一共只有2^32也就是接近43亿个IP地址,而TCP/IP协议栈规定,每台主机只能有一个IP地址,这就意味着,一共只有不到43亿…...
【数据分享】2000—2024年我国省市县三级逐年归一化植被指数(NDVI)数据(年平均值/Shp/Excel格式)
之前我们分享过2000-2024年我国逐年的归一化植被指数(NDVI)栅格数据,该逐年数据是取的当年月归一化植被指数(NDVI)的年平均值。!该数据来源于NASA定期发布的MOD13A3数据集!很多小伙伴拿到数据后…...
鸿蒙harmonyOS:笔记 正则表达式
从给出的文本中,按照既定的相关规则,匹配出符合的数据,其中的规则就是正则表达式,使用正则表达式,可以使得我们用简洁的代码就能实现一定复杂的逻辑,比如判断一个邮箱账号是否符合正常的邮箱账号࿰…...
centos7.9镜像源及Python引入ssl问题处理
一、镜像源修改 1. 备份原有的镜像源配置文件 在修改之前,先备份现有的 CentOS-Base.repo 文件: sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2. 编辑镜像源配置文件 使用文本编辑器(如 nano 或 vi)打开 /etc/yum.repos.d/Ce…...
【学Rust写CAD】11 2D CAD可用rust库
使用 Rust 开发 2D CAD 应用时,选择合适的库是关键。以下是一些适合用于 2D CAD 开发的 Rust 库和工具,涵盖图形渲染、几何计算、用户界面等方面: 图形渲染 lyon 简介: lyon 是一个用于 2D 图形渲染的 Rust 库,支持路径填充、描边…...
C#中值类型与引用类型是直观使用示例
一、值类型与引用类型区分 正确理解值类型与引用类型,可以更好的帮助软件开发人员写出性能更好且正确稳定运行的程序: C#值类型与引用类型区别 区别值类型引用类型定义所有继承自【System.ValueType】类型的都是值类型(valueType继承自Syste…...
Spring Cloud之负载均衡之LoadBalance
目录 负载均衡 问题 步骤 现象 什么是负载均衡? 负载均衡的一些实现 服务端负载均衡 客户端负载均衡 使用Spring Cloud LoadBalance实现负载均衡 负载均衡策略 编辑 编辑LoadBalancer原理 服务部署 准备环境和数据 服务构建打包 启动服务 上传J…...
MySQL的数据文件
MySQL的数据文件 mysql的数据都存放在datadir所指的位置,其中包含了mysql中创建的数据库,数据库中包含了表结构(frm文件)、表数据(myd文件)、表索引(myi文件) show variables like %datadir%.frm 存放和表相关的数据信息,主要包括表结构的定…...
【RabbitMQ高级特性】消息确认机制、持久化、发送方确认、TTL和死信队列
🔥个人主页: 中草药 🔥专栏:【中间件】企业级中间件剖析 一、消息确认机制 消费者确认机制确保消息被正确处理后才从队列中删除。如果消费者处理失败(如业务异常或宕机),Broker 会重新投递消息…...
C# 正则表达式
C# 正则表达式 引言 正则表达式(Regular Expression,简称Regex)是一种用于处理字符串的强大工具,在编程领域有着广泛的应用。C# 作为一种流行的编程语言,也内置了对正则表达式的支持。本文将详细介绍 C# 中的正则表达…...
第十四届蓝桥杯省赛电子类单片机学习记录(客观题)
01.一个8位的DAC转换器,供电电压为3.3V,参考电压2.4V,其ILSB产生的输出电压增量是(D)V。 A. 0.0129 B. 0.0047 C. 0.0064 D. 0.0094 解析: ILSB(最低有效位)的电压增量计算公式…...
23种设计模式-桥接(Bridge)设计模式
桥接设计模式 🚩什么是桥接设计模式?🚩桥接设计模式的特点🚩桥接设计模式的结构🚩桥接设计模式的优缺点🚩桥接设计模式的Java实现🚩代码总结🚩总结 🚩什么是桥接设计模式…...
AI重塑视觉艺术:DeepSeek与蓝耘通义万相2.1的图生视频奇迹
云边有个稻草人-CSDN博客 近年来,深度学习、计算机视觉和生成模型在多个领域取得了突破性进展。其中,DeepSeek与蓝耘通义万相2.1图生视频的结合为图像生成与视频生成技术提供了新的发展方向。DeepSeek作为一个图像和视频生成的工具,能够利用深…...
mac怎么安装pycharm?
安装步骤:1、打开PyCharm官网,在官网首页点击“下载”按钮,选择“MacOS”版本进行下载;2、双击打开安装包,将PyCharm拖动到应用程序文件夹中;3、根据提示进行安装,在第一次运行PyCharm时&#x…...
HTML应用指南:利用POST请求获取城市肯德基门店位置信息
随着新零售业态的快速发展,门店位置信息的获取变得越来越重要。作为快餐服务行业的先锋,肯德基不仅在服务质量上持续领先,还积极构建广泛的门店网络,以支持其不断增长的用户群体。为了更好地理解和利用这些数据,本篇文…...
Java主流开发框架之请求响应常用注释
1.RestController 标记一个类为 REST 控制器,处理 HTTP 请求并直接返回数据(如 JSON/XML),而不是视图(如 HTML),一般是放在类的上边 RestController public class UserController {GetMapping…...
go的参数传递都是值传递,但切片需要注意
根据之前学习python和java的经验,每次学习一门新语言时,一定要搞清楚方法的参数传递是值传递,引用传递还是指针传递。 主要原因就是需要知道,某种类型的数据传递给某个方法后,方法里面对它的修改是否会影响到这个数据本…...
C++菜鸟教程 - 从入门到精通 第五节
一.各种排序 接下来,让我们开始学习排序! 1.选择排序 a.原理简介 选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是每次从未排序的部分中选择最小(或最大)的元素,将其放到已排序部分的末尾ÿ…...
同一个局域网的话 如何访问另一台电脑的ip
在局域网内访问另一台电脑,可以通过以下几种常见的方法来实现: 直接通过IP地址访问: 首先,确保两台电脑都连接在同一个局域网内。获取目标电脑的IP地址,这可以通过在目标电脑上打开命令提示符(Windows系…...
[学习笔记]攻防世界-bug
打开场景,提示我们需要登陆 我们先注册一下 注册成功 我们登陆进去 我们点击Manage他提示我们admin才能进入 我们刷新抓包一下试试 Cookie里面除了PHPSESSID,多出来了一个user,看上去是md5加密的,我们尝试解密 这里尝试了好几个网…...
[250324] Kafka 4.0.0 版本发布:告别 ZooKeeper,拥抱 KRaft!| Wine 10.4 发布!
目录 Kafka 4.0.0 版本发布:告别 ZooKeeper,拥抱 KRaft!Wine 10.4 发布! Kafka 4.0.0 版本发布:告别 ZooKeeper,拥抱 KRaft! 近日,Apache Kafka 4.0.0 正式发布!这是一个…...
【赵渝强老师】达梦数据库MPP集群的架构
为了支持海量数据存储和处理等方面的需求,为高端数据仓库提供解决方案,达梦数据库提供了大规模并行处理MPP架构,以极低的成本代价,提供高性能的并行计算。通过使用MPP可以解决以下问题: 需要较高的系统性能支持以支持…...
JWT 鉴权常见知识点及参考答案
JWT 鉴权常见知识点及参考答案 最近在 Go Web 项目当中使用到了 JWT 进行鉴权,因此通过这篇文章对 JWT 的原理及相关的知识点进行总结。 文章目录 JWT 鉴权常见知识点及参考答案JWT 签名算法的详细工作流程一. 签名的生成过程二. 签名的验证过程 1. 什么是 JWT&am…...
洛谷题单入门4-P5729 【深基5.例7】工艺品制作-python
输入格式 第一行三个正整数 w,x,h。 第二行一个正整数 q。 接下来 q 行,每行六个整数 输出格式 输出一个整数表示答案。 三维数组直接标记 class Solution:staticmethoddef oi_input():"""从标准输入读取数据"""w, x, h map(…...
【C语言】内存函数详解
个人主页 文章目录 🏠一、memcpy函数1.函数形式以及功能介绍2.函数的使用3.模拟实现 🚀二、memmove函数1.函数形式以及功能介绍2.函数的使用3.模拟实现 🎡三、memset函数1.函数形式以及功能介绍2.函数的使用 🎉四、memcmp1.函数形…...
使用Python开发自动驾驶技术:车道线检测模型
友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...
HTTP代理的全面解读:什么是HTTP代理?HTTP代理的工作原理
在互联网大潮中,每一个请求和返回数据的背后,都离不开传输协议的支持,而HTTP协议无疑是最熟悉的网络通信基础之一。当我们谈到HTTP代理时,它不仅让浏览网络变得更高效,也为数据采集以及全球性远程任务提供了解决方案。…...
DeepSeek底层揭秘——deepEP
1. 什么是 deepEP? (1) 定义 deepEP (DeepSeek EndPoint) 是 DeepSeek 开源的一款高性能、低延迟的分布式通信库,专为大规模深度学习训练和推理场景设计。它旨在优化分布式计算环境中的通信效率,特别是在节点间数据交换、梯度同步、模型分发…...
内网渗透(CSMSF) 构建内网代理的全面指南:Cobalt Strike 与 Metasploit Framework 深度解析
目录 1. Cobalt Strike 在什么情况下会构建内网代理? 2. Cobalt Strike 构建内网代理的主要作用和目的是什么? 3. Cobalt Strike 如何构建内网代理?需要什么条件和参数? 条件 步骤 参数 4. Cobalt Strike 内网代理能获取什…...
【redis】哨兵:人工恢复主节点故障和哨兵自动恢复主节点故障
文章目录 基本概念人工恢复主节点故障操作流程 哨兵自动恢复主节点故障哨兵集 Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应…...
【Go 】异常处理
1. Go 语言错误处理基础 Go 语言尽量避免使用异常,推荐使用 返回错误 让调用者处理。Go 语言标准库提供 error 接口:type error interface {Error() string }errors.New("错误信息") 创建错误对象。 package mainimport ("errors"…...
微软纳德拉最新一期访谈
萨提亚纳德拉: 微软的AGI计划与量子突破| 2025.2.20 【文章核心预览:】 1、纳德拉回应AI价格战:效率提升将重塑需求,但关键是能否带动GDP增长至10% 2、微软AI收入130亿美元,4年后目标1300亿,但提醒"…...
WebSocket接入SSL证书
目录 碎碎念解决方法创建 HTTPS WebSocket 服务器创建系统服务启动服务 碎碎念 在访问网站时,使用 HTTPS 非常重要。HTTPS 协议不仅可以确保数据传输的安全性,还可以防止中间人攻击和数据篡改等安全问题。任何没有 SSL 证书的内容都可能会被拒绝访问。因…...