当前位置: 首页 > news >正文

轻量级Python IDE使用(三)——函数

1、函数

1.1、函数的概述

在程序设计中,函数的使用可以提升代码的复用率和可维护性。

系统内建函数pow()进行幂运算:

a = pow(2,4)

自定义函数func()

def func(a,b):return a ** b
a=func(2,4)
print(a)

自定义函数func(),功能是输出a的b次幂

1.2、函数的定义

python语言中,函数通常是由函数名、参数列表以及一系列语句组成的函数体构成的。函数定义一般如下

def 函数名(参数列表)函数体

例:

def foo():print("I am")print("foo")

以上第一的foo()函数虽然不含任何参数,但是函数名后的一对括号是不能省略的。在实际应用中,稍复杂的函数通常会包含一个或多个参数。

def area(width,height):return width * height
#调用area
w = 7
h = 9
print("width=",w,"height=",h,"area=",area(w,h))

以下定义了无任何操作的空函数none()

def none():pass

在Python中,pass语句通常可以用来作为占位符,表示什么操作也不执行。比如在项目起始阶段,如果还没想好函数具体实现时,可以先放置一个pass语句让代码先成功运行起来。待项目框架搭建完毕后,在进行相应的具体实现。

通常情况下,在Python语言中定义一个具有特定功能的函数需要符和以下规则:

  • 函数代码块以def关键字开头,后接函数标识符名称和形参列表;
  • 任何传入的参数和自变量必须放在圆括号内;
  • 函数的第一行语句可以选择性地使用文档字符串;
  • 函数内容以冒号起始,并且严格统一缩进;
  • 函数都有返回值,默认返回None

1.3、形参和实参

在编程语言中,函数定义的时形参,调用的是实参。
形参(parameter),全称"形式参数",不是实际存在的变量。又称虚拟变量。用来接收调用该函数时传入的参数。

实参(argument),全称"实际参数",是调用时传递给函数的参数。实参可以是常量、变量、表达式、函数等。

def area(width,height):return width * height
#调用area
w = 7
h = 9
print("width=",w,"height=",h,"area=",area(w,h))
其中w=7,h=9中的w,h是实参,area(w,h))中的w,h是形参

可见实参传入函数形参位置,调用完后不会影响实参的值

a = 1
b = 2def func(x,y):x+=1y+=2print(x)#2print(y)#4
func(a,b)
print(a)#1
print(b)#2

func(a,b)等效于func(1,2)、func(x=1,y=2)、func(y=2,x=1)

1.4、函数的返回值

在Python中,当函数运行到return语句时即执行完毕,同时将结果返回。因此,可以在函数内部同通过条件判断和循环设置实现较复杂的逻辑,并返回预期的结果。如果没有return语句,函数体内所有语句执行完毕后默认返回None。

def add(x,y):print('x+y=',x+y)return x+y
result = add(y=1,x=2)
print(result)

函数也可以有多个返回值

def add(x,y):print('x+y=',x+y)print('x*y=',x*y)return x+y,x*y
a,b = add(y=1,x=2)
print(a,b)

注意返回值和接收变量的关系是一一对应的

2、函数分类

2.1 内置函数

