一、今日完成的任务
- 字符串拼接
- f-string和join方法拼接的区别
- 创建表格的markdown语言
- 可迭代对象
- len( )计算字符串长度
- 用索引取字符串里的单个字符
- dir(对象)可以查看该对象的属性和方法等
- python的比较运算
- Python 中 bool 是 int 的子类
- 字符串是不可变对象
- append和__add__( )两个方法的区别
今日学习用时2.5小时
二、学到的东西
- 三种方法拼接字符串
(1) 使用 “+” 运算符
str1 = 'Hello'
str2 = 'Python'
greeting = str1 + ' '+ str2
print(greeting)
(2) 使用f-string
greeting1 = f'{str1} {str2}'
print(greeting1)
(3) join方法
先在单引号里打上分隔符(比如说这里用的空格,你喜欢的话也可以用”🐱“ ^_^ ),然后join后面括号里的参数,必须是可迭代对象(下面有介绍可迭代对象)
greeting2 = ' '.join([str1,str2])
- 计算字符串长度和单个取出字符串里的字符
len( )计算长度,用索引取单个字符
length = len(greeting)
first_char = greeting[0]
last_char = greeting[-1]
print(f'字符串长度{length}\n第一个字符:{first_char}\n最后一个字符:{last_char}')
输出:

最后一个字符的索引是“-1”
3.可迭代对象
join的参数必须是可迭代对象
网上有很多定义看不懂。我总结的:
可以被逐个以相同方式取出来的,类型相同的聚合类型,就是可迭代对象,包括元组、列表、字符串中的每一个字符。
进一步,如果更严谨,要注意:
①逐个取出来的东西,不一定类型完全相同,比如 [1, “hi”, True] 也是 list列表
重点是能逐个被取出,并在操作时一致对待
②可以使用for遍历的都是可迭代对象
③整数和浮点数不是容器,没法逐个取。人话就是它不是一个装了很多东西的袋子,没法一个一个掏东西出来。
- python的比较运算
直接用比较运算符的结果就是布尔类型(bool)
score_a = 75
score_b = 90
is_a_higher = score_a > score_b
is_a_lower_or_equal = score_a <= score_b
is_different = score_a != score_b
print(f'''{score_a} 是否大于 {score_b}:{is_a_higher}
{score_a} 是否小于等于{score_b}:{is_a_lower_or_equal}
{score_a} 是否不等于{score_b}:{is_different}''')
输出结果:

ps:True 和 False 本质上其实是数字!这是因为 Python 中 bool 是 int 的子类,便于逻辑判断和数值运算融合~
print(int(True)) # 输出 1
print(int(False)) # 输出 0
三、明日学习计划
- 列表的基础操作
- for循环语句
- 东西写太多了,下次搞个目录
@浙大疏锦行
四、补充(放上面就显得很乱
- 字符串可以用索引取值,背后与list列表的关系
①首先,字符串像 list,但不是 list。
字符串行为上类似列表,比如可以:
用索引取值 s[0];
用切片 s[1:3];
用 len(s) 得长度;
用 for 循环遍历字符
但字符串里单个字符是不可变的(下面第三条讲为什么)。你不可以写:
greeting[0] = "H" # ❌ 报错!
人话:你不能给已有的字符串单个字符赋值,只能查看单个字符是啥
②其次,在 Python 中,字符串实现了序列协议(Sequence Protocol),只要实现了 getitem(支持索引)和 len(支持长度),就可以像 list 一样访问。
greeting[0] 其实底层调用了 greeting.__getitem__(0)
- 啥是dir( )。和字典dict( )没关系
dir() 是一个 内置函数,用来“查看某个对象能做什么

举个例子:
s = "hello"
print(dir(s))
会输出一大堆:
['__add__', '__class__', '__contains__', '__getitem__', 'capitalize', 'center', 'count', ...]
dir( )和dict( )的区别:

3. 字符串是不可变对象
你不能给已有的字符串单个字符赋值,你只能查看单个字符,因为字符串是不可变对象!
字符串和元组tuple都不可变,列表、字典和集合是可变的

例如,
t = (1, 2, 3)
t[0] = 10 # ❌ 报错:'tuple' object does not support item assignment
But,虽然 tuple 自己不能改内容,但如果你塞进它的东西本身是可变的,它是不会拦着你的!
t = ([1, 2], 3)
t[0].append(999) # ✅ 合法哦!
print(t) # 输出:([1, 2, 999], 3)
因为 tuple 的“不变”指的是它的结构不变,但内部可变对象的内容变了,它不管!
- append和__add__( )两个方法的区别
人话:
append是你自己手动调用的方法;
add()是系统里自己赋予“+”的行为方法,你用“+”,就是调用的__add__()。
例子:
a = [1, 2]
b = [3, 4]
# 系统自动调用 __add__()
c = a + b # 等价于 a.__add__(b)
# 你手动调用 append
a.append(99) # 把 99 加进 a 本身,不会生成新列表
- f-string和join方法拼接的区别
join在面对批量要拼接的字符串时,速度快很多
比如说,拼接 10000 个字符串:
import time
words = ["word"] * 10000
# 方法一:join
start = time.time()
"".join(words)
print("join耗时:", time.time() - start)
# 方法二:f-string 逐个拼接
start = time.time()
s = ""
for w in words:
s += f"{w}"
print("f-string耗时:", time.time() - start)
结果:

原因:
| 特性 | join | f-string |
|---|---|---|
| 内存分配效率 | 一次性预估总长度、集中分配内存 | 每次拼接都创建新字符串(旧的被丢弃) |
| 底层机制 | 内部用 C 实现,高效 | Python 层循环+字符串复制,非常慢 |
| 场景适配 | 列表拼接、高性能需求 | 少量变量拼接、结构清晰 |

7604

被折叠的 条评论
为什么被折叠?



