Python - 函数(四)

函数:在编写程序的过程中,有某一功能代码块出现多次, 但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数

Python中的函数‌是一组被命名的可执行代码,用于完成特定的任务。函数可以接收输入参数,执行相应的处理,然后返回结果。在编程中,函数的概念源自于数学的函数,但编程中的函数更加广泛,主要用于提高代码的复用性和可维护性‌。

一、函数

(一)函数的用途和好处

  • 提高代码复用性‌:通过定义函数,可以将重复的代码块封装起来,避免重复编写相同的代码。
  • 提高代码可读性‌:通过函数命名和参数,使得代码更加清晰易懂。
  • 便于维护‌:当需要修改功能时,只需修改函数内部的代码,而不需要修改调用该函数的每一处代码‌

(二)函数定义

在Python中,使用关键字def来定义一个函数。函数的定义包括函数名称、参数列表和函数体

def + 关键字 + 小括号 + 冒号+ 换行缩进 + 代码块 定义一个函数

def 函数名(): 代码块

def my_function(param1, param2):
    # 函数体
    return result

(三)函数调用

函数名加()即可调用该函数

result = my_function(value1, value2)

# 函数的定义
# def 函数名(参数列表):0-n 个
#     代码块
def say_hello():print("Hello,Python!")#函数的调用
say_hello()
say_hello()
say_hello() # 多次调用

(四)函数的参数类型

Python中的函数参数类型包括:

  • 位置参数(Positional Argument)‌:这是最常见的参数类型,调用函数时,实参变量的顺序必须与形参变量的顺序一致。例如,定义一个函数user_info(name, age, gender),调用时必须按照user_info('Tom', 20, 'male')的顺序传递参数‌

  • 关键字参数(Keyword Argument)‌:关键字参数允许在函数调用时使用参数名来指定参数的值,不需要按照参数的顺序。例如,user_info(name='Tom', age=20, gender='male')

  • 缺省参数(Default Argument)‌:缺省参数在函数定义时提供一个默认值,调用函数时如果不提供该参数的值,则使用默认值。例如,def add(a, b=5, c=10): return a + b + c,调用时可以省略bc‌3。

  • 不定长参数(Variable-length Parameters)‌:用于不确定调用时会传递多少个参数的场景。分为包裹位置参数(*args)包裹关键字参数(‌**kwargs)。例如,def f1(*args, **‌kwargs): print(args, kwargs),可以接收任意数量的位置和关键字参数‌

