python--4函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、递归练习

news2024/12/24 3:34:20

学习目标:

  • 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、 递归练习

学习内容:

  1. 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、 递归练习

目录

学习目标:

学习内容:

函数定义方式:---复用def  函数名([形参,...,...])/([参数列表...]):

​    一行或者多行的函数体

​    [return 返回值]

调用函数函数名(形参,...,...)

return关键字 调用后需要接受返回值/print()

局部函数不能改全局变量---除global 变量,变量(放第一)

global 变量=全局变量

函数调用的本质:

值传递:变量之间,数值的传递,这种传递相当于变量赋值--变量--数值

引用传递:传递的地址(指针),对象,引用--对象

函数的参数def func_name([arge...])# (默认值、可变、关键字参数)    # 函数体    # [return 返回值]

默认值参数指向不可变数据---默认值可以user改

参数:--可以附加默认值

给了另一个值,用给定值,不用默认值

默认值参数一定要写在普通值参数之后,否则会报错。

可变参数: *参数名--存储额外的参数

多个输入,它只传前面两个值-计算;()/(4, 5, 6, 7,..)--元组--可变数量的参数

def ji (*num):

    ji=1

    for i in num:

        ji*=i

    return ji

print(ji(5,5,5))

list1=[5,5,5]

print(ji(*list1))

print(*args, sep=' ', end='\n', file=None, flush=False)

关键字参数:**变量--可变数量的键值对参数

def xingxi (name,age,**happy):

    print(f"name={name},age={age},happy={happy}")

dict1={'job':'xs','happy':'sport'}

xingxi('luan',13,**dict1)

匿名函数---lambda (参数:) 函数--不能直接调用,简化函数

lambda [参数]: 函数

不需要return

def test1(fn):

    print(fn(1,2))

    print('test1')

test1(lambda a,b:a+b)

#偏函数---为已有的函数重新固定下来某个默认参数的值-修改,返回一个新的函数

# import functools

from functools import partial

int2 = partial(int, base=2)

# print(a)

print(int2("10010"))

递归函数---函数内部调用自身,需要终止条件,return,出口不满足表达式,先写出口

def jiecheng(num):

    if num == 1:

        return 1

    else:

        return jiecheng(num-1)*num

print(jiecheng(3))

帮助文档:

print(函数名)---注释

help(print)

import functools>>> dir(functools)

 递归练习

学习时间:

学习产出:


函数定义方式:---复用
def  函数名([形参,...,...])/([参数列表...]):

​    一行或者多行的函数体

​    [return 返回值]

调用函数
函数名(形参,...,...)

这里其实已经是返回了一个结果,我们只是没有进行接收这个值,所以:

return关键字 调用后需要接受返回值/print()

局部函数不能改全局变量---除global 变量,变量(放第一)

global 变量=全局变量

函数调用的本质:

程序启动的瞬间,会生成至少一个执行栈,函数是在堆中存放的,每当函数被调用时,会进行压栈,调用结束之后,会立刻进行弹栈

下面我们接着分析;
在python中,函数本质也是一种对象!!!!!
对象则会存在堆里面,栈空间有限。
我们将函数的地址存在了栈中,和C中指针有点像。
程序调用的:本质就是将函数临时压入执行栈!!!
也就是我们将test函数压入栈中进行执行,当执行完最后一行代码就会立即进行弹栈操作,以避免长时间占用内存。

这里我们就可以理解为什么局部变量不能够被外面访问到,因为函数执行完毕立即弹栈,栈已经不存在局部变量的值了

值传递:变量之间,数值的传递,这种传递相当于变量赋值--变量--数值

引用传递:传递的地址(指针),对象,引用--对象

函数的参数
def func_name([arge...])# (默认值、可变、关键字参数)
    # 函数体
    # [return 返回值]

默认值参数指向不可变数据---默认值可以user改

参数:--可以附加默认值

给了另一个值,用给定值,不用默认值

默认值参数一定要写在普通值参数之后,否则会报错。

def get_circle_area(r,PI=3.14):print(get_circle_area(r1,3.1415926))

