用markdown写文档
今天上午学了go的函数,变量,结构体,切片,还有今天问kimi的问题是我在学习中提出的问题
函数的闭包
- 学习了函数的匿名函数的用法
函数的结构体
-
在学习过程中我了解了type 关键字和struct关键字的用法,
-
type关键字:声明一个新的类型;
struct关键字:用于声明结构体的类型 -
结构体是什么呢,其实就是一种数据类型,里面的数据的类型可以相同也可以是不同的,比如
这里面有字符串类型也有整数类型
今天学习中问题:
Go切片容量和长度有什么区别?
长度(Length)
- 定义:切片的长度是指切片中当前存储的元素数量。
- 获取方式:可以通过内置函数 len() 获取切片的长度。
- 动态变化:长度是动态变化的,当你向切片中添加或删除元素时,长度会相应地增加或减少。
s := []int{1, 2, 3}
fmt.Println(len(s)) // 输出:3,因为切片中有3个元素
容量(Capacity)
- 定义:切片的容量是指切片的底层数组能够容纳的元素数量,即切片可以扩展到的最大长度而不需要重新分配内存。
- 获取方式:可以通过内置函数 cap() 获取切片的容量。
- 静态属性:容量在切片被创建时确定,并且在切片的生命周期内保持不变,除非通过重新分配底层数组(如使用 copy() 函数或直接操作切片)来改变。
s := make([]int, 3, 5)
fmt.Println(cap(s)) // 输出:5,因为切片的容量是5
区别
- 概念上:长度是切片中实际存储的元素数量,而容量是切片能够存储的最大元素数量。
- 操作影响:添加元素到切片中会增加长度,如果长度超过当前容量,则触发扩容,这可能涉及到重新分配底层数组。删除元素会减少长度,但不会减少容量。
- 性能考虑:理解长度和容量对于优化切片操作的性能非常重要,例如,避免频繁的扩容操作可以提高程序的运行效率。
然后是下午学习的内容了,下午主要学了快乐数和两数之和
- 快乐数,我今天只看了两个版本的
class Solution:
def isHappy(self, n: int) -> bool:
record = set()
while True:
n = self.get_sum(n)
if n == 1:
return True
# 如果中间结果重复出现,说明陷入死循环了,该数不是快乐数
if n in record:
return False
else:
record.add(n)
def get_sum(self,n: int) -> int:
new_num = 0
while n:
n, r = divmod(n, 10)
new_num += r ** 2
return new_num
1.第一个问题:def isHappy(self, n: int) -> bool:是什么意思?
- self:这是 Python 类方法中的一个特殊参数,表示类的实例(对象)。它用于访问类的属性和其他方法。在类方法中,self 是第一个参数,且必须显式地写出来。它允许你在方法内部引用类的其他成员。
- n: int:这是函数的第二个参数,表示需要传入一个整数 n。int 是类型注解(Type Hint),表示这个参数应该是整数类型。类型注解在 Python 中是可选的,但它可以帮助代码的可读性,并且可以被一些工具(如类型检查器)用于静态类型检查。
- -> int
这是函数的返回值类型注解,表示这个函数返回一个整数类型的结果。-> int 是可选的,但它同样有助于提高代码的可读性,并且可以让静态类型检查工具(如 mypy)更好地检查代码。
从这个代码中我学到了
n = self.get_sum(n) 的self,在面向对象编程中,self关键字代表类的实例,就是在调用get_sum这个函数