10. 函数
一、什么是函数
函数也是对象,对象是内存中专门用来存储数据的一块区域。函数可以用来保存一些可执行代码的,并且可以在需要时,对这些语句进行多次调用。
二、创建函数
创建函数也称为定义函数。我们可以使用 def 关键字来定义函数,它的语法格式如下:
def 函数名(参数列表):# 函数体pass
- 函数名:按照命名规则起个名字,在 Python 中建议小写加下划线的方式;
- 函数体:整个函数真正要执行的代码,一般函数体前面缩进缩进四个空格(缩进统一即可);
- 参数列表:专门用来存储调用时传递给函数的数据;
def say_hello():print("This is a function!")print("hello world!")
定义好的函数并不会执行,你需要调用它,它才能执行里面的代码;
三、函数的调用
函数的调用也就是执行函数。调用函数的语法格式如下:
函数名(参数列表)
say_hello()
同一个函数只需要定义一次,但是可以调用多次;
四、函数的参数
4.1、形参与实参
在定义函数时,可以在函数名后的 () 中定义数量不等的 形参,多个使用之间使用逗号 , 隔开。形参也称 形式参数,定义形参就相当于在函数内部声明了变量,但是并不赋值。如果函数定义时,指定了形参,那么在调用函数传入的值称为 实际参数,简称 形参。
在调用阶段,实参会绑定给对应的形参,简单来说,有几个形参就要传几个实参。这种绑定关系只能在函数体内使用。实参和形参的绑定关系在函数调用时生效,函数调用结束后解除绑定关系。
# 定义函数时,指定形参
def sum(a, b):print(a, ' + ', b, ' = ', (a + b))# 调用函数时,传递实参
sum(10,20)
如果实参的个数与形参的个数不匹配会报以下的错误:
TypeError: sum() takes 2 positional arguments but 3 were given
TypeError: sum() missing 1 required positional argument: 'b'
4.2、参数传递的方式
实参的传递方式有 2 种,一种是 位置参数,另一种是 关键字参数。
位置参数 就是对应位置的实参赋值给对应位置的形参。即第一个实参赋值给第一个形参,第二个实参赋值给第二个实参,以此类推。
def showInfo(name, age, gender):print("name: ", name, ", age: ", age, ", gender: ", gender)showInfo("Sakura", 10, '女')
关键字参数 可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数。
def showInfo(name, age, gender):print("name: ", name, ", age: ", age, ", gender: ", gender)showInfo(name = "Sakura", gender = '女', age = 10)
按照关键字传值的时候,如果形参名不存在,会报以下的错误:
TypeError: showInfo() got an unexpected keyword argument 'sex'
位置参数可以和关键字参数混合使用。
def showInfo(name = "unknown", age = 0, gender = "secrecy"):print("name: ", name, ", age: ",age, ", gender: ", gender)showInfo("Sakura",gender = '女', age = 10)
混合使用位置参数和关键字参数时,必须将位置参数写在前面。否则会报以下错误:
SyntaxError: positional argument follows keyword argument
在函数调用时,我们不能通过位置参数和关键字参数同时给一个形参赋多次值,否则会报以下错误:
TypeError: showInfo() got multiple values for argument 'name'
4.3、默认参数
定义形参时,我们可以为形参指定默认值。指定默认值 后,如果用户传递参数,则默认值没有任何作用;如果用户没有传递参数,则默认值就会生效。
def showInfo(name = "unknown", age = 0):print("name: ", name, ", age: ",age)showInfo("Sakura")
位置形参必须在默认形参的左边,否则会报以下错误:
SyntaxError: non-default argument follows default argument
虽然形参的默认值可以指定为任意的数据类型,但是不推荐使用 可变类型;
names = ["Sakura","Mikoto"]def printName(name=names):for name in names:print(name,end='\t')print()printName()names.append("Shana")printName()
4.4、不定长参数
不定长参数(可变参数)指的是在调用函数时,传入的值(实参)的个数不确定。在定义函数时,我们可以在形参前面加上一个 * ,这样这个形参将会获得所有的实参。它会将所有的实参保存到一个元组中。
# *nums会接受所有的位置参数,并且会将这些参数统一保存到一个元组中
def sum(*nums):print("nums = ", nums, "type: ", type(nums))result = 0for n in nums:result += nprint(result,'\n')sum()
sum(1,2)
sum(1,2,3)
在 * 号的形参只能有一个,带 * 号的参数也可以和其它参数配合使用。
# 第一个参数给num1,第二个参数给num2,剩下的都保存到nums的元组中
def sum(num1, num2, *nums):print("num1: ", num1)print("num2: ", num2)print("nums: ", nums, "type: ", type(nums))result = 0for n in nums:result += nprint(result, '\n')sum(1,2)
sum(1,2,3)
sum(1,2,3,4)
sum(1,2,3,4,5)
可变参数可以不写在最后,但是,带 * 后的所有参数,必须以关键字参数的形式传递。
# 第一个位置参数给num1,剩下的位置参数给nums的元组,num2必须使用关键字参数
def sum(num1, *nums, num2):print("num1: ", num1)print("num2: ", num2)print("nums: ", nums, "type: ", type(nums),'\n')sum(1,2,num2 = 3)
sum(1,2,3,num2 = 4)
sum(1,2,3,4,num2 = 5)
# 所有的位置参数后给nums,num1和num2必须使用关键字参数
def sum(*nums, num1, num2):print("num1: ", num1)print("num2: ", num2)print("nums: ", nums, "type: ", type(nums),'\n')sum(1,num1 =2,num2 =3)
sum(1,2,num2 = 3,num1 = 4)
sum(1,2,3,num1 = 4,num2 = 5)
如果在形参的开头直接写一个 *,则要求我们的所有参数必须以关键字参数的形式传递。
def sum(*, num1=10, num2=20, num3):print("num1: ", num1)print("num2: ", num2)print("num3: ", num3)print()sum(num3=30)
sum(num1=11, num2=22,num3=33)
sum(num2=10,num3=10)
* 形参只能接受位置参数,而不能接受关键字参数。但我们可以使用 ** 形参接受其它的关键字参数,它会将这些参数统一保存在字典中,字典的 key 就是参数的名字,字典的 value 就是参数的值。
def sum(**nums):print("nums: ", nums, ", type: ", type(nums))sum(num1 =1,num2 = 2, num3 = 3)
** 形参只能有一个,并且必须写在所有参数的最后。
def sum(num1, num2, **nums):print("num1: ", num1)print("num2: ", num2)print("nums: ", nums, ", type: ", type(nums))sum(num1 =1,num2 = 2, num3 = 3, num4 = 4)
4.5、参数的解包
传递实参时,也可以在序列类型的参数前添加 * 号,这样它会自动将序列中的元素一次作为参数传递。这里要求序列中元素的个数必须和形参中的个数一致。
def fun(num1, num2, num3):print("num1: ", num1)print("num2: ", num2)print("num3: ", num3)t = (10,20,30)
fun(*t)print()l = [10,20,30]
fun(*l)
我们还可以通过 ** 对字典进行解包。字典的 key 要与函数的形参对应。
def fun(num1, num2, num3):print("num1: ", num1)print("num2: ", num2)print("num3: ", num3)d = {"num1":10, "num2":20, "num3":30}
fun(**d)
4.6、实参的类型
函数在调用时,解析器不会检查实参的类型,实参可以是任意类型的对象。
def showInfo(arg):print("arg: ", arg)showInfo("Sakura")
showInfo(True)
showInfo(123)
showInfo(None)
showInfo([1,2,3])
在函数中对形参进行重新赋值,不会影响到其它的变量。
def fun(arg):arg = 30print("arg: ", arg, "id: ",id(arg))c = 10
fun(c)
print('c: ', c, "id: ", id(c))
但是,如果形参指向的是一个对象,当我们通过形参去修改对象时,会影响到所有指向该对象的变量。
def fun(arg):arg[0] = 30print('arg: ', arg, 'id: ',id(arg))c = [1,2,3]
fun(c)
print('c: ', c, 'id: ', id(c))
此时,我们可以传递实参的一个副本。
def fun(arg):arg[0] = 30print("arg: ", arg, "id: ",id(arg))c = [1,2,3]
# fun(c.copy())
fun(c[:])
print('c: ', c, "id: ", id(c))
函数的参数默认传递的是 形参的引用;
五、函数的返回值
返回值 就是函数执行以后返回的结果。我们可以通过 return 来指定函数的返回值。我们可以直接使用函数的返回值,也可以通过一个变量来接受函数的返回值。return 后面跟什么值,函数就会返回什么值。return 后面可以跟任意对象,返回值甚至可以是一个函数。
def sum(*nums):print("nums = ", nums, "type: ", type(nums))result = 0for n in nums:result += nprint(result,'\n')sum()
sum(1,2)
sum(1,2,3)
如果仅仅写一个 return 或不写 return,则相当于 return None。
def fun():passprint(fun())
def fun():returnprint(fun())
在函数中,return 后的代码都不会执行。return 一旦执行,函数自动结束。
def fun():print("hello")returnprint("world")print(fun())
我们还可以使用都好分割开多个返回值,此时会被 return 返回为元组的形式。
def add(a,b):return a,b,a+bresult = add(10,20)
print(result)
print(type(result))
函数名 是函数对象,打印函数名实际是在打印函数对象;
函数名() 是在调用函数,打印函数名()实际上是在打印函数的返回值;
return 是函数结束的标志,即函数体代码一旦运行到 return 会立刻终止函数的运行,并且会将 return 后的指当作本次运行的结果返回。
六、文档字符串
我们可以通过 help() 函数查询 python 中函数的用法。help() 函数是 python 内置的一个函数,它的使用语法格式如下:help(函数对象)。
help(print)
在定义函数时,我们可以在函数内部编写文档字符串,文档字符串 就是函数的说明。当我们编写了文档字符串时,就可以通过 help() 函数来查看函数的说明。文档字符串其实就是直接在函数的第一行写一个字符串,一般我们会使用三重引号,这样可以写多行。
def sum(num1:int=0, num2:int=0,*nums:int):"""这是一个加法函数@param num1 接收第一个加数@param num2 接收第二个加数@param *nums 可以接受任意多个参数@return result 该函数返回相加的结果"""result = 0for n in nums:result += nhelp(sum)
七、作用域
作用域指的是变量生效的区域。在 python 中一共有 2 中作用域。一种是 全局作用域,另一种是 函数作用域。
全局作用域 在程序执行时创建,在程序结束时销毁。所有函数以外的区域都是全局作用域。在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问。
函数作用域 在函数调用时创建,在调用结束时销毁。函数每调用一次,就会产生一个新的函数作用域。在函数中作用域中定义的变量,都是局部变量,它只能在函数内部被访问。
b = 20def fun():# a定义在函数内部,所以它的作用域就是函数内部,函数外部无法访问a = 10print("函数内部:a = ", a)print("函数内部:b = ", b)fun()
print("函数外部:b = ", b)
当我们使用一个变量时,会优先在当前作用域中寻找变量。如果有则使用,如果没有则继续去上一级作用域中去寻找。如果上一级作用域中有则使用,如果依然没有则继续去上级作用域中寻找,以此类推。
def fun1():a = 10b = 10print("fun1中的a:", a)print("fun1中的b:", b)def fun2():a = 20print("fun2中的a:", a)print("fun2中的b:", b)fun2()fun1()
如果直至找到全局作用域,依然也没有找到,则会抛出异常:
NameError: name 'c' is not defined
在函数中为变量赋值时,默认都是为局部变量赋值。如果希望在函数内部修改全局变量,则需要使用 global 关键字来声明变量。
a = 10
b = 10def fun():# 在函数中为变量赋值时,默认都是为局部变量赋值a = 20# 如果希望在函数内部修改全局变量,则需要使用 global 关键字来声明变量global b# 修改全局变量b = 30print("函数内部:a = ", a)print("函数内部:b = ", b)fun()
print("函数外部:a = ", a)
print("函数外部:b = ", b)
建议全局变量大写,局部变量小写;
八、类型提示
在 Python 3.5 以上的版本函数支持类型提示功能。
def 函数名(形参:形参提示性信息) -> 返回值提示信息:...
def showInfo(name:str,age:int=0) -> dict:print(f"name:{name},age:{age}")return {"name":name,"age":age}result = showInfo("Sakura",10)
print(result)
result = showInfo("Sakura")
print(result)# 可以通过__annotations__查看函数的提示信息
print(showInfo.__annotations__)
九、函数递归
递归简单理解就是自己引用自己。递归式函数就是在函数中自动调用自己(直接或间接调用函数本身)。递归是解决问题的一种方式,它和循环很像。它的整体思想是,将一个大的问题分解为一个个的小问题,直到问题无法分解时,再去解决问题。
递归式函数的两个要件:
- 基线条件
- 问题可以被分解为的最小问题,当满足基线条件时,递归就不在执行了
- 递归条件
- 将问题继续分解的条件
def factorial(num):# 基线条件,判断num是否为1,如果为1则此时不能再继续递归if num == 1:return 1return num * factorial(num-1)ressult = factorial(10)
print(ressult)
十、内建函数
Python 解释器运行时,会自动加载很多的常用的变量、函数以及类,这些就是内建功能或者数据,我们把自动导入的函数称之为 内建函数。我们可以通过 dir(__builtin__)
来查看 Python 解释器运行时自动加载的数据。
【1】、range() 函数
range(start, stop[, step])
range() 可以用来生成一个自然数的序列,它有三个参数,第一个参数是 起始位置,可以省略,默认是 0,第二个参数是 结束位置,第三个参数是 步长,也可以省略,默认是 1。
range() 函数返回一个 range 对象,是一个可迭代的对象,可以配合 for 或 next() 等使用。如果想要得到列表,可通过 list() 函数。
a = range(5)
print(a)
print(type(a))
print(list(a))
【2】、map() 函数
map(function, iterable, *iterables)
map() 函数会根据提供 function 指向的函数对指定的序列 iterable 做映射。参数序列中的每一个元素分别调用 function() 函数,将每次 function() 函数的返回值,存放到序列中当作最后的结果。
a = map(lambda x: x**2, range(1,6))
print(a)
print(type(a))for item in a:print(item)
a = map(lambda x, y: x+y, [1, 2, 3], (4, 5, 6))
print(a)
print(type(a))for item in a:print(item)
【3】、filter() 函数
filter(function, iterable)
filter() 函数会对序列 iterable 中的每个元素调用 function 指向的函数执行过滤操作。在每次执行时,结果为 True 的序列元素存储到结果中。
a = filter(lambda x : x%2, range(1,6))
print(a)
print(type(a))for item in a:print(item)
十一、函数对象
在 Python 中,函数是一等对象,它具有以下特点:① 对象是在运行时创建的; ② 能赋值给变量或作为数据结构中的元素; ③ 能作为参数传递; ④ 能作为返回值返回;
def func():print("func()函数执行了")# 可以将函数赋值给一个变量
f = func
print(f)
print(func)# 通过变量调用函数
f()
def func():print("func()函数执行了")# 可以把函数当作函数的参数传入
def fun(f):print(f)f()fun(func)
def func():print("func()函数执行了")# 可以把函数当作函数的返回值返回
def fun():return funcres = fun()
print(res)
res()
十二、高阶函数
高阶函数至少要符合以下两个特点中的一个:① 接收一个或多个函数作为参数; ② 将函数作为返回值返回;
当我们使用一个函数作为参数时,实际上是将指定的代码传递进了目标函数。
def filter(list, fun):new_list = []for n in list:if fun(n):new_list.append(n)return new_listdef IsEven(num):return num %2 == 0def IsGreater5(num):return num > 5list = [x for x in range(11)]new_list = filter(list,IsEven)
print(new_list)new_list = filter(list,IsGreater5)
print(new_list)
十三、匿名函数
匿名函数也称为 lambda 函数表达式,lambda 表达式专门用于创建一些简单的函数,它是函数创建的又一种方式。它的语法格式如下:
lambda 参数列表 : 返回值
我们可以通过如下方法调用 lambda 函数表达式:
(lambda 形参列表 : 返回值)(实参列表)
print(lambda a, b : a + b)
print((lambda a, b : a + b)(10, 20))
我们也可以将一个匿名函数赋值给变量。
def filter(list, fun):new_list = []for n in list:if fun(n):new_list.append(n)return new_listlist = [x for x in range(11)]new_list = filter(list, lambda num : num % 2 == 0)
print(new_list)new_list = filter(list, lambda num : num > 5)
print(new_list)
匿名函数一般都是作为参数使用;
如果匿名函数不需要形参,可以书写如下格式:lambda : 表达式
匿名函数默认有 return;
相关文章:
10. 函数
一、什么是函数 函数也是对象,对象是内存中专门用来存储数据的一块区域。函数可以用来保存一些可执行代码的,并且可以在需要时,对这些语句进行多次调用。 二、创建函数 创建函数也称为定义函数。我们可以使用 def 关键字来定义函数ÿ…...
计算机网络:数据链路层(二)
网课资源: 湖科大教书匠 1、网络适配器和MAC地址 习题1 1 以下哪个地址是广播MAC地址 A. 00-00-00-00-00-00 B. AB-CD-EF-11-22-33 C. FF-FF-FF-FF-FF-FF D. 29-29-29-29-29-29 2 以下哪个地址是多播MAC地址 A. 00-00-00-00-00-00 B. A9-8B-7C-6D-5E-4F C. FF-FF-…...
一万台服务器用saltstack还是ansible?
一万台服务器用saltstack还是ansible? 选择使用 SaltStack 还是 Ansible 来管理一万台服务器,取决于几个关键因素,如性能、扩展性、易用性、配置管理需求和团队的熟悉度。以下是两者的对比分析,帮助你做出决策: SaltStack&…...
设计模式学习之——观察者模式
观察者模式是一种行为型设计模式,它用于在对象之间建立一对多的依赖关系。 一、定义与角色 定义: 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察…...
服务器实现ssh证书登录
1.生成公钥和私钥 ssh-keygen -t rsa 提示默认生成位置为/root/.ssh/id_rsa ,直接回车。(也可以自己修改) 提示输入证书的密码,可以留空,建议输入,如果输入了,则需要再次确认,记住这个证书密码(证书再加…...
python基础知识精讲
Python基础知识精讲 Python是一种广泛使用的高级编程语言,以其清晰的语法和代码可读性而闻名。它支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。以下是Python基础知识的详细讲解。 1. Python简介 Python由Guido van Rossum创建&#x…...
分页查询日期格式不对
方式一:在属性上加入注解,对日期进行格式化 方式二:在 WebMvcConfiguration 中扩展Spring MVC的消息转换器,统一对日期类型进行格式化处理 /*** 统一转换处理扩展spring mvc* 后端返回前端的进行统一转化处理* param converters*/Overrideprotected voi…...
Windsurf可以上传图片开发UI了
背景 曾经羡慕Cursor的“画图”开发功能,这不Windsurf安排上了。 Upload Images to Cascade Cascade now supports uploading images on premium models Ask Cascade to build or tweak UI from on image upload New keybindings Keybindings to navigate betwe…...
工作坊报名|使用 TEN 与 Azure,探索你的多模态交互新场景
GPT-4o Realtime API 发布,语音 AI 技术正在进入一场新的爆发。语音AI技术的实时语音和视觉互动能力将为我们带来更多全新创意和应用场景。 实时音频交互: 允许应用程序实时接收并响应语音和文本输入。自然语音生成: 减少 AI 技术生成的语音…...
Java 虚拟机:承载 Java 生态的神奇魔盒
在软件开发的世界里,Java 虚拟机(JVM)就像一位智慧的管家,默默守护着 Java 生态系统的运行。它不仅让 Java 实现了"一次编写,到处运行"的梦想,更是成为了多种编程语言的运行平台。让我们一起走进…...
Linux VLAN 实现原理技术笔记
一、引言 VLAN(虚拟局域网)在整车网络架构中起着至关重要的作用,它能够在物理网络基础设施上创建逻辑隔离的网络区域,提高车内网络的安全性、灵活性和性能。Linux 内核通过一系列复杂的机制实现了 VLAN 功能,本技术笔记…...
【Git】:分支管理
目录 理解分支 创建分支 切换分支 合并分支 删除分支 合并冲突 分支管理策略 快进合并 正常合并 bug 分支 总结 理解分支 在版本控制系统中,分支是一条独立的开发线路。它允许开发者从一个主要的代码基线(例如master分支)分离出来…...
Java中的运算符“instanceof“详解
在Java中,instanceof运算符用于检查一个对象是否是某个特定类的实例,或者是否实现了某个特定接口。它返回一个布尔值(true或false),用于在运行时进行类型检查。这在处理多态性时尤其有用,可以帮助我们确定对…...
Profinet转Modbus TCP西门子SINAMICS G120变频器与施耐德M580通讯案例
一. 案例背景 在复杂的工业自动化场景中,企业常常会采用不同品牌的设备来构建生产系统。西门子SINAMICS G120变频器以其高性能、高精度的速度和转矩控制功能,在电机驱动领域应用广泛。施耐德M580可编程逻辑控制器则以强大的逻辑控制和数据处理能力著称&a…...
机器学习实战笔记39-43树模型基础
目前最常用的是CART树: 评价标准:每次划分后子节点的纯度(即是否标签都为0/1),分为信息熵、基尼系数(越小则纯度越高)和分类误差 找划分节点的方法:CART树无需区分连续和离散变量&am…...
`uni.setClipboardData` 是 uni-app 提供的一个 API 设置系统剪贴板的内容
uni.setClipboardData是uni-app提供的一个API,用于设置系统剪贴板的内容。 使用说明: 使用此API可以将指定的文本内容复制到系统剪贴板,使用户能够在其他应用或页面中粘贴这些内容。 uni.setClipboardData({data: , // 需要复制的内容 suc…...
Android opengl 绘制矩形,宽高相同,不能显示为正方形,是怎么回事
在Android上使用OpenGL绘制矩形(或尝试显示为正方形)时,如果结果显示为不是正方形,可能有几个原因。以下是一些常见的因素及解决方法: 视口(Viewport)设置不当: OpenGL的视口定义了…...
网络安全开源组件
本文只是针对开源项目进行收集,如果后期在工作中碰到其他开源项目将进行更新。欢迎大家在评论区留言,您在工作碰到的开源项目。 祝您工作顺利,鹏程万里! 一、FW(防火墙) 1.1 pfSense pfSense项目是一个免费…...
【C++初阶】第5课—模版初阶
文章目录 1. 函数模版1.1 函数模版格式1.2 函数模版原理1.3 函数模版的实例化1.4 模版参数的匹配原则 2. 类模版 1. 函数模版 在讲函数模版之前先看一个例子 为了实现泛型编程,C提出了函数模版的概念函数模版与类型无关,在使用时被参数化,根据…...
【力扣热题100】[Java版] 刷题笔记-3. 无重复字符的最长子串
题目:3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 解题思路 根据题目,只需要返回无重复字符串的最长子串的长度,所以我们不需要知道知道字符串内容是什么,在整个字符串 s 中&…...
无人机数据处理系统:原理与核心系统
一、数据处理系统的运行原理 数据获取:无人机在飞行过程中,通过搭载的传感器(如相机、激光雷达等)采集到各种类型的数据,例如图像、点云等。这些数据是后续处理和分析的基础。 数据传输:采集到的数据会通…...
Hadoop分布式文件系统(二)
目录 1. 引言1. Hadoop文件操作命令2. 部分常用的Hadoop FS Shell命令2.1 ls列出文件2.2 mkdir创建目录2.3 put上传文件2.4 cat查看文件2.5 get复制文件2.6 rm删除文件 3. Hadoop系统管理命令4. HDFS Java API 示例参考 1. 引言 大多数HDFS Shell命令的行为和对应的Unix Shell命…...
PortSwigger 原型污染
一、什么是原型污染 原型污染是一种 JavaScript 漏洞,它使攻击者能够向全局对象原型添加任意属性,然后这些属性可能被用户定义的对象继承。 二、JavaScript 原型和继承基础 1、原型 JavaScript 中的每个对象都链接到某种类型的另一个对象,称…...
雪花算法详解:分布式系统中高效唯一的ID生成方案
文章目录 原理与结构工作流程优势局限性应对高并发的方法适用场景 雪花算法(Snowflake Algorithm)是由Twitter开发的一种分布式全局唯一ID生成方案,旨在解决在分布式系统中快速、无冲突地生成唯一标识符的问题。它通过巧妙的设计,…...
[Redis#7] set | 命令 | 集合 | 用户画像 | UV
目录 1. 特点 2. 常用命令 2.1 普通命令 2.2 集合间操作 2.3. 命令小结 3.内部编码 4. 应用场景 1. 构造用户画像 2. 计算用户之间的共同好友 3. 统计 UV 1. 特点 集合类型也是保存多个字符串类型的元素的,和 list 类型不同的是: 无序性&…...
中介者模式 (Mediator Pattern)
文章目录 中介者模式 (Mediator Pattern)原理优点缺点示例代码场景描述1. 定义中介者接口2. 实现具体中介者3. 定义同事类接口4. 实现具体同事类5. 客户端代码输出结果 UML 类图使用场景小结 中介者模式 (Mediator Pattern) 中介者模式是一种 行为型设计模式,用来降…...
PVE 软路由单网口——VLAN 实践
从VLAN交换机出发,到PVE的Linux Bridge 、Linux VLAN,再到iKuai等软路由软件的设置,尽可能的了解VLAN设置细节,避免踩坑。 本文使用的快速切换CIDR的脚本 PVE 调试之“一键设置网络连接的以太网的CIDR“——“.PS1 脚本” 默认…...
搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档
搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档 本项目采用以下架构: NFS服务器: 负责存储文档资料。Web服务器: 负责提供文档访问和编辑功能。SELinux: 负责权限控制,确保文档安全。Git服务器: 负责存储文档版本历史&#x…...
【QT】控件8
1.QDial 通过调节旋钮位置来控制窗口的不透明度: void Widget::on_dial_valueChanged(int value) {qDebug()<<value;this->setWindowOpacity((double)value/100); }效果演示: 2.Date/Time Edit 计算两个日期的差值 ui界面设计 计算按钮按下…...
asyncio.to_thread 详解及示例代码
asyncio.to_thread 详解及示例代码 1. asyncio.to_thread() 简介函数签名返回值 2. 示例代码示例 1: 执行阻塞的 I/O 操作示例 2: 执行阻塞的 CPU 密集型操作 3. 注意事项4. 总结 在异步编程中,asyncio 是 Python 中用于编写异步代码的标准库。然而,有时…...
MYSQL字段变更
修改字段长度 ALTER TABLE tqt_sp_prod.t_receipt_order_head MODIFY COLUMN CUS_CONTRACT_CD VARCHAR(50) COMMENT 客户合同编号;添加varchar类型字段 AFTER 此处指在loc_cd字段后面 ALTER TABLE m_product ADD COLUMN FIXED_ASSET_NUM VARCHAR(100) DEFAULT NULL COMME…...
【通俗理解】步长和学习率在神经网络中是一回事吗?
【通俗理解】步长和学习率在神经网络中是一回事吗? 【核心结论】 步长(Step Size)和学习率(Learning Rate, LR)在神经网络中并不是同一个概念,但它们都关乎模型训练过程中的参数更新。 【通俗解释&#x…...
力扣-位运算-8【算法学习day.48】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
C++ 字符串中数字识别
【问题描述】 输入一个字符串,含有数字和非数字字符,如“sumabc234;while(abc700)tab{ass346;bssabc267;}”,将其中连续的数字作为一个整数,依次存放到一个数组nums中。例如,234放在nums[0],700放在nums[1…...
计算机毕业设计Python+卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
jvm-49-linux 服务器 cpu 使用率升高应该如何排查分析?
拓展阅读 JVM FULL GC 生产问题 I-多线程通用实现 JVM FULL GC 生产问题 II-如何定位内存泄露? 线程通用实现 JVM FULL GC 生产问题 III-多线程执行队列的封装实现,进一步抽象 jvisualvm java 性能分析工具 jvm-44-jvm 内存性能分析工具 Eclipse Me…...
FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现
FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现 原因ADS111x连续采样实现连续采样功能说明iic读取adc的数据速率 VS adc连续采样的速率adc连续采样的速率iic读取adc的数据速率结论分析 FPGA读取adc数据问题一:读取adc数…...
Web开发基础学习——HTML, CSS, JavaScript 的区别和联系
Web开发基础学习系列文章目录 第一章 基础知识学习之HTML, CSS, JavaScript 的区别和联系 文章目录 Web开发基础学习系列文章目录前言一、定义说白了,就是HTML负责网页的内容,CSS负责网页的格式,JS负责网页的交互。 二、 功能三、联系四、示…...
通义灵码走进北京大学创新课堂丨阿里云云原生 10 月产品月报
云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 趋势热点 🥇 通义灵码走进北京大学创新课堂,与 400…...
Facebook Messenger背后的技术架构:即时通讯的实现之道
Facebook Messenger,作为全球最受欢迎的即时通讯应用之一,每天承载着数十亿的消息交换。其背后支撑这一流畅通讯体验的技术架构,融合了大量先进的技术和创新的解决方案。本文将从技术角度,深入探讨Facebook Messenger如何实现即时…...
前端css实例
前端css实例 一、带条纹的表格 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>条纹样式的表格<…...
电阻改善信号完整性
1.为什么电路端接电阻能改善信号完整性 由于电信号在PCB上传输,因此在PCB设计中可以把PCB走线认为是信号的通道,当该通道的 物理结构(线宽,线到参考面的距离等)发生变化,特别是有一些突变时,都会…...
如何选择合适的主键id?
目录标题 MySQL主键一定是自增的吗?自增id、uuid、雪花算法 谁更合适?详细聊聊 UUID详细聊聊 雪花算法 在数据库设计中,选择合适的主键对于数据表的性能和数据完整性都非常重要。接下来,让我们探讨一下自增id、uuid和雪花算法&…...
OpenMP出现Stack Overflow及其疑问
今天对着《OpenMP核心技术指南》练习OpenMP,其中一个案例: #include <stdio.h> #include <math.h> #include <omp.h>#define ITER 100000000void main() {int i;double A[ITER];for (i 0; i < ITER; i)A[i] 2.0 * i;#pragma omp parallel{/…...
vscode查找函数调用
在 VS Code 中,要查找 C 语言函数的调用列表,有以下几种方法可以使用,具体取决于项目的规模和你的需求: 方法 1: 使用全局查找功能 步骤: 打开全局查找: 按 CtrlShiftF (Windows/Linux) 或 CmdShiftF (Ma…...
网络安全-网络安全审计
网络安全审计是为了确保网络系统的安全性和完整性,防范潜在的网络攻击和数据泄露风险。 审计步骤: 1.确定审计目标:明确审计的目的和范围,例如审计网络设备、服务器、应用程序或数据库等。 2.收集信息:收集审计范围…...
刷LeetCode hot100--1.哈希表
哈希表--查找一个元素在不在数组/map/set中 目前用到的数据结构: std::unordered_set哈希表无序否否O(1)O(1) std::unordered_map哈希表key无序key不可重复key不可修改O(1)O(1) 1. 两数之和 - 力扣(LeetCode) 30min 几个问题 1.原来想…...
鸿蒙生态崛起的机遇有什么
鸿蒙生态系统的崛起为各个领域带来了多个机遇,主要体现在以下几个方面: 智能设备的互联互通:鸿蒙系统旨在实现不同设备之间的无缝连接,为物联网(IoT)设备的发展提供了良好的基础。这将推动智能家居、智慧城…...
写入json和读取json文件
/// <summary> ///写入文件 /// </summary> /// <param name"Stns"></param> /// <returns></returns> public ActionResult WriteJsonFile(string Stns) { strin…...
【Java基础入门篇】前言
Java基础入门篇 本系列内容主要针对Java基础知识,总共包含四大部分内容: 变量、数据类型和运算符控制语句和递归算法面向对象和JVM底层分析数组和排序 学习需要具备: IDEA编译器 JDK1.8版本 写在前面 在Java入门的最开始,我们需…...