'''
函数的定义
def 函数名(参数列表):0-n 个代码块
'''
def say_hello():print("Hello,Python!")#函数的调用
say_hello()
say_hello()
say_hello() # 多次调用print('--------函数参数--------')
'''
参数的分类:
位置参数(必选参数)、缺省参数[默认参数]、可选参数、关键字参数
参数:其实就是函数为了实现某项特定的功能,进而为了得到实现功能所需要的数据
'''
# 1、位置参数(必选参数)
# 形式参数:只是意义上的一种参数,在定义的时候是不占内存地址的
def sum(a,b):sum=a+bprint(sum)pass
# 函数调用  在调用的时候必选参数 是必须要赋值的
#10,5是实际参数;实际参数:实参,实实在在的参数,是实际占用内存地址的
print('位置必选参数:%d',sum(10,5))
# 如下写法报错:TypeError: sum() missing 1 required positional argument: 'b'
# sum(5)# 2、默认参数【缺省参数】 始终存在于参数列表中的尾部
def sum1(a,b=20):print('缺省参数使用=%d'%(a+b))pass#在调用的时候如果未赋值,就会用定义函数时给定的默认值;如果赋值了则使用实参值替代
sum1(10)def sum2(a,b=20,c=30):print('缺省参数使用=%d'%(a+b+c))pass
sum2(10,5)'''
3、可变参数(当参数的个数不确定时使用,比较灵活)
可变参数(args): 使用一个星号()前缀 (*args)
可变参数允许函数接收任意数量的位置参数,这些参数在函数内部自动组装成一个元组(tuple)
'''
def getComputer(*args):'''
#     计算累加和
#     :param args: 可变长的参数类型
#     :return:
#     '''# print(args)result=0for item in args:result+=itempassprint('可变参数result=%d'%result)passgetComputer(1)
getComputer(1,2)
getComputer(1,2,3)
getComputer(1,2,3,4,5,6,7,8)'''
关键字可变参数:0-n
使用 ** 来定义
关键字可变参数(*kwargs): 使用两个星号()前缀 (**kwargs),
关键字可变参数允许函数接收任意数量的关键字参数,这些参数在函数内部自动组装成一个字典(dict)
在函数体内,参数关键字是一个字典类型,key是一个字符串
'''
def keyFunc(**kwargs):print('关键字可变参数:',kwargs)pass# 不可以传递的,报错:TypeError: keyFunc() takes 0 positional arguments but 3 were given
# keyFunc(1,2,3)
dictA={"name":'小明',"age":18}
keyFunc(**dictA)
keyFunc(name='小黑',age=20,)
keyFunc()'''
可变参数和关键字可变参数组合使用
可变参数和关键字可变参数可以同时使用,但是它们的顺序必须是:先定义位置参数和关键字参数,然后是一个星号后跟一个双星号
def my_function(pos_arg, *args, **kwargs):
'''
def complexFunc(*args,**kwargs):print('组合可变参数,关键字可变参数:',args)print('组合可变参数,关键字可变参数:',kwargs)pass
complexFunc(1,2,name='张晓明')
complexFunc(age=36)# 报错:SyntaxError: arguments cannot follow var-keyword argument
# def testMap(**kwargs,*args):
#     '''
#     可选参数必须放到关键字可选参数之前
#     可选参数:接受的数据是一个元组类型
#     关键字可选参数:接受的数据是一个字段类型
#     :param kwargs:
#     :param args:
#     :return:
#     '''
#     pass'''
函数返回值
概念:函数执行完以后会返回一个对象,如果在函数的内部有return 就可以返回实际的值,否则返回None
类型:可以返回任意类型,返回值类型应该取决于return后面的类型
用途:给调用方返回数据
在一个函数体内可以出现多个return值:但是肯定只能返回一个return
如果在一个函数体内 执行了return,意味着函数就执行完成退出了,return后面的代码语句将不会执行
'''
def Sum(a,b):sum=a+breturn sum#将计算的结果返回passresult=Sum(10,5) #将返回值赋给其他的变量
print('函数返回值%d'%result) #函数的返回值返回到调用的地方def calComputer(num):li=[]result=0i=1while i<=num:result+=ii+=1passli.append(result)return lipassvalue=calComputer(10)
print(type(value)) #value 类型
print('函数返回值',value)
def returnTuple():'''返回元组类型的数据:return:'''# return 1,2,3return {"name":"张晓明"}passA=returnTuple()
print(type(A))'''
函数嵌套
函数可以嵌套调用,即在一个函数内部调用另外一个函数。 内层函数可以访问外层函数中定义的变量,但不能重新赋值(rebind)
'''
def fun1():print("--------------fun1 start-------------------")print("--------------执行fun1代码省略-------------------")print("--------------fun1 end-------------------")passdef fun2():print("--------------fun2 start-------------------")# 调用第一个函数fun1()print("--------------fun2 end-------------------")passfun2()

输出:

Hello,Python!
Hello,Python!
Hello,Python!
--------函数参数--------
15
位置必选参数:%d None
缺省参数使用=30
缺省参数使用=45
可变参数result=1
可变参数result=3
可变参数result=6
可变参数result=36
关键字可变参数: {'name': '小明', 'age': 18}
关键字可变参数: {'name': '小黑', 'age': 20}
关键字可变参数: {}
组合可变参数,关键字可变参数: (1, 2)
组合可变参数,关键字可变参数: {'name': '张晓明'}
组合可变参数,关键字可变参数: ()
组合可变参数,关键字可变参数: {'age': 36}
函数返回值15
<class 'list'>
函数返回值 [55]
<class 'dict'>
--------------fun2 start-------------------
--------------fun1 start-------------------
--------------执行fun1代码省略-------------------
--------------fun1 end-------------------
--------------fun2 end-------------------

 1、可变参数(args): 使用一个星号()前缀 (*args) 可变参数允许函数接收任意数量的位置参数,这些参数在函数内部自动组装成一个元组(tuple)

2、关键字可变参数(*kwargs): 使用两个星号()前缀 (**kwargs), 关键字可变参数允许函数接收任意数量的关键字参数,这些参数在函数内部自动组装成一个字典(dict)

3、可变参数和关键字可变参数可以同时使用,但是它们的顺序必须是:先定义位置参数和关键字参数,然后是一个星号后跟一个双星号

def my_function(pos_arg, *args, **kwargs):

(五)函数的返回值

在Python中,函数可以返回一个值。使用return语句可以从函数中返回值。函数执行到return语句时将停止执行,并将return后面的值作为函数的结果返回。如果函数没有return语句,或者return语句不跟任何值,那么函数将返回None

'''
函数返回值
概念:函数执行完以后会返回一个对象,如果在函数的内部有return 就可以返回实际的值,否则返回None
类型:可以返回任意类型,返回值类型应该取决于return后面的类型
用途:给调用方返回数据
在一个函数体内可以出现多个return值:但是肯定只能返回一个return
如果在一个函数体内 执行了return,意味着函数就执行完成退出了,return后面的代码语句将不会执行
'''
def Sum(a,b):sum=a+breturn sum#将计算的结果返回passresult=Sum(10,5) #将返回值赋给其他的变量
print('函数返回值%d'%result) #函数的返回值返回到调用的地方def calComputer(num):li=[]result=0i=1while i<=num:result+=ii+=1passli.append(result)return lipassvalue=calComputer(10)
print(type(value)) #value 类型
print('函数返回值',value)
def returnTuple():'''返回元组类型的数据:return:'''# return 1,2,3return {"name":"张晓明"}passA=returnTuple()
print(type(A))

(六)嵌套函数 

函数可以嵌套调用,即在一个函数内部调用另外一个函数。 内层函数可以访问外层函数中定义的变量,但不能重新赋值(rebind)

'''
函数嵌套
函数可以嵌套调用,即在一个函数内部调用另外一个函数。 内层函数可以访问外层函数中定义的变量,但不能重新赋值(rebind)
'''
def fun1():print("--------------fun1 start-------------------")print("--------------执行fun1代码省略-------------------")print("--------------fun1 end-------------------")passdef fun2():print("--------------fun2 start-------------------")# 调用第一个函数fun1()print("--------------fun2 end-------------------")passfun2()

(七)函数4种基本类型

1、无参数,无返回值,一般用于提示信息打印

2、无参数,有返回值,多用在数据采集中,比如获取系统信息

3、有参数,无返回值,多用在设置某些不需要返回值的参数设置

4、有参数,有返回值,一般是计算型的,需要参数,最终也要返回结果

# 无参数,无返回值
def myprint():    print("-" * 20)# 无参数,有返回值
def mycpu():# 获取cpu信息return info# 有参数,无返回值
def set(a):pass# 有参数,有返回值
def cal(a, b):c = a + b

(八)pass语句

在Python中,pass语句是一个空操作语句,主要用于保持程序结构的完整性,并不执行任何操作。‌ 它常用于以下几种情况:

  1. 占位符‌:当你在代码中预留一个位置,计划将来添加功能时,可以使用pass作为占位符。例如,在定义一个类的方法时,如果暂时不想实现具体功能,可以使用pass

    class Student: def __init__(self, name, age): self.name = name self.age = age def display_info(self): pass # 将来添加显示信息的功能 def update_info(self, new_name, new_age): pass # 将来添加更新信息的功能
  2. 强制缩进‌:在某些情况下,为了保持代码块的正确缩进,可能需要一个空语句。此时,可以使用pass

  3. 避免语法错误‌:如果你需要一个语句块但不想执行任何操作,可以使用pass来避免语法错误。这在编写框架或测试代码时尤为有用。

    def my_empty_function(): pass # 此函数暂时没有实现内容

需要注意的是,虽然pass语句在开发过程中可以作为临时占位符,但在最终代码中应尽量避免使用,以免影响代码的可读性和执行效率‌。此外,pass语句不能替代continuebreak语句,后者用于控制循环的执行流程

二、局部变量和全局变量

(一)局部变量和全局变量

在Python中,全局变量和局部变量的主要区别在于它们的作用域、生命周期和访问方式‌

  1. 作用域‌:

    • 全局变量‌:在程序的全局范围内可见,可以在任何函数中访问和修改。
    • 局部变量‌:仅在定义它的函数内部可见,外部函数无法访问。
  2. 生命周期‌:

    • 全局变量‌:从定义开始到程序结束始终存在于内存中。
    • 局部变量‌:仅在函数执行期间存在,函数执行结束后,局部变量被销毁。
  3. 访问方式‌:

    • 全局变量‌:可以在任何函数内部直接访问和修改,但如果在函数内部修改全局变量的值,需要使用global关键字进行声明。
    • 局部变量‌:只能在定义它的函数内部访问和修改。
  4. 冲突风险‌:

    • 全局变量‌:由于多个函数可以同时访问和修改,存在冲突风险,可能导致命名冲突或不可预测的行为。
    • 局部变量‌:由于其作用域限制,不会与其他函数的局部变量发生冲突
'''
局部变量:在函数内部定义的变量【作用域仅仅局限在函数的内部】
不同的函数,可以定义相同的局部变量,但是各自用各自的 不会产生影响
局部变量的作用:为了临时的保存数据 需要在函数中定义来进行存储全局变量:
当全局变量和局部变量出现重复定义的时候,程序会优先执行使用函数内部定义的变量
如果在函数的内部要想对全局变量进行修改的话,对于不可变类型【str 元组 number】必须使用global 关键字进行声明对于可变类型【dict、list】,全局变量要想在函数中修改的话,不需要用global关键字去声明
因为对象的内存地址不会改变
'''# 以下两个是全部变量
profession='计算机信息'
name='张晓明'
def printInfo():name='张二明' #局部变量print('姓名:{},专业:{}'.format(name,profession))pass
def printInfo2():name='张三明'print(name,profession)pass
def changeGlobal():'''要修改全局变量:return:'''global profession #声明全局变量 后才可以修改profession='金融' #局部变量passchangeGlobal()
print(profession)
printInfo2()
printInfo()print('--------可变类型')
# 针对数据类型来讲 可变类型和不可变类型
# 可变类型 dict list;引用地址未变
li=[1,2]
print(id(li))
li.append('Python语言')
print(li)
print(id(li))print('--------不可变类型')
# 不可变类型  str tuple number【int、float、complex】
age=18
print(id(age))
age=20
print(id(age))
age1=age
print('直接赋值',id(age))
age1=15
print(id(age1))
name='张晓明'
print(id(name))
name='张二明'
print(id(name))print('--------可变类型修改全局变量--------')
listObj=[] #全局变量
def demoList():listObj.append('你好')passprint(id(listObj))
demoList()
print(listObj)
print(id(listObj))

输出:

金融
张三明 金融
姓名:张二明,专业:金融
--------可变类型
2114739546944
[1, 2, 'Python语言']
2114739546944
--------不可变类型
140719003919816
140719003919880
直接赋值 140719003919880
140719003919720
2114739573568
2114739572768
--------可变类型修改全局变量--------
2114739543744
['你好']
2114739543744

(二)引用

在Python中,引用是指向内存空间中的对象的指针。当创建一个变量时,Python会分配一段内存空间来存储这个变量所代表的值,然后将这个变量名与该内存空间中的地址关联起来,这样就建立了一个引用。当你使用该变量时,实际上是通过该引用来访问这个内存空间中的对象,从而对其进行操作。

通俗来说,引用是指一个变量或者对象对于另一个对象的指向关系,类似于指针,变量指向的是内存地址

在python中,值是靠引用来传递来的,可以用id()函数查看一个对象的引用是否相同,id是值保存在内存中那块内存地址的标识。

在Python中,变量实际上是一个对象的名称,它指向存储在内存中的对象。例如,在下面这个例子中,变量a指向了一个整数对象2

a = 2

在这个例子中,等号=符号实际上是赋值操作符,它将整数对象2赋值给了变量a。因此,变量a实际上是一个指向整数对象2的引用

#不可变类型
a=1
def func(x):print('x的地址:{}'.format(id(x)))x=2print('x的值修改之后地址:{}'.format(id(x)))print(x)passprint('a的地址:{}'.format(id(a)))
func(a)
print(a)print('---------可变类型--------')
# 可变类型
li=[]
def testRenc(parms):li.append([1,2,3,6,8])print('调用前地址:',id(parms))print('内部的{}'.format(parms))passprint('调用前地址:',id(li))
testRenc(li)
print('外部的变量对象{}'.format(li))
print('调用后地址:',id(li))# 注:在python当中  万物皆对象,在函数调用的时候,实参传递的就是对象的引用

输出:

a的地址:140718885233576
x的地址:140718885233576
x的值修改之后地址:140718885233608
2
1
---------可变类型--------
调用前地址: 2503471655936
调用前地址: 2503471655936
内部的[[1, 2, 3, 6, 8]]
外部的变量对象[[1, 2, 3, 6, 8]]
调用后地址: 2503471655936

三、匿名函数和递归函数

(一)匿名函数

在Python中,匿名函数通常使用lambda关键字定义。lambda函数是一种小型函数,它可以接受任意数量的参数,但只能有一个表达式。它通常用于简单的、不需要明确命名的函数

lambda 参数1,参数2,参数3: 执行代码语句

# 定义一个匿名函数,接受两个参数并返回它们的乘积
multiply = lambda x, y: x * yresult = multiply(5, 6)
print(result)  # 输出: 30
'''
匿名函数
语法:
lambda 参数1,参数2,参数3,...:表达式
特点
1、使用lambda关键字去创建函数
2、没有名字的函数
3、匿名函数冒号后面的表达式有且只有一个, 注:是表达式,而不是语句
4、匿名函数自带return,而这个return的结果就是表达式计算后的结果
缺点
lambde只能是单个表达式,不是一个代码块,lambde的设计就是为了满足简单函数的场景,
仅仅能封装有限的逻辑,复杂逻辑实现不了,必须使用def来处理
'''
def computer(x,y):'''计算数据和:param x::param y::return:'''return x+ypass
# 对应的匿名函数
M=lambda x,y:x+y
# 通过变量去调用匿名函数
print(M(3,5))
print(computer(2,4))result=lambda a,b,c:a*b*c
print(result(4,3,2))age=int(input('请输入年龄:'))
print('可以上学' if age>18 else '继续上学') #可以替换传统双分支的写法funcTest=lambda x,y:x if x>y else y
print(funcTest(2,12))rs=(lambda x,y:x if x>y else y)(6,2) #直接的调用
print(rs)
varRs=lambda x:(x**2)+10
print(varRs(10))
#

(二)递归函数

Python中的递归函数,这是一种函数直接或间接调用自身的方法。在使用递归时,必须有一个明确的退出条件(基准情况),否则递归将无限进行下去,最终导致栈溢出错误

# 定义一个递归函数,用于计算阶乘
def factorial(n):if n == 0:  # 基准情况return 1else:return n * factorial(n - 1)  # 递归调用result = factorial(5)
print(result)  # 输出: 120
'''
递归满足的条件
函数调用自己本身,必须有一个明确的结束条件
优点:逻辑简单、定义简单
缺点:容易导致栈溢出,内存资源紧张,甚至内存泄漏
'''# 求阶乘
# 循环的方式去实现
def jiecheng(n):result=1for item in range(1,n+1):result*=itempassreturn resultprint('10的阶乘{}'.format(jiecheng(10)))# 递归方式去实现
def diguiJc(n):'''递归实现:param n: 阶乘参数:return:'''if n==1:return 1else:return n*diguiJc(n-1)pass# 递归调用
print('5的阶乘{}'.format(diguiJc(5)))# 递归案例,树形结构的遍历
import os #引入文件操作模块
def findFile(file_Path):listRs=os.listdir(file_Path) #得到该路径下所有文件夹for fileItem in listRs:full_path=os.path.join(file_Path,fileItem) #获取完整的文件路径if os.path.isdir(full_path):#判断是否是文件夹findFile(full_path) #如果是一个文件夹 再次去递归else:print(fileItem)passpasselse:returnpass# 调用搜索文件夹对象
findFile('E:\\软件')

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

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

相关文章

代码随想录打卡DAY21

算法记录第21天 [二叉树] 1.LeetCode 538. 把二叉搜索树转换为累加树 题目描述&#xff1a; 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原…

[在线实验]-ActiveMQ Docker镜像的下载与部署

镜像下载 下载ActiveMQ的Docker镜像文件。通常&#xff0c;这些文件会以.tar格式提供&#xff0c;例如activemq.tar。 docker的activemq镜像资源-CSDN文库 加载镜像 下载完成后&#xff0c;您可以使用以下命令将镜像文件加载到Docker中&#xff1a; docker load --input a…

VTK中对于相机camera的设置

1. 相机的核心属性 在 VTK 中&#xff0c;vtkCamera 的核心属性有默认值。如果你不设置这些属性&#xff0c;相机会使用默认值来渲染场景。 Position&#xff08;默认值&#xff1a;(0, 0, 1)&#xff09;&#xff1a; 默认情况下&#xff0c;相机位于 Z 轴正方向的 (0, 0, 1)…

学习日志017--python的几种排序算法

冒泡排序 def bubble_sort(alist):i 0while i<len(alist):j0while j<len(alist)-1:if alist[j]>alist[j1]:alist[j],alist[j1] alist[j1],alist[j]j1i1l [2,4,6,8,0,1,3,5,7,9] bubble_sort(l) print(l) 选择排序 def select_sort(alist):i 0while i<len(al…

超高流量多级缓存架构设计!

文章内容已经收录在《面试进阶之路》&#xff0c;从原理出发&#xff0c;直击面试难点&#xff0c;实现更高维度的降维打击&#xff01; 文章目录 电商-多级缓存架构设计多级缓存架构介绍多级缓存请求流程负载均衡算法的选择轮询负载均衡一致性哈希负载均衡算法选择 应用层 Ngi…

红黑树的概念以及基本模拟

目录 一、概念和规则&#xff1a; 1、思考为什么最长路径不超过最短路径的二倍&#xff1f; 2、红黑树的效率&#xff1f; 二、红黑树的代码实现 1、红黑树的节点结构 2、红黑树的插入 1、大致过程&#xff1a; 2、维护的三种情况&#xff1a; 1、情况一&#xff1a;变…

IP反向追踪技术,了解一下?

DOSS&#xff08;拒绝服务&#xff09;攻击是现在比较常见的网络攻击手段。想象一下&#xff0c;有某个恶意分子想要搞垮某个网站&#xff0c;他就会使用DOSS攻击。这种攻击常常使用的方式是IP欺骗。他会伪装成正常的IP地址&#xff0c;让网络服务器以为有很多平常的请求&#…

【C++习题】15.滑动窗口_串联所有单词的子串

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 30. 串联所有单词的子串 题目描述&#xff1a; 解法 滑动窗口哈希表 这题和第14题不同的是&#xff1a; 哈希表不同&#xff1a;hash<string,int>left与right指…

论文笔记(五十七)Diffusion Model Predictive Control

Diffusion Model Predictive Control 文章概括摘要1. Introduction2. Related work3. 方法3.1 模型预测控制3.2. 模型学习3.3. 规划&#xff08;Planning&#xff09;3.4. 适应 4. 实验&#xff08;Experiments&#xff09;4.1. 对于固定奖励&#xff0c;D-MPC 可与其他离线 RL…

oracle 创建只可以查询权限用户+sqldeveloper如何看到对应表

声明 申明部分是从其他csdn用户哪里复制的&#xff0c;只是自己操作后发现无法达到我最后的预期&#xff0c;所以关闭忘记是看的那篇了&#xff0c;如果有侵权请见谅&#xff0c;联系我删除谢谢。 好了&#xff0c;故事的开始是我最近删投产表了。没错职业黑点&#xff0c;清…

比特币libsecp256k1中safegcd算法形式化验证完成

1. 引言 比特币和其他链&#xff08;如 Liquid&#xff09;的安全性取决于 ECDSA 和 Schnorr 签名等数字签名算法的使用。Bitcoin Core 和 Liquid 都使用名为 libsecp256k1 的 C 库来提供这些数字签名算法&#xff0c;该库以其所运行的椭圆曲线命名。这些算法利用一种称为modu…

15分钟做完一个小程序,腾讯这个工具有点东西

我记得很久之前&#xff0c;我们都在讲什么低代码/无代码平台&#xff0c;这个概念很久了&#xff0c;但是&#xff0c;一直没有很好的落地&#xff0c;整体的效果也不算好。 自从去年 ChatGPT 这类大模型大火以来&#xff0c;各大科技公司也都推出了很多 AI 代码助手&#xff…

Kafka知识体系

一、认识Kafka 1. kafka适用场景 消息系统&#xff1a;kafka不仅具备传统的系统解耦、流量削峰、缓冲、异步通信、可扩展性、可恢复性等功能&#xff0c;还有其他消息系统难以实现的消息顺序消费及消息回溯功能。 存储系统&#xff1a;kafka把消息持久化到磁盘上&#xff0c…

JVM调优篇之JVM基础入门AND字节码文件解读

目录 Java程序编译class文件内容常量池附录-访问标识表附录-常量池类型列表 Java程序编译 Java文件通过编译成class文件后&#xff0c;通过JVM虚拟机解释字节码文件转为操作系统执行的二进制码运行。 规范 Java虚拟机有自己的一套规范&#xff0c;遵循这套规范&#xff0c;任…

【Petri网导论学习笔记】Petri网导论入门学习(十一) —— 3.3 变迁发生序列与Petri网语言

目录 3.3 变迁发生序列与Petri网语言定义 3.4定义 3.5定义 3.6定理 3.5例 3.9定义 3.7例 3.10定理 3.6定理 3.7 有界Petri网泵引理推论 3.5定义 3.9定理 3.8定义 3.10定义 3.11定义 3.12定理 3.93.3 变迁发生序列与Petri网语言 对于 Petri 网进行分析的另一种方法是考察网系统…

Flink--API 之Transformation-转换算子的使用解析

目录 一、常用转换算子详解 &#xff08;一&#xff09;map 算子 &#xff08;二&#xff09;flatMap 算子 &#xff08;三&#xff09;filter 算子 &#xff08;四&#xff09;keyBy 算子 元组类型 POJO &#xff08;五&#xff09;reduce 算子 二、合并与连接操作 …

Top 10 Tools to Level Up Your Prompt Engineering Skills

此文章文字是转载翻译&#xff0c;图片是自已用AI 重新生成的。文字内容来自 https://www.aifire.co/p/top-10-ai-prompt-engineering-tools 供记录学习使用。 Introduction to AI Prompt Engineering AI Prompt Engineering 简介 1&#xff0c;Prompt Engineering 提示工程…

Rust语言俄罗斯方块(漂亮的界面案例+详细的代码解说+完美运行)

tetris-demo A Tetris example written in Rust using Piston in under 500 lines of code 项目地址: https://gitcode.com/gh_mirrors/te/tetris-demo 项目介绍 "Tetris Example in Rust, v2" 是一个用Rust语言编写的俄罗斯方块游戏示例。这个项目不仅是一个简单…

Spring Boot 与 Spring Cloud Alibaba 版本兼容对照

版本选择要点 Spring Boot 3.x 与 Spring Cloud Alibaba 2022.0.x Spring Boot 3.x 基于 Jakarta EE&#xff0c;javax.* 更换为 jakarta.*。 需要使用 Spring Cloud 2022.0.x 和 Spring Cloud Alibaba 2022.0.x。 Alibaba 2022.0.x 对 Spring Boot 3.x 的支持在其发行说明中…

(免费送源码)计算机毕业设计原创定制:Java+ssm+JSP+Ajax SSM棕榈校园论坛的开发

摘要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品&#xff0c;从而也带动了一系列与此相关产业&#xff0c;是人们的生活发生了翻天覆地的变化&#xff0c;而网络化的出现也在改变着人们传统的生活方式&#xff0c;包括工作&#xff0c;学习&#xff0c;社交…