可变参数: *参数名--存储额外的参数

不是C语言中指针,它主要用来存储额外的参数!!!!,会将参数封装到元组

多个输入,它只传前面两个值-计算;()/(4, 5, 6, 7,..)--元组--可变数量的参数

def ji (*num):

    ji=1

    for i in num:

        ji*=i

    return ji

print(ji(5,5,5))

list1=[5,5,5]

print(ji(*list1))

print(*args, sep=' ', end='\n', file=None, flush=False)

关键字参数:**变量--可变数量的键值对参数

def xingxi (name,age,**happy):

    print(f"name={name},age={age},happy={happy}")

dict1={'job':'xs','happy':'sport'}

xingxi('luan',13,**dict1)

匿名函数---lambda (参数:) 函数--不能直接调用,简化函数

lambda [参数]: 函数

不需要return

def test1(fn):

    print(fn(1,2))

    print('test1')

test1(lambda a,b:a+b)

#偏函数---为已有的函数重新固定下来某个默认参数的值-修改,返回一个新的函数

# import functools

from functools import partial

int2 = partial(int, base=2)

# print(a)

print(int2("10010"))

递归函数---函数内部调用自身,需要终止条件,return,出口不满足表达式,先写出口

def jiecheng(num):

    if num == 1:

        return 1

    else:

        return jiecheng(num-1)*num

print(jiecheng(3))

帮助文档:

print(函数名)---注释

help(print)

import functools
>>> dir(functools)

......未完end


函数的分类

以函数是否存在返回值:
有返回值的函数 return关键字 调用后需要接受返回值
无返回值的函数 没有return关键字 返回值为None
以函数是否存在参数:
有参数函数
无参数函数
4、局部变量和全局变量:
1、局部变量(local variable):又叫做本地变量,定义在函数内部的变量
局部变量只能在当前定义的函数内部有效
2、全局变量(global variable):直接定义在模块中的变量,叫做全局变量
在python中,函数内部不允许修改全局变量!!!!

值传递和引用传递:
值传递:变量之间,数值的传递,这种传递相当于变量赋值
引用传递:传递的地址(指针),对象,引用

参数:--可以附加默认值

默认值参数:大多情况下,该参数值不需要改变,书写位置一般在正常参数的后面。方便用户调用函数

注意:默认值参数指向不可变数据---默认值可以user改


可变参数   *参数名

*args

如果说要传进去的参数是元组或者列表,只需要在元组或者列表前面添加*,就会吧元祖或列表作为可变参数穿进去

关键字参数(命名参数):

**kwargs

函数传递--demo(print_msg)
函数作为参数传递函数内部:
python中函数是对象,python中函数的参数只要是对象即可,所以pyhton中函数可以作为参数传递到函数内部。
注意如下两种情况的不同之处:
所以,python中函数是可以以参数的形式存入函数内部的。带了括号相当于传了函数的返回值。函数带括号表示函数调用,不带括号表示函数引用,代表函数本身。

def a()
    pass
def b()
    pass
b(a) # 函数作为参数传递到函数中
b(a())# 将a的返回值作为参数传递到函数中

def demo(fn):
    # 下面这行代码就是一个函数调用
    # fn是一个函数
    fn("hello,函数你好")

def print_msg(msg):
    print(msg)
demo(print_msg)

匿名函数以及lambda表达式---简化函数
匿名函数:没有名称的函数,不能直接调用
python在lambda引入之前是没有匿名函数的!
lambda表达式之后,才通过lambda实现了匿名函数
lambda(x,b,c):函数体
同样是以上案例:

def demo(fn):
    # 下面这行代码就是一个函数调用
    # fn是一个函数
    fn("hello,函数你好")
demo(lambda msg:print(msg))

>>>hello,函数你好

这里lambda使用后面加参数这里也就是函数名,冒号后面加返回值,这里则为函数内容。
使用lambda主要用于匿名场景中,进行简化。
lambda本质是简化编写程序的难度!!!!!

偏函数

