第一部分 起步 3
第1章 命令行简介 3
1.1 Shell概览 3
1.1.1 Shell是一款编程语言 4
1.1.2路径和pwd 5
1.1.3主目录(~) 7
1.1.4列出内容(ls) 8
1.1.5更改目录(cd) 9
1.1.6查看文件内容(head和tail命令) 12
1.2操作文件和目录 12
1.2.1创建文件(nano、emacs、vi、 cat、>和touch) 12
1.2.2复制和重命名文件(cp和mv) 17
1.2.3创建目录(mkdir) 18
1.2.4删除文件和目录(rm) 19
1.2.5标志和通配符 21
1.3获取帮助 22
1.3.1阅读程序手册(man) 22
1.3.2找到正确的工具(apropos) 24
1.3.3用重定向和管道组合多个实用程序(>、>>和|) 25
1.4权限和共享 26
1.4.1查看权限(ls-l) 27
1.4.2设置所有权 28
1.4.3设置权限(chmod) 29
1.4.4创建链接(ln) 29
1.4.5连接其他计算机(ssh和scp) 30
1.5环境 31
1.5.1保存环境变量(.bashrc) 33
1.5.2运行程序(PATH) 34
1.5.3别名命令(alias) 35
1.6使用bash编写脚本 36
1.7本章小结 38
第2章Python编程起步 39
2.1运行Python 40
2.2注释 41
2.3变量 42
2.4特殊变量 44
2.4.1布尔值 44
2.4.2 None不是0 ! 45
2.4.3 NotImplemented不是None! 45
2.5操作符 45
2.6字符串 49
2.6.1字符串索引 50
2.6.2字符串连接 52
2.6.3字符串字面值 53
2.6.4字符串方法 55
2.7模块 56
2.7.1导入模块 56
2.7.2从模块中导入变量 57
2.7.3别名导入 58
2.7.4导入变量别名 58
2.7.5包 59
2.7.6标准库和Python生态系统 61
2.8本章小结 62
第3章 基本容器 63
3.1列表 64
3.2元组 68
3.3集合 69
3.4字典 71
3.5本章小结 73
第4章 流程控制和逻辑运算 75
4.1条件语句 75
4.1.1 if-else语句 78
4.1.2 if-elif-else语句 79
4.1.3 if-else表达式 80
4.2异常 80
4.3循环 83
4.3.1 while循环 83
4.3.2 for循环 85
4.3.3解析式 87
4.4本章小结 90
第5章 使用函数 91
5.1 Python中的函数 91
5.2关键字参数 94
5.3变长参数 96
5.4多返回值 98
5.5作用域 99
5.6递归 102
5.7 lambda 103
5.8生成器 104
5.9装饰器 107
5.10本章小结 110
第6章 类和对象 112
6.1面向对象 112
6.2对象 113
6.3类 117
6.3.1类变量 118
6.3.2实例变量 120
6.3.3构造器 121
6.3.4方法 123
6.3.5静态方法 126
6.3.6鸭子类型 127
6.3.7多态 128
6.4装饰器和元类 132
6.5本章小结 134
第二部分 上手 139
第7章 分析和可视化 139
7.1准备数据 139
7.1.1实验数据 143
7.1.2模拟数据 144
7.1.3元数据 145
7.2载入数据 145
7.2.1 NumPy 146
7.2.2 PyTables 147
7.2.3 Pandas 147
7.2.4 Blaze 148
7.3清理和改写数据 149
7.4分析 153
7.4.1模型驱动的分析 154
7.4.2数据驱动的分析 155
7.5可视化 156
7.5.1可视化工具 157
7.5.2 gnuplot 158
7.5.3 matplotlib 160
7.5.4 Bokeh 165
7.5.5 Inkscape 167
7.6本章小结 167
第8章 正则表达式 169
8.1示例:杂乱的磁性 170
8.2命令行中的元字符 171
8.2.1用简单的模式列出文件 172
8.2.2根据模式全局查找文件名(find) 173
8.3 grep、 sed、 awk 179
8.4在文件中查找模式(grep) 179
8.5在文件中查找和替换(sed) 181
8.5.1查找和替换复杂模式 183
8.5.2 sed额外内容 184
8.6处理数据列(awk) 186
8.7 Python正则表达式 188
8.8本章小结 190
第9章NumPy:以数组的形式思考 192
9.1数组 193
9.2 dtype 195
9.3切片和视图 198
9.4算术和广播 200
9.5花式索引 204
9.6掩模 206
9.7结构数组 209
9.8通用函数 211
9.9其他有用的函数 213
9.10本章小结 215
第10章 数据存储:文件和HDF5 216
10.1 Python中的文件 217
10.2关于计算机架构的一些说明 221
10.3 HDF5中的重要思想 223
10.4文件处理 225
10.5层次布局 227
10.6分块 229
10.7核内和核外操作 233
10.7.1核内 233
10.7.2核外 234
10.8查询 235
10.9压缩 236
10.10 HDF5工具 237
10.11本章小结 239
第11章 物理中重要的数据结构 240
11.1散列表 240
11.1.1调整大小 242
11.1.2冲突 243
11.2数据框 245
11.2.1 Series 246
11.2.2 DataFrame结构 247
11.3 B树 250
11.4 k-d树 252
11.5本章小结 256
第12章 并行化执行 258
12.1规模和扩展能力 259
12.2问题分类 261
12.3示例:N体问题 262
12.4非并行 263
12.5线程 267
12.6多处理 273
12.7 MPI 276
12.8本章小结 281
第13章 软件部署 283
13.1部署软件本身 284
13.1.1 pip 285
13.1.2 Conda 289
13.1.3虚拟机 292
13.1.4 Docker 293
13.2部署到云端 297
13.3在超算上部署 299
13.4本章小结 300
第3部分 完善 305
第14章 构建流程和软件 305
14.1 make 306
14.1.1运行make 308
14.1.2 makefile 308
14.1.3目标 309
14.1.4特殊目标 311
14.2构建和运行软件 312
14.2.1 Makefile配置 313
14.2.2编译 316
14.3安装 316
14.4本章小结 317
第15章 本地版本控制 318
15.1什么是版本控制 318
15.1.1计算物理中的实验室笔记本 319
15.1.2版本控制工具的类型 320
15.2 Git起步 320
15.2.1安装Git 321
15.2.2获取帮助 321
15.2.3控制Git的行为(git config) 322
15.3使用Git进行本地版本控制 323
15.3.1创建本地库(git init) 323
15.3.2暂存文件 325
15.3.3检查本地副本的状态(git status) 326
15.3.4保存快照(git commit) 326
15.3.5 git log:查看历史 329
15.3.6查看改动(git diff) 329
15.3.7取消暂存或回滚文件(git reset) 330
15.3.8丢弃提交(git revert) 331
15.3.9列出、创建、删除分支(git branch) 332
15.3.10切换分支(git checkout) 334
15.3.11合并分支(git merge) 334
15.3.12处理冲突 336
15.4本章小结 336
第16章 远程版本控制 337
16.1代码托管(github.com) 337
16.2在GitHub上创建代码库 339
16.3声明远程库(git remote) 339
16.4向远程库发送提交(git push) 340
16.5下载代码库(git clone) 341
16.6从远程库获取内容(git fetch) 344
16.7合并远程库的内容(git merge) 345
16.8 Pull等于Fetch加Merge(git pull) 345
16.9冲突 346
16.10解决冲突 347
16.11本章小结 348
第17章 调试 350
17.1遇到一个错误 351
17.2 print语句 352
17.3交互式调试 354
17.4在Pythong中调试(pdb) 355
17.4.1设置跟踪点 356
17.4.2步进 357
17.4.3查询变量 358
17.4.4设置状态 358
17.4.5运行函数和方法 359
17.4.6继续执行 359
17.4.7断点 360
17.5剖析 360
17.5.1使用pstats查看剖析文件 361
17.5.2可视化查看剖析信息 361
17.5.3使用Kernprof剖析代码 364
17.6 linting 365
17.7本章小结 366
第18章 测试 368
18.1为什么要做测试 369
18.2什么情况下要写测试 369
18.3在哪里编写测试 370
18.4如何测试?测试哪些内容 370
18.5运行测试 373
18.6边界情形 374
18.7单元测试 376
18.8集成测试 378
18.9回归测试 380
18.10测试生成器 380
18.11测试覆盖 382
18.12测试驱动开发 383
18.13本章小结 386
第4部分 发布 389
第19章 文档 389
19.1为什么文档很重要 389
19.1.1文档非常有价值 390
19.1.2编写文档比想象的要简单 390
19.2文档类型 391
19.2.1理论手册 391
19.2.2用户和开发者指南 392
19.2.3 readme文件 392
19.2.4注释 393
19.2.5自文档代码 395
19.2.6文档字符串 396
19.3自动化 397
19.4本章小结 401
第20章 出版 402
20.1文档处理 403
20.1.1格式和内容分离 403
20.1.2跟踪改动 404
20.2文本编辑器 404
20.3标记语言 405
20.3.1 LaTeX 406
20.3.2参考文献 416
20.4本章小结 419
第21章 协作 421
21.1任务单系统 422
21.1.1工作流程概览 422
21.1.2创建问题 424
21.1.3分配问题 425
21.1.4讨论问题 426
21.1.5关闭问题 427
21.2拉取请求和代码审查 427
21.2.1提交拉取请求 428
21.2.2审查合并请求 428
21.2.3合并拉取请求 429
21.3本章小结 429
第22章 许可证、所有权和版权 430
22.1哪些内容可赋予版权 431
22.2首次发布权 431
22.3什么是公共领域 432
22.4选择一个软件许可证 432
22.5伯克利软件发布许可证(BSD) 434
22.6 GNU General PublicLicense (GPL) 436
22.7知识共享(CC) 437
22.8其他许可证 438
22.9更换许可证 440
22.10版权不是一切 441
22.11本章小结 442
第23章 关于计算物理进一步思考 443
术语 447