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

学习日志12 python

1 在python中,在列表中使用乘法,其实相当于对列表元素的浅拷贝

题目
执行以下程序,输出结果为()
a = [['1','2'] for i in range(2)]b = [['1','2']]*2a[0][1] = '3'b[0][0] = '4'print(a,b) 
题解
a = [1,2]
b = a * 2  # [1, 2, 1, 2]#此外还要注意一点,当a中的元素为引用类型时,如: a = [[1,2]]
b = a * 2  # b -> [[1, 2], [1, 2]]# 修改b[0][0], b[0][1]同样被修改了, 这是因为b[0]与b[1]有相同的地址
b[0][0] = 3
print(b)  # [[3, 2], [3, 2]]# 打印b[0]和b[1]的 id
print(id(b[0]))  # 1904838110536
print(id(b[1]))  # 1904838110536

这段代码主要考察了 Python 中列表的浅拷贝和深拷贝,特别是当列表元素为引用类型时的复制行为。以下是整理后的内容:

1. 列表生成式与直接乘法的区别

当创建多维列表时,

使用列表生成式 [... for _ in range(n)] 和直接乘法 [...] * n 的效果完全不同

python

运行

# 方法1:使用列表生成式(正确)
a = [['1', '2'] for i in range(2)]  # 生成两个独立的列表# 方法2:使用直接乘法(错误)
b = [['1', '2']] * 2  # 同一个列表对象被引用两次
  • 列表生成式会创建多个独立的子列表(每个子列表地址不同)
  • 直接乘法只会复制子列表的引用(所有子列表指向同一个地址)

2. 修改操作的影响

对上述两种方式创建的列表进行修改时:

python

运行

# 修改a的第一个子列表
a[0][1] = '3'  # 仅修改a[0],因为a[0]和a[1]是独立的
print(a)  # 输出: [['1', '3'], ['1', '2']]# 修改b的第一个子列表
b[0][0] = '4'  # 同时修改b[0]和b[1],因为它们指向同一地址
print(b)  # 输出: [['4', '2'], ['4', '2']]

3. 引用类型的复制陷阱

当列表元素是引用类型(如列表、字典、对象)时,直接复制会导致所有副本指向同一内存地址:

python

运行

a = [[1, 2]]  # 创建一个包含列表的列表
b = a * 2     # 复制a(浅拷贝),b[0]和b[1]指向同一地址b[0][0] = 3   # 修改b[0][0]时,b[1][0]也会被修改
print(b)      # 输出: [[3, 2], [3, 2]]# 验证地址相同
print(id(b[0]))  # 例如: 140588032326848
print(id(b[1]))  # 例如: 140588032326848(与b[0]相同)

4. 正确复制多维列表的方法

如果需要独立的多维列表,应使用深拷贝

python

运行

import copya = [[1, 2]]
b = copy.deepcopy(a) * 2  # 每个子列表都是独立的b[0][0] = 3
print(b)  # 输出: [[3, 2], [1, 2]]

总结

操作列表元素为值类型列表元素为引用类型
a * n独立副本共享引用
[... for _ in n]独立副本独立副本
copy.deepcopy(a)独立副本独立副本

核心原则:当列表元素是引用类型时,直接复制(如 * 或 copy.copy())只会复制引用,需使用 copy.deepcopy() 创建完全独立的副本。

2 判断回文字符串

在python3中,非空字符串strs满足下列哪些表达式时,可将其判定为回文串(正向序列和反向序列相同,回文串通常是在字符层面上进行比较,忽略大小写和非字母数字字符的差异)()A strs == strs[::-1]B strs[0] == strs[len(strs)-1]C tt = strs + strs;strs in ttD re.sub(r'[^a-z0-9]', '', strs.lower())[::-1]==re.sub(r'[^a-z0-9]', '', strs.lower())正确答案:D

核心概念:回文串的定义