Python语言中自带的函数叫做内建函数,这些内建函数对大部分常用操作进行有效封装,可以直接调用,为开发提供了极大便利。由于内建函数是Python语言内置的函数,因此不需要导入任何函数库即可直接调用。常用的内建函数如下:

  1. abs(x):返回x的绝对值。

  2. all(iterable):如果iterable的所有元素都为True,则返回True;否则返回False。

  3. any(iterable):如果iterable的任意一个元素为True,则返回True;否则返回False。

  4. ascii(obj):返回一个可打印的对象的字符串表示。

  5. bin(x):将整数x转换为二进制字符串。

  6. bool(x):将x转换为布尔值。如果x为False、0、空列表、空字典和空字符串,则转换为False;否则转换为True。

  7. bytearray(iterable):返回一个由可迭代对象iterable中的元素组成的字节数组。

  8. bytes(iterable):返回一个由可迭代对象iterable中的元素组成的字节对象。

  9. callable(obj):如果obj是可调用的(例如函数、方法、类),则返回True;否则返回False。

  10. chr(i):返回Unicode值为i的字符。

  11. classmethod(func):将函数func转换为类方法。

  12. compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1):将source编译为代码对象或AST对象。可用于动态执行代码。

  13. complex(real, imag):创建一个复数,其中real为实部,imag为虚部。

  14. delattr(obj, name):从对象obj中删除名为name的属性。

  15. dict():创建一个空字典。

  16. dir(obj):返回一个包含对象obj定义的所有属性和方法名称的列表。

  17. divmod(a, b):返回a除以b的商和余数的元组。

  18. enumerate(iterable, start=0):返回一个枚举对象,其中包含iterable中的每个元素及其对应的索引。

  19. eval(expression, globals=None, locals=None):将字符串expression作为Python代码执行,并返回结果。

  20. exec(obj[, globals[, locals]]):将对象obj(可以是字符串或代码对象)作为Python代码执行。

  21. filter(function, iterable):返回一个由iterable中满足函数function的元素组成的迭代器。

  22. float(x):将x转换为浮点数。

  23. format(value[, format_spec]):根据format_spec的格式将value转换为字符串。

  24. frozenset(iterable):创建一个不可变的集合。

  25. getattr(obj, name[, default]):返回对象obj的名为name的属性的值。

  26. globals():返回当前全局符号表的字典。

  27. hasattr(obj, name):如果对象obj具有一个名为name的属性,则返回True;否则返回False。

  28. hash(obj):返回对象obj的哈希值。

  29. help(obj):提供对象obj的帮助信息。

  30. hex(x):将整数x转换为十六进制字符串。

  31. id(obj):返回对象obj的唯一标识符。

  32. input([prompt]):从标准输入读取一行字符串。

  33. int(x[, base]):将x转换为整数。如果base提供,则将x视为base进制的字符串,将其转换为十进制。

  34. isinstance(obj, classinfo):如果对象obj是classinfo的实例或派生类的实例,则返回True;否则返回False。

  35. issubclass(class, classinfo):如果class是classinfo的派生类,则返回True;否则返回False。

  36. iter(obj[, sentinel]):返回一个迭代器对象。

  37. len(obj):返回对象obj的长度(元素个数)。

  38. list(iterable):将可迭代对象iterable转换为列表。

  39. locals():返回当前局部符号表的字典。

  40. map(function, iterable):将函数function应用于iterable中的每个元素,并返回一个包含结果的迭代器。

  41. max(iterable[, key]):返回iterable中的最大元素。可以使用key函数指定比较规则。

  42. memoryview(obj):返回对象obj的内存视图,可以用于对对象进行原生内存操作。

  43. min(iterable[, key]):返回iterable中的最小元素。可以使用key函数指定比较规则。

  44. next(iterator[, default]):返回迭代器iterator的下一个元素。如果已经到达迭代器的末尾,则返回default。

  45. object():返回一个没有任何特别行为的新对象。

  46. oct(x):将整数x转换为八进制字符串。

  47. open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None):打开文件,返回文件对象。

  48. ord©:返回字符c的Unicode值。

  49. pow(x, y[, z]):返回x的y次方,如果提供了参数z,则计算结果的模为z。

  50. print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False):将对象打印到流文件,默认为标准输出。

  51. property(fget=None, fset=None, fdel=None, doc=None):创建一个属性,其中fget、fset和fdel为获取、设置和删除属性值的方法。

  52. range(stop):返回一个从0到stop-1的整数序列。

  53. repr(obj):返回对象obj的字符串表示形式。

  54. reversed(seq):返回一个逆序迭代器,用于迭代序列seq的元素。

  55. round(number[, ndigits]):返回一个浮点数的四舍五入值。

  56. set(iterable):创建一个集合,其中包含iterable中的元素。

  57. setattr(obj, name, value):将对象obj的属性name设置为value。

  58. slice(stop):创建一个切片对象,用于切取从0到stop-1的元素。

  59. sorted(iterable[, key[, reverse]]):返回iterable排序的副本。

  60. staticmethod(func):将函数func转换为静态方法。

  61. str(obj):将对象obj转换为字符串。

  62. sum(iterable[, start]):返回iterable的求和结果。

  63. super([type[, object-or-type]]):返回一个链式对象,用于在多重继承中调用父类方法。

  64. tuple(iterable):将可迭代对象iterable转换为元组。

  65. type(obj):返回对象obj的类型。

  66. vars([object]):返回对象object的__dict__属性,或返回当前局部符号表的字典。

  67. zip(*iterables):将多个迭代器作为参数,将对应位置的元素组合成元组。

  68. 1__import__ (name[, globals[, locals[, fromlist[, level]]]]):使用import机制导入一个模块。

  69. openpyxl():用于操作Excel文件的库。