#  int(x, base=10) -> integer    默认是按照十进制进行转换的

# functools

# 偏函数:

# 为已有的函数重新固定下来某个默认参数的值,并返回一个全新的函数,这个函数就是偏函数

# import functools

from functools import partial

int2 = partial(int, base=2)

# print(a)

print(int2("10010"))

可能存在某个函数,该函数中存在默认值
如果后面调用时,多次需要修改为一个相同的默认值【变成另外一个值】可以使用偏函数实现
我们可以看下int:

int(x, base=10)

我们可以看到base=10,这里int就是整型10进制不用改默认值。如果我们需要进行进制转换:

>>> int("123456")
123456
>>> int("123456",base = 10)
123456
>>> int("123456",base = 8)
42798
>>> int("11111",base = 2)
31
我们可以重新构建一个函数,只是这里不是10进制,而是二进制,引入functools模块。

1、import functools
    functools.partial()

2、from functools import partial
    # 返回一个新的函数 = partial(原函数, 默认值=新值)


 递归练习

......未完end

递归
递归(recursion):函数自身调用自身,需要设置递归的终止条件
一定要有终止条件,否则是个死循环。
案例:求 0-n的和
# 求0-n的和
def get_count(n:int):
	if n == 1:
		return 1
	return n + get_count(n - 1)
count = get_count(100)
print(f"0-100的和是{count}")
>>>
0-100的和是5050

递归的内存分析以及优缺点
这里也就牵扯了压栈,弹栈。
这就是栈内进行大量调用执行从而占用大量空间。
这里我们可以尝试着让其调用1000多次:

# 求0-n的和
def get_count(n:int):
	if n == 1:
		return 1

	return n + get_count(n - 1)
count = get_count(1000)
print(f"0-100的和是{count}")
>>>这里报错,递归错误,已经超过了递归最大数量。
同时,我们可以调用sys内置模块来看递归最大次数:
import sys
print(sys.getrecursionlimit())
# 求0-n的和
def get_count(n:int):
	if n == 1:
		return 1
	return n + get_count(n - 1)
count = get_count(1000)
print(f"0-100的和是{count}")
当然,我们如果真的要求1到1000以上的和或者其他,我们也可以进行自己设置递归的次数,这里设置2000次最大次数,从而输出1到1500的求和:
import sys
# print(sys.getrecursionlimit())
sys.setrecursionlimit(2000)
# 求0-n的和
def get_count(n:int):
	if n == 1:
		return 1
	return n + get_count(n - 1)
count = get_count(1500)
print(f"0-100的和是{count}")
>>>
0-100的和是1125750

递归
递归循环