回文串是指忽略大小写和非字母数字字符后,正向和反向拼写相同的字符串。
例如:

  • "Madam" → 忽略大小写后是 "madam" → 反转后是 "madam" → 是回文
  • "A man, a plan" → 忽略大小写和空格后是 "amanaplan" → 反转后是 "nalapaman" → 不是回文

选项 D 的处理步骤(重点)

选项 D 的表达式是:

python

运行

re.sub(r'[^a-z0-9]', '', strs.lower())[::-1] == re.sub(r'[^a-z0-9]', '', strs.lower())

让我们拆解这个表达式,用例子 "Madam, I'm Adam" 说明:

步骤 1:转为小写 strs.lower()

python

运行

"Madam, I'm Adam" → "madam, i'm adam"
步骤 2:移除非字母数字字符 re.sub(r'[^a-z0-9]', '', ...)
  • r'[^a-z0-9]' 是正则表达式,表示匹配所有非字母数字的字符(如空格、标点、符号)。
  • re.sub(...) 会将这些字符替换为空字符串 ''

python

运行

"madam, i'm adam" → "madamimadam"  # 所有非字母数字字符被移除
步骤 3:反转字符串 [::-1]

字符串切片 [::-1] 表示从后往前取所有字符,即反转字符串。

python

运行

"madamimadam" → "madamimadam"  # 反转后与原字符串相同
步骤 4:比较结果

处理后的字符串 "madamimadam" 与其反转后的字符串相同,因此:

python

运行

"madamimadam" == "madamimadam" → True  # 是回文

对比选项 A 的问题

选项 A 的表达式是:

python

运行

strs == strs[::-1]

它直接比较原始字符串和反转后的原始字符串,不处理大小写和非字母数字字符
用同样的例子 "Madam, I'm Adam" 测试:

步骤 1:反转原始字符串 strs[::-1]

python

运行

"Madam, I'm Adam" → "madA m'I ,madaM"  # 反转后的原始字符串
步骤 2:比较原始字符串和反转后的字符串

python

运行

"Madam, I'm Adam" == "madA m'I ,madaM" → False  # 不相等,不是回文

结论:选项 A 只能判断完全相同的原始字符串(如 "racecar"),无法处理实际应用中的回文场景(如包含空格、标点、大小写混合的情况)。

字符串切片 [::-1] 的详细解释

字符串切片的基本语法是 [start:stop:step]

  • start:起始位置(默认 0)。
  • stop:结束位置(默认字符串长度)。
  • step:步长(默认 1,表示从左到右取字符)。

当 step 为 -1 时,表示从右到左取字符,即反转字符串:

python

运行

s = "hello"
s[::-1]  # 等价于 s[::-1] → "olleh"# 分步解释:
s[0:5:1]  # 从0到5,步长1 → "hello"
s[0:5:-1]  # 从0到5,步长-1 → 无效(方向冲突)
s[5:0:-1]  # 从5到0,步长-1 → "olle"(不包含索引0的字符)
s[::-1]  # 省略start和stop,步长-1 → 自动从最后一个字符到第一个字符 → "olleh"

总结

  • 选项 D 正确
    它通过 strs.lower() 和 re.sub(...) 预处理字符串,移除大小写和非字母数字的干扰,再用 [::-1] 反转后比较,完全符合回文串的定义

  • 选项 A 错误
    它直接比较原始字符串,忽略了回文串需要忽略大小写和非字母数字的规则。

选项 A:strs == strs[::-1]

代码逻辑

直接比较原始字符串和反转后的原始字符串。

示例分析
  • 例子 1strs = "racecar"
    反转后:"racecar" → True(是回文)。
  • 例子 2strs = "RaceCar"
    反转后:"raCecaR" → False(大小写不同,不是回文)。
  • 例子 3strs = "A man, a plan"
    反转后:"nalp a ,nam A" → False(包含空格和标点,不是回文)。