在Python语言中,除内建函数外的其他类型函数通常被称为第三方函数。

a = abs(-100)
b = max(-1,4,0,-2,13,4)
print(a,b)#100 13

Python语言常用的内建函数还包括数据类型转换函数。

print("int('12'):",int('12'))
print("int(12.5):",int(12.5))
print("float('12.5'):",float('12.5'))
print("str(1.25):",str(1.25))
print("str(10):",str(10))
print("bool(1):",bool(1))#True
print("bool(''):",bool(''))#False

Python语言中,还可以把函数名赋给一个变量,相当于给这个函数起了一个别名。

a = abs
print(a(-1))

2.2 自定义函数

当内建函数不能满足要求时,开发者可以根据实际需要自定义函数。函数自定义完成后,开发者可以在其他代码处通过函数名调用。

def printme(str):"函数功能:打印传入的字符串"print(str)printme("调用自定义函数")

在Python语言中,内建函数可以直接使用,第三方函数需要使用import命令导入相应的库才能使用。对于自定义函数,其定义和调用可以在用一个文件中,也可分离成不同的文件。
定义一个func.py并写入hello函数

def hello():print("你好")

在一个新的xx.py文件中调用hello

from func import hello
hello()

3、函数参数

3.1 参数种类

函数参数分为可变类型和不可变类型,其调用结果是不同的。

  • 可变类型:类似c++的引用传递。如列表、字典等。如果传递的参数是可变类型,则在函数内部对传入参数的修改会影响到外部变量。
  • 不可变类型:类似c++的值传递,如整数、字符串、元组等。如果传递到达参数是不可变类型,则在函数内部对传入的参数的修改不会影响到外部变量。

不可变类型参数,例:

def change_int(a):a=10
b=2
change_int(b)
print(b)#结果是2

b的值不变
可变类型参数,例:

def change_int(my_list):my_list.append([1,2,3])print("函数内修改后的变量:", my_list)#[10, 20, 30, [1, 2, 3]]my_list =[10,20,30]
change_int(my_list)
print("函数外变量的值:", my_list)#[10, 20, 30, [1, 2, 3]]

my_list的值改变

3.2 位置参数

调用函数时,Python语言必须将函数调用中的每个实参都关联到函数的相应形参。最简单的关联方式是基于实参的顺序,这种关联方式被称为位置实参。

def student_info(name,age):print("my name is",name ,age," years old")student_info('jack',24)

输出

my name is jack 24  years old

3.3 默认参数

编写函数时,可给每个形参指定默认值。注意,必选参数在前,默认参数在后。
以下错误示例

def student_info(name='liuj',age):print("my name is",name ,age," years old")

正确操作

def student_info(name,age=24):print("my name is",name ,age," years old")student_info('jack')

3.4 不定长参数

开发者可以将一个list或tuple传进来

def sum(numbers):i=0for n in numbers:i = i + nreturn i
print(sum([1,2,3]))#6
print(sum([1,2,3,4]))#10

也可以在函数参数前面添加一个*号把该参数定义为不定长参数

def sum(*numbers):i=0for n in numbers:i = i + nreturn i
print(sum())#0
print(sum(1,2,3,4))#10
num = [1,2,3]
print(sum(*num))#6

3.5 关键字参数

关键字实参是传递参数时使用“名称-值”对的方式,在实参中将名称和值关联起来。无须考虑函数调用中的实参顺序。

def func(a,b):return pow(a,b)
print(func(b=4,a=3))#81

3.6 命名关键字参数

如果要限制关键字参数的名字,可以使用命名关键字参数。和关键字参数**kw不同,如果没有可变参数,命名参数关键字参数就必须加一个 * 号作为特殊分隔符。如果缺少 * ,Python语言解释器将无法识别位置参数和命名关键字参数。