>>> import functools
>>> dir(functools)
['GenericAlias', 'RLock', 'WRAPPER_ASSIGNMENTS', 'WRAPPER_UPDATES', '_CacheInfo', '_HashedSeq', '_NOT_FOUND', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_c3_merge', '_c3_mro', '_compose_mro', '_convert', '_find_impl', '_ge_from_gt', '_ge_from_le', '_ge_from_lt', '_gt_from_ge', '_gt_from_le', '_gt_from_lt', '_initial_missing', '_le_from_ge', '_le_from_gt', '_le_from_lt', '_lru_cache_wrapper', '_lt_from_ge', '_lt_from_gt', '_lt_from_le', '_make_key', '_unwrap_partial', 'cache', 'cached_property', 'cmp_to_key', 'get_cache_token', 'lru_cache', 'namedtuple', 'partial', 'partialmethod', 'recursive_repr', 'reduce', 'singledispatch', 'singledispatchmethod', 'total_ordering', 'update_wrapper', 'wraps']
>>> functools.partial
<class 'functools.partial'>
>>> from functools import partial
>>> partial(int,base=2)
functools.partial(<class 'int'>, base=2)
>>> a = partial(int,base=2)
>>> a
functools.partial(<class 'int'>, base=2)
>>> a("100")
4
>>> a("100",base=10)
100
>>> int("100")
100
>>>

帮助文档
def get_circle_area():
	"""
		求圆的面积
	"""
	pass


print(get_circle_area.__doc__)
>>>   
求圆的面积


*args
def test(x,y,*args):
	print(args)
	print(x + y)
test(2,5)
test(2,3,4,5,6,7)
>>>
()
7

(4, 5, 6, 7)
5

**变量
def test(x,y,*args,**kwargs):
	if len(args) > 0:
		print(args[0])
	if len(kwargs) > 0:
		print(kwargs["name"])
	print(x + y)
test(2,5)
test(2,3,4,5,6,7,a = 123,b = 456,name = "xxx",age = 16)

>>>
7
4
xxx
5


默认值参数:
如果函数中的某个或者某些参数,在调用时大多数情况下,是一个固定值。
为了调用方便,可以设定默认值。
默认值参数一定要写在普通值参数之后,否则会报错。
如果一个值在大多数情况下取一个值,我们可以默认给他一个值,比如这里PI大多数情况下使用3.14,则:
def get_circle_area(r,PI=3.14):
	"""
		求圆的面积
	"""
	return r * r * PI
r1 = float(input("请输入圆的半径:"))
print(get_circle_area(r1))
》》》
请输入圆的半径:4
50.24

当然,如果我给了PI另一个值,那么他肯定是使用给定值,如果没有才采用默认值:
def get_circle_area(r,PI=3.14):
	"""
		求圆的面积
	"""
	return r * r * PI
r1 = float(input("请输入圆的半径:"))
print(get_circle_area(r1))
print(get_circle_area(r1,3.1415926))
输出结果:
》》》
请输入圆的半径:3
28.26
28.2743334

可变参数:
*变量 这种形式定义的,注意:不是C语言中指针
它主要用来存储额外的参数!!!!,会将参数封装到元组中

依然是上一个案例,我们如果说想要进行加入别的功能,我们可以进行加入函数,当然,python中也可以加入可变参数。加上*arges不影响原来的代码,可以给他不进行传值。

def test(x,y,*args):
	print(x + y)
test(2,5)
test(2,3,4,5,6,7)
》》》
7
5
这里我们可以看到,我们给它进行多传几个值依然不会影响原来的代码,但是,最终执行的功能我们可以看到进行多个输入,它只传前面两个值,从而输出了5

而这里我们加入arges又有什么用呢?

def test(x,y,*args):
	print(args)
	print(x + y)
test(2,5)
test(2,3,4,5,6,7)
>>>
()
7

(4, 5, 6, 7)
5

这里我们可以看到里面存进了4567,也就是你传了多余的参数他会把这些存进去。扩展了程序的功能也不影响原有的代码。
def test(x,y,*args):
	if len(args) > 0:
		print(args[0])
	print(x + y)
test(2,5)
test(2,3,4,5,6,7)
>>>
7

4
5
print函数:
print(*args, sep=' ', end='\n', file=None, flush=False)
可变参数,因此它可以直接传入多个值

命名参数:
又叫做关键字参数
**变量
可变参数和关键字参数,主要的功能就是配合装饰器进行功能扩展的!!!
print函数:
print(*args, sep=' ', end='\n', file=None, flush=False)
def test(x,y,*args,**kwargs):
	if len(args) > 0:
		print(args[0])
	print(kwargs)
	print(x + y)
test(2,5)
test(2,3,4,5,6,7,a = 123,b = 456,name = "xxx",age = 16)
>>>{}
7

4
{'a': 123, 'b': 456, 'name': 'xxx', 'age': 16}
5

{'a': 123, 'b': 456, 'name': 'xxx', 'age': 16}这个我们叫做字典。
我们也试着去拿值:
def test(x,y,*args,**kwargs):
	if len(args) > 0:
		print(args[0])
	if len(kwargs) > 0:
		print(kwargs["name"])
	print(x + y)
test(2,5)
test(2,3,4,5,6,7,a = 123,b = 456,name = "xxx",age = 16)

>>>
7
4
xxx
5

引用传递:传递的地址(指针),对象,引用--对象
def add(nums):
	nums.append(100)
	nums.append(200)
	print(nums)
ages = [10,20,30]
print(ages)
add(ages)
print(ages)
>>>
[10, 20, 30]
[10, 20, 30, 100, 200]
[10, 20, 30, 100, 200]

这里我们可以看到,我们最终将100以及200存了进去。
这又是什么原因呢?
ages在这里也就是对象,对象我们都是存放在堆中的,堆中地址则存在了栈中,而这里add则传递的是地址,也就相当于nums变量拿到的是ages的存放堆中的地址,也就相当于指向了这一变量,而这里ages则将值存了进去,那么nums也会将100以及200存到这个地址中去。

值传递:变量之间,数值的传递,这种传递相当于变量赋值--变量--数值
def change(a,b):
	a += 10
	b += 30
	print(a,b)
x = 100
y = 200
print(x,y)
change(x,y)
print(x,y)
>>>
100 200
110 230
100 200


global 

name = "张三"
age = 16
def work_1(msg,show):
	global age
	a = 20
	print(name)
	print(age)
	print(a)

	a += 10
	print(a)

	age += 1
	print(age)

work_1("哦","聊天止于哦哦")

print(name)
print(age)
# print(a)
>>>>>
张三
16
20
30
17
张三
17




name = "张三"
age = 16

def work_1(msg,show):
	a = 20
	print(name)
	print(age)
	print(a)

	a += 10
	print(a)

	age += 1
	print(age)

work_1("哦","聊天止于哦哦")

print(name)
print(age)
# print(a)

D:\soft\pythonworkplace>test.py
张三
Traceback (most recent call last):
  File "D:\soft\pythonworkplace\test.py", line 599, in <module>
    work_1("哦","聊天止于哦哦")
  File "D:\soft\pythonworkplace\test.py", line 590, in work_1
    print(age)
          ^^^
UnboundLocalError: cannot access local variable 'age' where it is not associated with a value

D:\soft\pythonworkplace>


我们可以看到这里报错了,又是什么原因呢?
这里它的意思是找不到局部变量age。
这又是什么原因呢?
正常情况,python拒绝在函数中修改全局变量,但是考虑到特殊情况下的需求,python中如果要修改全局变量,需要提前声明!!!!
如果说我们此时加上一个局部变量age:

name = "张三"
age = 16

def work_1(msg,show):
	age = 1
	a = 20
	print(name)
	print(age)
	print(a)

	a += 10
	print(a)

	age += 1
	print(age)

work_1("哦","聊天止于哦哦")

print(name)
print(age)
# print(a)

D:\soft\pythonworkplace>test.py
张三
1
20
30
2
张三
16

我们可以看到内部输出的age最后加了1,而最终输出的age值依然为我们定义的值16。
下面这个便是全局变量确实需要修改的时候,我们则需要在其使用内部加上声明global:
关键字 global 来声明

name = "张三"
age = 16

def work_1(msg,show):
	global age
	a = 20
	print(name)
	print(age)
	print(a)

	a += 10
	print(a)

	age += 1
	print(age)

work_1("哦","聊天止于哦哦")

print(name)
print(age)
# print(a)

张三
16
20
30
17
张三
17


函数是什么??一段实现某一特定功能的代码的集合
本质上实现了代码的高度复用

函数定义方式:
def  函数名([形参]):

​	一行或者多行的函数体

​	[return 返回值]

回顾:
函数:实现某一特定功能的代码的集合

函数碰见return会立刻进行返回,不会在执行函数内return下边的代码


本地变量(局部变量)和全局变量

本地变量(局部变量):声明在函数内部的变量

全局变量:

全局变量在任何位置都能够被读取,

默认情况下,全局变量不允许被函数内部进行更改

局部变量只能在函数内部进行访问。外部要进行访问,通过return返回出去

‘’‘
局部函数不能改全局变量---除global 变量,变量(放第一)
’‘’

函数调用的本质:

程序启动的瞬间,会生成至少一个执行栈,函数是在堆中存放的,每当函数被调用时,会进行压栈,调用结束之后,会立刻进行弹栈


值传递和引用传递

值传递传递的是值,引用传递传递的是内存地址


参数:

默认值参数:大多情况下,该参数值不需要改变,书写位置一般在正常参数的后面。方便用户调用函数

注意:默认值参数指向不可变数据


可变参数   *参数名

*args

如果说要传进去的参数是元组或者列表,只需要在元组或者列表前面添加*,就会吧元祖或列表作为可变参数穿进去

关键字参数(命名参数):

**kwargs


匿名函数  lambda表达式

lambda [参数]: 函数

不需要return

学习时间:

学习时间为不运动的时候,作者咕咕了是去运动(无氧运动和有氧运动都做最好)了,请饶恕。


学习产出:

画工

python---3--sort、lambdalen(list1)、sorted_numbers = sorted(numbers)、list.sort()

                                                                                              http://t.csdnimg.cn/WpVQK

python--2作业66,69,71,84;85;数据类型:int()float()TrueFalsestr()list()set()dict()tuple()class 

                                                                                            http://t.csdnimg.cn/R005I

python--1作业,注释、输入输出、运算符、运算结果、三目运算符、关系表达、多值交换、偶数、随机数、三目运算、if、elif、else、while、for、break、contince、pass                                                                                                   http://t.csdnimg.cn/0KDeU


  计算机网络第1章:计算机网络的概念、组成与功能;计算机网络的分类、标准化工作及相关组织

                                                                                                       http://t.csdnimg.cn/uZOAM

计算机网络第一章:性能指标:带宽、时延、时延带宽积、RTT、吞吐量、速率、信道利用率

                                                                                                                                                                                                                           http://t.csdnimg.cn/avNeb

计算机网络体系结构——PDU、SDU、PCI、协议、访问、接口、SAP

                                                                                                          http://t.csdnimg.cn/x3Uar

 计算机网络分层结构——OSI/ISO、TCP/IP                                                                                                                                                   http://t.csdnimg.cn/hLrqY

 1章选择                                                                                          http://t.csdnimg.cn/cnmdJ

2章选择、解答                                                                                http://t.csdnimg.cn/ONrER

   通信基本概念:数据、信号、码元、信源、信道、信宿、速率、波特、带宽                                                                                                        http://t.csdnimg.cn/TKnyM

 数据、信号、码元、信源、信道、信宿、速率、波特、带宽-通信基本概念

                                                                                                         http://t.csdnimg.cn/Kc2e3

HCIA——30奈奎斯特定理、香农定理                                              http://t.csdnimg.cn/Yqtch

HCIA——20应用层:C/S、P2P、peer                                                                                                                                                                                       http://t.csdnimg.cn/4i4Og

HCIA——21C/S、P2P、peer的选择     

                                                                                                                                                                                                                          http://t.csdnimg.cn/4a11f                                                                

 DNS层次域名空间、域名服务器、域名解析的原理                        http://t.csdnimg.cn/yeWd6

 HCIA——23DNS层次域名空间、域名服务器、域名解析的原理的选择、解答                                                                                                                              http://t.csdnimg.cn/RXPNV 

 HCIA——24FTP 的工作原理、功能、TFTP、控制连接、数据连接

                                                                                                                                                                                                                    http://t.csdnimg.cn/9TPlw

HCIA——25FTP 的工作原理、功能、TFTP、控制连接、数据连接的选择、解答 

                                                                                                    http://t.csdnimg.cn/8GkAU

HCIA——26E-mall、MIME、POP3、IMAP、电子邮件系统的组成结构、电子邮件的发送,接收过程、MIME 与SMTP 的关系                                                  http://t.csdnimg.cn/smTaR

HCIA——27E-mall、MIME;POP3、IMAP的选择,解答 http://t.csdnimg.cn/xnsXP

 HCIIA——28HTTP、万维网、HTML;万维网的工作过程;HTTP 的特点——无连接-TCP、无状态-Cookie、非持久连接-非流水线和流水线;HTTP 的报文结构                                                                                                      http://t.csdnimg.cn/cRcxY

  • 技术笔记 1遍
  • 有错误请指出,作者会及时改正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1607862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS中position属性总结

CSS中position属性的总结 如果我的文章看不懂&#xff0c;不要犹豫&#xff0c;请直接看阮一峰大佬写的文章 https://www.ruanyifeng.com/blog/2019/11/css-position.html 1 干嘛用的 用来定位HTML元素位置的&#xff0c;通过top、bottom、right、left定位元素 分别有这些值&a…

3D模型格式转换工具HOOPS Exchange:3D CAD数据的快速导入与导出

在当今的工程设计领域中&#xff0c;快速且可靠地处理3D CAD数据是至关重要的。HOOPS Exchange SDK通过提供一组C软件库&#xff0c;为开发团队提供了实现这一目标的有效工具。 什么是HOOPS Exchange&#xff1f; HOOPS Exchange是一组C软件库&#xff0c;旨在为开发团队提供…

DNS服务器的管理与配置

目录 一、相关知识 域名空间 DNS服务器分类 域名解析过程 资源记录 二、安装DNS服务 安装bind软件包 DNS服务的启动与停止 配置主要名称服务器 主配置文件 从例子学起&#xff1a; &#xff08;1&#xff09;建立主配置文件named.conf &#xff08;2&#xff09;…

OpenHarmony网络协议通信c-ares [交叉编译]异步解析器库

简介 c-ares是异步解析器库&#xff0c;适用于需要无阻塞地执行 DNS 查询或需要并行执行多个 DNS 查询的应用程序。 下载安装 直接在OpenHarmony-SIG仓中搜索c-ares并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的c-ares库代码存在以下路径&#xff1a;…

上位机图像处理和嵌入式模块部署(树莓派4b实现固件主流程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 软件开发一般有软件需求、架构设计和详细设计、软件测试这四个部分。软件需求和软件测试都比较好理解&#xff0c;前者是说要实现哪些功能&#xf…

【SpringBoot+VUE+ELEMENT 】前后端分离的管理系统的实现——基础功能(记录向)

一个前后端分离的实现。后端使用SpringBoot&#xff0c;前端使用Vue&#xff0c;后端标准的四层结构&#xff0c;前端是用的Element。 一、环境准备 1.安装node.js Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 成功后cmd中运行 node -v npm -v 出现 对应的版本…

活动 | 华院计算与数学家一起走进世界轨道交通之都-中国株洲

4月17日&#xff0c;由株洲市人民政府主办、株洲高新区管委会承办&#xff0c;华院计算技术&#xff08;上海&#xff09;股份有限公司&#xff08;以下简称“华院计算”&#xff09;协办的“制造名城、院士同行&#xff0c;数学家走进株洲”活动在湖南株洲举行。 来自中国数学…

匿名函数与gorm中的Transaction事务方法

整理下go中的匿名函数&#xff0c;项目中很多地方都在用。 1、函数类型的变量 Go中&#xff0c;函数也是一种数据类型。定义一个函数&#xff0c;把这个函数赋值给一个变量&#xff0c;这个变量就是函数类型的变量&#xff0c;用这个变量等价于直接调函数&#xff1a; packa…

算法刷题记录2

4.图 4.1.被围绕的区域 思路&#xff1a;图中只有与边界上联通的O才不算是被X包围。因此本题就是从边界上的O开始递归&#xff0c;找与边界O联通的O&#xff0c;并标记为#&#xff08;代表已遍历&#xff09;&#xff0c;最后图中剩下的O就是&#xff1a;被X包围的O。图中所有…

使用LVGL提升交互效率:基于启明智显Model3A方案的7寸智能屏用户界面(UI)设计介绍

项目概述&#xff1a; 【启明智显】&#xff0c;作为一家专注于HMI和AIoT解决方案的公司&#xff0c;我们致力于为用户提供创新、可靠且高效的产品和解决方案。近日我们推出了高性能及高性价比的HMI芯片——Model3A。芯片搭载了强大的2D图形加速引擎&#xff0c;能够提供高达7…

RNN知识体系构筑:详尽阐述其理论基础、技术架构及其在处理序列数据挑战中的创新应用

一、为什么需要RNN 尽管神经网络被视为一种强大且理论上能够近似任何连续函数的模型&#xff0c;尤其当训练数据充足时&#xff0c;它们能够在输入空间中的某个点( x )映射到输出空间的特定值( y )&#xff0c;然而&#xff0c;这并不能完全解释为何在众多应用场景中&#xff…

基于Spring Boot的新生宿舍管理系统设计与开发

基于Spring Boot的新生宿舍管理系统设计与开发 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 报修处理管理界面图&#xff0c;在报修处理管理页面…

QA测试开发工程师面试题满分问答16: 微信输入框如何设计测试用例?

可以涵盖基础功能、用户交互、编辑撤回、权限相关、网络信号、异常、并发性能和安全性等方面的测试用例&#xff1a; 基础功能&#xff1a; 验证输入框是否能够接收用户输入&#xff0c;并显示输入的文字。检查输入框是否支持常见的字符输入&#xff0c;如字母、数字、标点符号…

Unity Shader 流光 边缘光

前言 Unity2021.3.23 一、实现原理 Time控制UV的变化,再采样一张流光贴图.即可实现流光效果。 二、效果及源码展示 1.流光效果 效果描述: 1.边缘光(菲尼尔), 2.从上到下扫描光. 效果图如下: 代码如下&#xff1a; Shader "Unlit/ScanCode" {Properties{_MainTe…

【数据结构】树与二叉树、树与森林部分习题与算法设计例题

目录 【数据结构】树与二叉树部分习题与算法设计例题一、单选题二、算法设计题判断二叉树是否为完全二叉树求二叉树的最小深度 以及 二叉树树高 树与二叉树知识点文章: 【数据结构】树与二叉树&#xff08;递归法先序、中序、后序、层次遍历二叉树、二叉树的建立以及求树高的方…

必看——通配符SSL证书在线免费申请方法!

申请通配符SSL证书&#xff0c;就相当于给你的网站及所有子域名都戴上同一顶加密“帽子”&#xff0c;保护它们的安全通信。以下是三步搞定的方法&#xff1a; 第一步&#xff1a;找权威机构 就像你要找个官方认证的地方办证明一样&#xff0c;先选一家靠谱的证书颁发机构&…

软考中级网络工程师-2024上岸宝典

1.软考是什么 简单说就是计算机技术 相关的国家级证书考试&#xff0c;想听专业点给大家截一张官网的图&#xff0c;不想听废话直接往下。 同为国家级证书的&#xff1a;注册会计师、法律职业资格证、一级建筑师&#xff0c;证书的价值是比较高的。 很多人都是在求职前或者大…

产废端实时音视频监控系统在运输车辆驾驶室中的应用

实时音视频监控系统可通过在运输车辆驾驶室安装音视频摄录设备&#xff0c;实现将运输车辆内部及周围环境音视频数据通过移动网络实时回传指挥中心的功能。 前端摄录设备主要负责采集车内外的视音频信息&#xff0c;为了保障车辆及运输人员 的安全&#xff0c;应合理选择摄录设…

探索半导体测试领域:哲讯TCC智能化管理系统的应用与优势

在半导体行业中&#xff0c;封装和测试环节是至关重要的一环。半导体封装测试是指将通过测试的晶圆按照产品型号及功能需求加工得到独立芯片的过程。半导体封测包括封装和测试两个环节&#xff0c;封装是保护芯片免受物理、化学等环境因素造成的损伤&#xff0c;增强芯片的散热…

node.js-模块化

定义&#xff1a;CommonJS模块是为Node.js打包Javascript代码的原始方式。Node.js还支持浏览器和其他Javascript运行时使用的ECMAScript模块标准。 在Node.js中&#xff0c;每个文件都被视为一个单独的模块。 概念&#xff1a;项目是由很多个模块文件组成的 好处&#xff1a…