问题
  • 未处理大小写差异(如 "RaceCar")。
  • 未忽略非字母数字字符(如空格、标点)。
结论

选项 A 错误

选项 B:strs[0] == strs[len(strs)-1]

代码逻辑

仅比较字符串的第一个字符和最后一个字符。

示例分析
  • 例子 1strs = "radar"
    首字符:'r',尾字符:'r' → True(是回文)。
  • 例子 2strs = "abca"
    首字符:'a',尾字符:'a' → True(但中间字符不对称,实际不是回文)。
  • 例子 3strs = "hello"
    首字符:'h',尾字符:'o' → False(不是回文)。
问题
  • 仅检查首尾字符,未验证中间部分是否对称。
结论

选项 B 错误

选项 C:tt = strs + strs; strs in tt

代码逻辑

将字符串自身拼接后,检查原字符串是否存在于拼接结果中。

示例分析
  • 例子 1strs = "abc"
    拼接后:"abcabc" → "abc" 存在于其中 → True
  • 例子 2strs = "hello"
    拼接后:"hellohello" → "hello" 存在于其中 → True
  • 例子 3strs = "racecar"
    拼接后:"racecarracecar" → "racecar" 存在于其中 → True
问题
  • 所有字符串自身拼接后都包含原字符串(如 "abc" 一定在 "abcabc" 中),与回文无关。
结论

选项 C 错误

选项 D:re.sub(r'[^a-z0-9]', '', strs.lower())[::-1] == re.sub(r'[^a-z0-9]', '', strs.lower())

# 步骤1:将字符串转为小写
lower_str = strs.lower()
# 步骤2:移除非字母数字字符(只保留a-z、0-9)
processed_str = re.sub(r'[^a-z0-9]', '', lower_str)
# 步骤3:反转处理后的字符串
reversed_str = processed_str[::-1]
# 步骤4:比较是否相等
result = reversed_str == processed_str
代码逻辑
  1. 转为小写strs.lower()
  2. 移除所有非字母数字字符re.sub(r'[^a-z0-9]', '', ...)
  3. 反转处理后的字符串[::-1]
  4. 比较反转前后是否相同
示例分析
  • 例子 1strs = "RaceCar"
    1. 小写:"racecar"
    2. 移除非字母数字:"racecar"(无变化)
    3. 反转:"racecar" → 相同 → True(是回文)。
  • 例子 2strs = "A man, a plan"
    1. 小写:"a man, a plan"
    2. 移除非字母数字:"amanaplan"
    3. 反转:"nalapaman" → 不同 → False(不是回文)。
  • 例子 3strs = "Madam, I'm Adam"
    1. 小写:"madam, i'm adam"
    2. 移除非字母数字:"madamimadam"
    3. 反转:"madamimadam" → 相同 → True(是回文)。
结论

选项 D 正确

总结

选项核心逻辑问题结论
A直接比较原始字符串未处理大小写和非字母数字
B仅比较首尾字符未验证中间部分
C检查字符串是否在自身拼接中所有字符串都满足,与回文无关
D处理后比较反转字符串完全符合回文定义

3 python中__new__和__init__的区别

在 Python 中,__new____init__都是类的特殊方法,但它们的功能和用途有本质区别。以下是它们的主要区别:

1. __new__方法

  • 类型静态方法(但不需要显式声明)。
  • 作用创建并返回一个新的对象实例。它是类实例化时调用的第一个方法。
  • 参数
    • cls:类本身(类似于__init__中的self,但指向类)。
    • 其他参数:传递给类构造函数的参数(如obj = MyClass(arg1, arg2)中的arg1, arg2)。
  • 返回值:必须返回一个新的对象实例(通常是cls的实例)。如果返回None或其他类型,__init__将不会被调用。
  • 典型用途
    • 实现单例模式(确保类只有一个实例)。
    • 创建不可变对象的子类(如intstr)。
    • 元类编程中自定义类的创建过程。

