1. 第一条 Python 代码
但是在 .py 脚本中:1+2一般不会显示任何东西,需要print(1 + 2)这是 Notebook 和脚本之间一个很基础但很重要的区别。
2. Python 的赋值
3. Python 变量不需要提前声明类型
length = 19149type(length)
Python 和 R 一样,属于动态类型语言。
你不需要像 C/C++ 那样:
int length = 19149;
也不需要:
int length
4. 最常见的 5 个基础类型
5. int:整数
chr_num = 17gene_lenth = 19149read_length = 150type(read_length)
6. float:小数
gc_content = 0.417coverage = 32.5type(gc_content)
7. int 和 float 的运算
/永远是普通除法
//整除
8. %:取余数
结果为0,说明可以完整分成codon
length = 999length % 3 == 0
9. **:乘方
10. str:字符串
gene = ”TP53”sequence = ”ATGCGTACGT”chromosome = ”chr17”type(sequence)
11. 单引号和双引号
python中单引号和双引号基本一样,建议初期统一使用"TP53",视觉上比较清晰。
gene = ”TP53”gene = 'TP53'
12. 字符串和数字完全不同
13. 类型转换
x = ”100”x = int(x)type(x)
coverage = ”32.5”coverage = float(coverage)print(coverage)
14. bool:布尔值
必须严格要求大小写
15. 比较运算
常用:
< = <= == !=
16. and、or、not
R:& | !
Python 常见:and or not
gc > 0.5 and length > 1000
gene == ”TP53” or gene == ”BRCA1”
17. None
Python 有一个特殊值:None
gene_name = Nonetype(gene_name)
Python 的 None 常用于表示“暂无结果”或“缺失对象”。
18. 如何检查 None
虽然有些情况下gene_name == None也能运行,但 Python 社区推荐:
19. 一个非常重要的 Python 思想:对象
传统入门教材经常说:
创建一个叫 gene 的盒子,把 TP53 放进去。
这个模型初期勉强能用,但很快会误导你。
更准确的理解是:
gene ───────→ "TP53"
也就是说:
· "TP53" 是一个对象
· gene 是一个名字
· gene 指向 "TP53"
再比如:
20. 为什么这个概念重要?
因为你可以
此时可以理解为:
x ──→ 100 ↑ y ─────┘
现在看起来没什么特别
但到了list:
事情就会非常有意思。我们下一课/之后讲 list 时会发现:
a竟然也会变成:[1, 2, 3, 4]
所以现在先埋下一个概念:
Python 中变量更准确地说是“名字绑定到对象”。
这个观念以后特别重要。
21. Python 是大小写敏感的
gene = ”TP53”Gene = ”EGFR”gene is Gene
22. Python 变量命名
推荐:
gene_name read_length gc_content sample_id
这种风格叫:
snake_case
Python 通常推荐这种命名方式。
23. 不建议这样命名
例如:
x = 100 y = 0.5 z = "TP53"
临时计算可以。
但科研代码最好:
read_length = 100 gc_content = 0.5 gene_name = "TP53"
三个月之后你会感谢自己。
24. 不要覆盖 Python 内置函数
比如这些名字尽量别当变量:
list str int sum min max type
例如:
sum = 100
技术上可以。
但是之后:
sum([1, 2, 3])
就可能出问题,因为你把 Python 自己的 sum() 覆盖了。
推荐:
total = 100
25. 注释
# This is a comment# TP53 is located on chromosome 17gene = ”TP53”chromosome = ”chr17”
26. Python 不需要分号
R:
x <- 10 y <- 20
Python:
x = 10 y = 20
通常不写:
x = 10;
虽然 Python 某些情况下允许,但不推荐。
27. 一个真实一点的 genomics 示例
假设我们有一个 genomic region:
gene = ”TP53”chrom = ”chr17”start = 7661779end = 7687550strand = ”-”
计算长度
length = end - start + 1print(length)
28. f-string:现代 Python 非常推荐
gene = ”TP53”length = 25772
print(f”{gene} length is {length} bp”)
这种写法叫:
以后科研脚本中会非常常用。
sample = ”sample01”reads = 1234567print(f”{sample}: {reads} reads”)
比下面的代码优雅
print(sample + ”: ” + str(reads) + ” reads”)
29. 一个你以后会频繁用的工具:type()
任何时候不知道对象是什么类型:type(...)
is_valid = Truetype(is_valid)
30. 另一个很好用的工具:len()
31. 第一段真正的 DNA Python
seq = ”ATGCGCGTAA”length = len(seq)a_count = seq.count(”A”)c_count = seq.count(”C”)g_count = seq.count(”G”)t_count = seq.count(”T”)gc_content = (g_count + c_count) / length
print(f”Sequence length: {length}”)print(f”A: {a_count}”)print(f”C: {c_count}”)print(f”G: {g_count}”)print(f”T: {t_count}”)print(f”GC content: {gc_content}”)
32. 让 GC content 显示为百分比
gc_content = 0.6print(f”GC content: {gc_content:.2%}”)
这里,:.2%表示百分比形式,保留两位小数。
33.R → Python 对照总结
| | |
|---|
| x <- 10 | x = 10 |
| print(x) | print(x) |
| "TP53" | "TP53" |
| TRUE | True |
| x == 10 | x == 10 |
| x != 10 | x != 10 |
| 2^3 | 2**3 |
| nchar(x) | len(x) |
| class(x) | type(x) |
| NA | None |
34. 这一课最重要的 8 个知识点
你今天最好真正记住的是:
=
赋值。
int float str bool None
type()
len()
==
/
%
name → object
最后这一条短期看不重要,但后面会越来越重要。
36. 小练习
Exercise 1:变量
定义下面几个变量:
gene: BRCA1 chromosome: chr17 start: 43044295 end: 43170245 strand: -
然后分别用:
type()
检查类型。
gene = ”BRCA1”chromosome = ”chr17”start = 43044295end = 43170245