f-string和sz
f"{sid}_KP_{sample_ids.index(sid)+1}"
是 Python 的格式化字符串写法,叫做 f-string(full name: formatted string literals),是 Python 3.6+ 引入的一种 更简洁高效的字符串拼接方式。
✅ 一、这段代码含义拆解
f"{sid}_KP_{sample_ids.index(sid)+1}"
假设:
sid = "sampleA"
sample_ids = ["sampleA", "sampleB", "sampleC"]
执行逻辑:
sample_ids.index(sid)
会找到"sampleA"
在列表中的索引(是 0)+1
让编号从 1 开始,而不是 0- 所以这个格式化字符串的结果是:
"sampleA_KP_1"
也就是说,它把 sid
和编号拼成一个唯一的标签名或样本名。
🧩 二、f-string 的基本用法
1. 基本变量插入
name = "Alice"
f"Hello, {name}!" # 输出: Hello, Alice!
2. 表达式计算
a = 3
b = 4
f"{a} + {b} = {a + b}" # 输出: 3 + 4 = 7
3. 调用函数
import math
f"π is roughly {math.pi:.2f}" # 输出: π is roughly 3.14
4. 字符串方法/切片
s = "HELLO"
f"{s.lower()} world" # 输出: hello world
🎯 三、f-string vs 其他格式化方法
方法 | 示例 | 推荐程度 |
---|---|---|
% 格式化 |
"Hello, %s" % name |
❌ 老旧,不推荐 |
str.format() |
"Hello, {}".format(name) |
✅ 可用,但不够简洁 |
f-string |
f"Hello, {name}" |
✅✅ 强烈推荐,直观高效 |
🔥 四、常用技巧总结
操作 | 示例 | 说明 |
---|---|---|
数字格式化 | f"{x:.2f}" |
保留两位小数 |
填充对齐 | f"{x:>10}" |
右对齐10宽度 |
0填充编号 | f"{i:03}" |
如 001 , 002 , … |
带表达式 | f"{lst.index(val)+1}" |
执行列表操作 |
多变量拼接 | f"{prefix}_{id}_{i}" |
多元素拼接 |
✅ 小结
f"{...}"
是 Python 推荐的现代字符串拼接方式。- 可以内嵌变量、表达式、函数调用。
- 写法简洁、执行效率高、易读性强。
在 Python 中,可以使用内置函数和关键字查看、添加、删除变量。下面是 系统地整理出的一些常用操作方法:
🔍 一、查看当前所有变量信息
1. 使用 globals()
和 locals()
globals()
:查看全局作用域变量(通常用于模块或脚本顶层)locals()
:查看当前局部作用域变量(比如函数内部)
a = 10
b = "hello"
print(globals()) # 返回一个包含所有全局变量的字典
print(locals()) # 在脚本中与 globals() 相同
你可以用:
for name, value in globals().items():
print(f"{name} = {value}")
2. 使用 dir()
查看变量名(不包括值)
dir() # 返回当前作用域下的所有名称(变量、函数、模块等)
➕ 二、新增变量
1. 直接赋值
x = 123
name = "Nathan"
2. 动态添加(使用 globals()
)
globals()["new_var"] = 456
print(new_var) # 输出 456
适用于需要用字符串构建变量名的情况。
➖ 三、删除变量
1. 使用 del
x = 100
del x # 删除变量 x
2. 批量删除(配合 globals()
或 locals()
)
for var in ["a", "b", "c"]:
if var in globals():
del globals()[var]
⚠️ 注意事项
- 使用
globals()
改动变量是危险操作,慎用在函数内部。 - 删除变量后再访问会抛出
NameError
。 dir()
会显示所有名称,包括内置名称和导入的模块。- 如果在函数里查看变量,
locals()
才是真正有效的局部变量表。
🧪 示例:完整流程演示
a = 1
b = 2
globals()["c"] = 3
print("所有变量名:", dir())
print("变量和值:")
for k, v in globals().items():
if not k.startswith("__"):
print(f"{k}: {v}")
del a
print("删除 a 后:", "a" in globals()) # False
sZ
是基于 ZMODEM 协议的传输命令,通常用于从远程服务器将文件发送到本地终端(如 MobaXterm、SecureCRT、iTerm2)。但它不是一个实时查看图像的工具,而是一个“文件下载工具”。不过你可以通过它将生成的图像(如 UMAP 图)传输到本地并立刻打开查看。
✅ 用 sz
命令查看图像的正确方式
步骤 1:确认你使用的是支持 ZMODEM 的终端
你需要确保你的终端支持 ZMODEM 文件接收功能,常见支持终端:
终端 | 是否支持 ZMODEM |
---|---|
MobaXterm (Windows) | ✅ 支持 |
SecureCRT (Windows/macOS) | ✅ 支持 |
iTerm2 + lrzsz (macOS) | ✅ 支持 |
普通 Linux 终端 + tmux/ssh | ❌ 不支持,需安装配套工具 |
步骤 2:定位你生成的图像文件
默认图像文件通过如下代码保存:
sc.pl.umap(adata, color=["leiden"], save="_clusters.png")
这将在当前工作目录下生成一个名为 figures/umap_clusters.png
的图像文件。
步骤 3:用 sz
命令传输图像
sz figures/umap_clusters.png
这会触发终端弹窗,提示你是否接收文件,点击“接收”即可。
步骤 4:在本地打开图像
接收后图像会保存在你终端默认的下载目录中(例如 MobaXterm 的 “Downloads” 文件夹),你可以直接点击打开查看 UMAP 聚类图。
📌 小贴士
-
多图打包下载:
tar czf umap_figures.tar.gz figures/ sz umap_figures.tar.gz
-
如果你使用的是
Jupyter Notebook
,也可以直接内嵌查看:from IPython.display import Image Image(filename="figures/umap_clusters.png")
❗ 注意事项
-
sz
无法用于实时传输图像帧(比如视频流、动态图等) -
如果图像未保存或保存路径不对,
sz
无法找到对应文件 -
如果你的远程服务器没有安装
lrzsz
,需要先安装:sudo apt install lrzsz # Debian/Ubuntu sudo yum install lrzsz # CentOS/RHEL
在使用 nano
文本编辑器时,以下是一些常用的快捷键操作(特别是与整行操作、行尾、行首相关的):
🧹 基本快捷键导航
操作 | 快捷键 |
---|---|
移动到行首 | Ctrl + A |
移动到行尾 | Ctrl + E |
向上滚动一页 | Ctrl + Y |
向下滚动一页 | Ctrl + V |
跳转到某一行 | Ctrl + _ 然后输入行号后回车 |
🧾 文本编辑快捷键
操作 | 快捷键 |
---|---|
剪切整行 | Ctrl + K |
粘贴 | Ctrl + U |
复制标记区域(需要先设置标记) | Alt + 6 |
删除字符 | Ctrl + D (删除光标处字符) |
回退(Undo) | Alt + U |
重做(Redo) | Alt + E |
搜索字符串 | Ctrl + W |
替换字符串 | Ctrl + \\ (也可按提示替换) |
🧷 标记与选中
操作 | 快捷键 |
---|---|
开始/取消标记文本(选区) | Ctrl + ^ (按一次开始,再按一次取消) |
提示:标记后可以用
Ctrl + K
删除,或者Alt + 6
复制,再用Ctrl + U
粘贴。
🔚 行操作相关总结
- 整行删除(剪切):
Ctrl + K
- 行尾定位:
Ctrl + E
- 行首定位:
Ctrl + A
- 粘贴被剪切的行:
Ctrl + U
💡 小技巧
-
nano 启动时带行号:
nano -c filename
-
使用
.nanorc
启用持久设置:在
~/.nanorc
中添加:set linenumbers set mouse