2. __init__方法

  • 类型实例方法。
  • 作用初始化已创建的对象实例。它在__new__返回实例后被自动调用。
  • 参数
    • self:已创建的对象实例。
    • 其他参数:与__new__接收的参数相同(除了cls)。
  • 返回值:始终为None(若返回其他值会引发错误)。
  • 典型用途:设置对象的初始属性值。

3. 执行顺序

  • 实例化时,先调用__new__创建对象。
  • __new__返回的是cls的实例,则自动调用__init__初始化该实例。
  • __new__返回其他类型或None,则__init__不会被调用。

4. 示例对比

python

运行

class MyClass:def __new__(cls, *args, **kwargs):print("调用 __new__ 方法")instance = super().__new__(cls)  # 创建实例return instance  # 必须返回实例def __init__(self, value):print("调用 __init__ 方法")self.value = value  # 初始化属性obj = MyClass(42)
# 输出:
# 调用 __new__ 方法
# 调用 __init__ 方法

5. 关键区别总结

特性__new____init__
方法类型静态方法(隐式)实例方法
主要作用创建对象初始化对象
返回值必须返回实例(或None必须返回None
何时调用实例化时第一个被调用__new__后被调用
参数中的self无(第一个参数是cls已创建的实例

6. 特殊场景示例(单例模式)

python

运行

class Singleton:_instance = None  # 存储单例实例def __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super().__new__(cls)return cls._instancea = Singleton()
b = Singleton()
print(a is b)  # 输出: True(a和b是同一个实例)

在这个单例模式中,__new__确保类只创建一个实例,而__init__会在每次实例化时被调用(可能导致重复初始化,需注意)。

以下是__new____init__方法的异同点总结及示例:

相同点

  1. 都是类的特殊方法:在类实例化过程中自动调用。
  2. 都参与对象创建过程:共同完成从类到实例的转换。

不同点

特性__new____init__
方法类型静态方法(无需@staticmethod声明,第一个参数是cls,代表类本身)。实例方法(第一个参数是self,代表已创建的实例)。
主要作用创建对象的实例(分配内存空间)。初始化实例的属性(设置对象状态)。
返回值必须返回一个实例(通常是cls的实例,也可以是其他类的实例或None)。必须返回None(若返回其他值会引发TypeError)。
调用条件无论何时创建类的实例都会被调用。仅在__new__返回的是当前类(cls)的实例时才会被调用。
执行顺序实例化时第一个被调用。__new__之后被调用(如果满足调用条件)。

示例 1:标准类实例化流程

python

运行

class Point:def __new__(cls, x, y):print(f"调用 __new__,创建 {cls.__name__} 实例")instance = super().__new__(cls)  # 调用父类的__new__创建实例return instance  # 返回当前类的实例,触发__init__def __init__(self, x, y):print(f"调用 __init__,初始化实例")self.x = xself.y = yp = Point(3, 4)
# 输出:
# 调用 __new__,创建 Point 实例
# 调用 __init__,初始化实例

关键点

  • __new__创建了Point类的实例。
  • __init__初始化了实例的xy属性。

示例 2:__new__返回其他类的实例(__init__不会被调用)

python

运行

class Rectangle:def __init__(self, width, height):self.width = widthself.height = heightclass Square:def __new__(cls, side):print(f"调用 Square 的 __new__,但返回 Rectangle 实例")return Rectangle(side, side)  # 返回其他类的实例,不会触发__init__def __init__(self, side):print(f"调用 Square 的 __init__")  # 不会被执行self.side = sides = Square(5)
print(type(s))  # 输出: <class '__main__.Rectangle'>
# 输出:
# 调用 Square 的 __new__,但返回 Rectangle 实例
# (__init__未被调用)

关键点

  • Square__new__返回了Rectangle的实例。
  • Square__init__未被调用,因为返回的不是Square的实例。

示例 3:单例模式(控制实例创建)

python

运行

class Database:_instance = None  # 存储单例实例def __new__(cls, *args, **kwargs):if not cls._instance:print(f"创建新的 {cls.__name__} 实例")cls._instance = super().__new__(cls)  # 创建实例else:print(f"复用已有的 {cls.__name__} 实例")return cls._instance  # 返回单例实例def __init__(self, db_name):print(f"初始化数据库: {db_name}")self.db_name = db_name  # 每次实例化都会执行(可能导致重复初始化)# 多次实例化
db1 = Database("prod")
db2 = Database("test")print(db1 is db2)  # 输出: True(单例生效)
print(db1.db_name)  # 输出: test(被第二次初始化覆盖)

关键点

  • __new__确保只创建一个实例(单例)。
  • __init__每次都会被调用,可能导致属性被重复设置(需谨慎设计)。

总结

  • __new__ 是对象创建的入口,负责分配内存并返回实例。
  • __init__ 是对象初始化的入口,负责设置实例的初始状态。
  • 只有当__new__返回当前类的实例时,__init__才会被调用,否则实例化过程直接完成。

4 就是类比一下Java里面__new__就是new一个对象的操作,__init__是this的操作?

你的类比有一定道理,但需要注意 Python 和 Java 在对象创建机制上的核心差异。以下是更准确的对比:

Java vs Python:对象创建的类比

Java 的对象创建

在 Java 中,创建对象的完整流程包括:

  1. 内存分配:通过new关键字为对象分配内存空间
  2. 构造方法调用:自动调用类的构造方法(如MyClass())初始化对象属性。

java

public class Point {private int x;private int y;// 构造方法(对应Python的__init__)public Point(int x, int y) {this.x = x;  // 初始化属性this.y = y;}
}// 创建对象:先分配内存,再调用构造方法
Point p = new Point(3, 4);
Python 的对象创建

在 Python 中,对应的流程由__new____init__共同完成

  1. 内存分配__new__方法创建并返回对象实例。
  2. 初始化:若__new__返回的是当前类的实例,则自动调用__init__设置属性。

python

运行

class Point:def __new__(cls, x, y):# 分配内存(默认调用object.__new__)return super().__new__(cls)def __init__(self, x, y):# 初始化属性(对应Java构造方法中的this.x = x)self.x = xself.y = y# 创建对象:先调用__new__,再调用__init__
p = Point(3, 4)

你的类比:是否准确?

JavaPython是否等价?
new Point(3, 4)Point(3, 4)表层语法相似,底层机制不同。
new关键字__new__方法不完全等价:
new是 Java 的关键字;
__new__是 Python 类的可重写方法。
构造方法中的this.x=x__init__中的self.x=x功能等价:都是初始化对象属性。

核心差异

  1. Python 的灵活性
    Python 的__new__允许你:

    • 返回其他类的实例(如单例模式)。
    • 完全绕过__init__(当返回非当前类实例时)。
    • 自定义对象创建逻辑(如元类编程)。

    Java 的new则是固定的语法,无法修改对象创建的底层逻辑。

  2. 隐式调用

    • Java 的new和构造方法必须显式配合使用。
    • Python 的__new____init__由解释器自动调用,通常无需手动干预。

更准确的类比

JavaPython
new关键字分配内存__new__方法分配并返回实例
构造方法(如Point(int x, y)__init__方法初始化属性
this引用当前对象self引用当前对象

总结

你的类比在 “初始化属性” 的层面上是合理的,但需要注意:

  • Java 的new 是一个原子操作(分配内存 + 调用构造方法)。
  • Python 的__new__ + __init__ 是一个可拆分的过程(创建对象和初始化对象分离)。

如果需要更深入控制对象创建(如单例、不可变对象),Python 的__new__提供了比 Java 更灵活的机制。

5 Java 和 Python 的对象创建机制

Java 和 Python 在对象创建时都是分步骤按顺序执行的,但具体机制有所不同:

Java 的对象创建步骤

  1. 内存分配(由new关键字触发)
    • JVM 为对象分配内存空间,初始化为默认值(如int为 0,引用为null)。
  2. 构造方法调用
    • 自动调用类的构造方法,在内存中填充对象的实际属性值(通过this.x = x等操作)。

java

// Java示例
Point p = new Point(3, 4);  // 先分配内存,再调用构造方法

Python 的对象创建步骤

  1. 调用__new__
    • Python 解释器调用类的__new__方法,默认通过super().__new__(cls)创建实例。
  2. 调用__init__(如果__new__返回当前类的实例)
    • __new__返回的是cls的实例,则自动调用__init__初始化属性。

python

运行

# Python示例
p = Point(3, 4)  # 先调用__new__,再调用__init__(如果__new__返回Point实例)

关键区别

特性JavaPython
步骤是否分离?是(分配内存 → 调用构造方法)是(__new__ → __init__
能否跳过初始化?否(必须调用构造方法)是(若__new__返回非当前类实例)
能否自定义内存分配?否(由new关键字固定实现)是(通过重写__new__

总结

  • Javanew操作是原子性的,但底层仍分为内存分配和构造方法调用两个步骤。
  • Python__new____init__可拆分的,允许更灵活的控制(如跳过__init__)。

两者都是顺序执行,而非 “同时进行”。Python 的灵活性源于将创建和初始化拆分为两个独立的方法。

6 java和python会默认实现上述过程吗(python的new和init需要手动写吗?)

在 Python 中,__new____init__都有默认实现,但你可以根据需要手动重写它们。以下是详细说明:

1. 默认实现

  • __new__
    所有类默认继承自object,而object类提供了一个通用的__new__实现。它负责创建并返回类的实例,通常无需手动编写。

  • __init__
    默认的__init__是空方法,不执行任何操作(即接收参数但不设置任何属性)。

python

运行

class Point:pass  # 未显式定义__new__和__init__p = Point(3, 4)  # 可以正常创建实例,但无法存储参数3和4
print(p)  # <__main__.Point object at 0x...>

2. 何时需要手动重写?

重写__init__

当你需要初始化对象的属性时,通常需要重写__init__

python

运行

class Point:def __init__(self, x, y):self.x = xself.y = yp = Point(3, 4)
print(p.x, p.y)  # 3 4
重写__new__

以下场景需要重写__new__

  • 单例模式(确保类只有一个实例):

    python

    运行

    class Singleton:_instance = Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super().__new__(cls)return cls._instance
    
  • 创建不可变对象的子类(如intstr):

    python

    运行

    class PositiveInt(int):def __new__(cls, value):return super().__new__(cls, abs(value))  # 强制为正数num = PositiveInt(-5)
    print(num)  # 5
    
  • 返回其他类的实例(跳过当前类的__init__):

    python

    运行

    class Rectangle:def __init__(self, width, height):self.width = widthself.height = heightclass Square:def __new__(cls, side):return Rectangle(side, side)  # 返回Rectangle实例
    

3. 注意事项

  • __new__必须返回实例
    __new__未返回cls的实例(或其他对象),__init__将不会被调用。

  • __init__不能返回非 None 值
    __init__必须返回None(默认),否则会抛出TypeError

  • 默认实现通常足够
    大多数情况下,使用默认的__new__即可,仅需重写__init__来初始化属性。

总结

方法是否需要手动编写?典型场景
__new__很少需要(默认实现已足够)单例模式、不可变对象子类、自定义对象创建逻辑
__init__经常需要(用于初始化属性)设置对象的初始状态

如果你不确定是否需要重写某个方法,建议先尝试使用默认实现,遇到特定需求时再考虑自定义。

Java 中虽然没有__new____init__这样的显式方法,但对象创建的底层机制也有 “默认行为”,只是实现方式与 Python 不同,且灵活性更低。具体来说:

1. Java 的 “默认内存分配”(类似 Python 的__new__

  • 由 JVM 自动完成,开发者无法像 Python 重写__new__那样自定义内存分配逻辑。
  • 当使用new 类名()时,JVM 会自动执行:
    1. 为对象分配堆内存;
    2. 将内存初始化为默认值(如int为 0,Object引用为null)。
  • 这个过程是黑盒化的,开发者无法干预(除非使用 JNI 等底层技术,但不属于常规开发)。

2. Java 的 “默认初始化”(类似 Python 的__init__

  • 默认构造方法:如果类中没有显式定义构造方法,Java 编译器会自动生成一个无参构造方法(类似 Python 的默认__init__),但这个默认构造方法什么都不做(不会主动初始化属性)。

    java

    class Point {int x;int y;// 编译器自动生成默认构造方法:public Point() {}
    }// 使用时
    Point p = new Point();  // 调用默认构造方法,x和y保持默认值0
    
  • 必须显式定义构造方法才能初始化属性
    与 Python 不同,Java 的默认构造方法不会帮你初始化属性(如x=3, y=4),必须手动定义构造方法才能完成初始化:

    java

    class Point {int x;int y;// 手动定义构造方法(类似重写Python的__init__)public Point(int x, int y) {this.x = x;  // 手动初始化this.y = y;}
    }
    

Java 与 Python 的核心差异

特性JavaPython
内存分配能否自定义?不能(JVM 自动处理,开发者无法干预)能(重写__new__自定义创建逻辑)
默认初始化逻辑?无(默认构造方法不做任何初始化)有(默认__init__不做任何操作,但可重写)
是否必须显式写初始化?是(需手动定义构造方法才能初始化属性)否(可重写__init__,但默认实现足够用)

总结

  • Java 的对象创建过程是高度封装的:内存分配完全由 JVM 控制,默认初始化(默认构造方法)几乎无实际作用,必须手动编写构造方法才能完成属性初始化。
  • Python 的__new____init__则将这两个步骤显式暴露给开发者,允许自定义,灵活性更高。

简单说:Java 的 “默认行为” 是 “不做事”,需要开发者手动补齐;Python 的默认行为是 “能做事”(创建实例、空初始化),开发者按需修改即可。

http://www.xdnf.cn/news/1139671.html

相关文章:

  • .NET Core EFCore零基础快速入门简单使用
  • Ansible AWX 自动化运维
  • 【C语言进阶】内存函数
  • 网络爬虫的介绍
  • Linux C 进程基本操作
  • Linux 进程间通信
  • 计算机网络概述
  • 深入解析Hadoop:机架感知算法与数据放置策略
  • redis中间件
  • 《计算机“十万个为什么”》之什么是 feed 流
  • c++学习之---哈希表的实现(开放定址法和链地址法)
  • Ubuntu FTP服务搭建与配置
  • LVS实验
  • 尚庭公寓----------分页查询
  • 基于MATLAB的极限学习机ELM的数据回归预测方法应用
  • 快速了解网络爬虫
  • 区块链之Casper协议背景、演变发展、运作机制和潜在风险
  • 切比雪夫不等式的理解以及推导【超详细笔记】
  • Python获取网页乱码问题终极解决方案 | Python爬虫编码处理指南
  • VSCode 配置 C# 开发环境完整教程(附效果截图)
  • 透过结构看时间——若思考清洗则表达有力
  • Qt初阶开发:QMediaPlayer的介绍和使用
  • 适配器模式 (Adapter Pattern)
  • 基于MATLAB的极限学习机ELM的数据分类预测方法应用
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十一课——高斯下采样后图像还原的FPGA实现
  • 嵌入式时钟系统
  • 产品经理如何绘制流程图
  • vue中的this.$set
  • Python元组(Tuple)指南
  • FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