例如,若只接收age和city作为关键字参数,可以采用如下形式。

def person_info(name,denger,*,age,city):print(name,denger,age,city)person_info('jack','M',age=18,city='guangzhou')

注意
*表示不定长参数
**表示不定长的关键字参数

3.7 参数组合

在Python语言中定义函数,开发者可以组合使用这些参数(必选参数、默认参数、可变参数、关键字参数和命名关键字参数)。注意参数定义是有顺序的。定义顺序必须是:必选参数、默认参数、可变参数、命名关键字参数、关键字参数。

def func(a,b,c=0,*args,**kw):print(a,b,c,args,kw)func(1,2,3,'a','b',x=4,y=7,z=8)

运行结果:

1 2 3 ('a', 'b') {'x': 4, 'y': 7, 'z': 8}

4、函数式编程

  • 函数式编程是一种编程范式,是面向数学的抽象,其将计算描述为一种表达式求值。
  • 函数式编程中的函数不是指计算机的函数,而是指数学中的函数,即自变量的映射。
  • 函数式编程的一个特点是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数。

4.1、高阶函数

接受函数为参数,或者把函数作为结果返回的函数称为高阶函数。

word = ['apple','blue','car','did']
def reverse(word):return word[::-1]print(sorted(word,key=len))print(reverse('testing'))print(sorted(word,key=reverse))

4.2、匿名函数

所谓的匿名函数,就是不再使用def语句这样的标准形式定义的函数,Python经常使用lambda来创建匿名函数。
lambda arg1,arg2…:expression

sum = lambda arg1,arg2:arg1+arg2
print(sum(2,3))

相关文章:

轻量级Python IDE使用(三)——函数

1、函数 1.1、函数的概述 在程序设计中,函数的使用可以提升代码的复用率和可维护性。 系统内建函数pow()进行幂运算: a pow(2,4)自定义函数func() def func(a,b):return a ** b afunc(2,4) print(a)自定义函数func(),功能是输出a的b次幂 1.2、函数的定义 py…...

计算机图形学理论(3):着色器编程

本系列根据国外一个图形小哥的讲解为本,整合互联网的一些资料,结合自己的一些理解。 CPU vs GPU CPU支持: 快速缓存分支适应性高性能 GPU支持: 多个 ALU快速板载内存并行任务的高吞吐量(在每个片段、顶点上执行着色…...

ubuntu20.04安装timeshift最新方法

总结: 现在可以使用如下代码安装 sudo apt-get update sudo apt-get install timeshift原因: 在尝试Timeshift系统备份与还原中的方法时, sudo apt-add-repository -y ppa:teejee2008/ppa运行失败。 更改为以下代码: sudo a…...

小狐狸ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法

最新版2.6.7版下载:https://download.csdn.net/download/mo3408/88656497 很多会员在上传小程序前端时经常出现首页无法打开的情况,错误提示无法打开该页面,不支持打开,这种问题其实就是权限问题,页面是通过调用web-v…...

DQL-基本查询

概念: 1,数据库管理系统一个重要功能就是数据查询,数据查询不应只是简单返回数据库中存储的数据,还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示 2,MySQL提供了功能强大、灵活的语句来实现这些操作 3…...

漏洞复现-红帆OA iorepsavexml.aspx文件上传漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…...

Leetcode 2976. Minimum Cost to Convert String I

Leetcode 2976. Minimum Cost to Convert String I 1. 解题思路2. 代码实现 题目链接:2976. Minimum Cost to Convert String I 1. 解题思路 这道题思路上其实是非常直接的,本质上就是给出有向图之后,求出有向图上任意两点之间的最短距离&…...

ZKP Mathematical Building Blocks (2)

MIT IAP 2023 Modern Zero Knowledge Cryptography课程笔记 Lecture 3: Mathematical Building Blocks (Yufei Zhao) Fiat Shamir heuristic Turn an interactive proof to a non-interactive proofP can simulate V whenever V picks a random valueP can simulate V’s ran…...

blender径向渐变材质-着色编辑器

要点: 1、用纹理坐标中的物体输出连接映射中的矢量输入 2、物体选择一个空坐标,将空坐标延z轴上移一段距离 3、空坐标的大小要缩放到和要添加材质的物体大小保持一致...

2023美团机器人研究院学术年会成功举办

2023年12月19日,深圳市美团机器人研究院学术年会在清华大学深圳国际研究生院成功落下帷幕。会议回顾了研究院成立一年来的进展和成果,并邀请了各界专家共同讨论机器人技术的未来发展趋势。此外,年会期间还举办了首届低空经济智能飞行管理挑战…...

swing快速入门(二十七)

注释很详细,直接上代码 上一篇 新增内容 1.为按钮指定图标 2. 列表框的并列 3.菜单项绑定快捷键 4.控件悬浮提示信息 5.菜单项设置小图标 6.五种布局风格右键选择切换 package swing21_30;import javax.swing.*; import java.awt.*; import java.awt.event.…...

Vue 封装echarts柱状图(Bar)组件

目的&#xff1a;减少重复代码&#xff0c;便于维护 显示效果 组件代码 <template><div class"ldw-data-content-box"><div class"ldw-chilren-box"><div class"title" v-if"title">{{ title }}</div>…...

异常(Java)

1.异常的概念 在 Java 中&#xff0c;将程序执行过程中发生的不正常行为称为异常 。 1.算数异常 System.out.println(10 / 0); // 执行结果 Exception in thread "main" java.lang.ArithmeticException: / by zero 2.数组越界异常 int[] arr {1, 2, 3}; System.out.…...

vue的插槽解析

插槽 好处&#xff1a;组件的内容结构可定制 用slot插槽进行占位 语法: 子组件中通过slot进行占位 理解&#xff1a;父组件&#xff0c;在子组件标签嵌套的内容就会被渲染到slot地方 一、默认插槽 //子组件 <slot>slot插槽</slot> //方法一<slot name"…...

Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理

Spring&#xff08;3&#xff09;Spring从零到入门 - Spring整合技术及AOP事务管理 文章目录 Spring&#xff08;3&#xff09;Spring从零到入门 - Spring整合技术及AOP事务管理4 Spring整合技术示例4.1 Spring整合Mybatis4.1.1 Mybatis开发回顾4.1.2 整合Spring分析4.1.3 Spri…...

适配器模式学习

适配器模式&#xff08;Adapter&#xff09;将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式分为类适配器模式和对象适配器模式两种&#xff0c;前者类之间的耦合度比后者高&#xff0c;且要…...

NET中使用Identity+CodeFirst+Jwt实现登录、鉴权

目录 前言 一、创建上下文类 1.自定义MyContext上下文类继承IdentityDbContext 2.在Program中添加AddDbContext服务 二、使用Migration数据迁移 1.在控制台中 依次使用add-migration 、updatebase 命令 2.如何修改表名 3.如何自定义字段 三、使用Identity实现登录、修改密码 …...

详解Keras3.0 API: Optimizers

Optimizers 优化器&#xff08;Optimizer&#xff09;是深度学习中用于更新模型参数的一种方法&#xff0c;它的目标是最小化损失函数。在训练神经网络时&#xff0c;我们通常使用梯度下降法来更新参数&#xff0c;而优化器就是实现这一过程的工具。优化器的主要作用是在每次迭…...

【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化

字符串匹配算法是在实际工程中经常遇到的问题&#xff0c;也是各大公司笔试面试的常考题目&#xff0c;本文主要介绍BF算法&#xff08;最好想到的算法&#xff0c;也最好实现&#xff09;和KMP算法&#xff08;最经典的&#xff09; 一、BF算法 BF算法&#xff0c;即暴力(Bru…...

阿里云 ACK One 新特性:多集群网关,帮您快速构建同城容灾系统

云布道师 近日&#xff0c;阿里云分布式云容器平台 ACK One[1]发布“多集群网关”[2]&#xff08;ACK One Multi-cluster Gateways&#xff09;新特性&#xff0c;这是 ACK One 面向多云、多集群场景提供的云原生网关&#xff0c;用于对多集群南北向流量进行统一管理。 基于 …...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...

高效的后台管理系统——可进行二次开发

随着互联网技术的迅猛发展&#xff0c;企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心&#xff0c;成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统&#xff0c;它不仅支持跨平台应用&#xff0c;还能提供丰富…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...