数据分析师不写大型软件,但每天要写几百段小代码:试一个想法、看一眼数据、验证一个猜想。这就要求开发环境必须丝滑。第 2 章讲两件事:IPython/Jupyter 这个驾驶舱怎么开,以及 Python 语言的交通规则。
🚀 IPython:比普通 Python 强在哪?
终端敲 ipython,你看到的提示符从 >>> 变成 In [1]:——从此你的代码有了编号记忆。最日常的三个加速器:
① Tab 补全。敲 an_ 按 Tab,自动列出 an_apple、an_example;对象后按 Tab 能列出所有属性和方法。这个习惯能把「拼错函数名」这类低级错误从你的人生里抹掉。
② 内省(Introspection):问号是你的百科全书:
b = [1, 2, 3]
b? # 显示对象的类型、内容、docstring
print? # 显示函数签名 + 文档
b.append?? # 两个问号直接看源码(如果是 Python 写的)
③ %run 与魔法命令。%run ipython_script_test.py 把脚本跑进当前命名空间,变量直接可用。所有魔法命令都以 % 开头,几个最常用的:
| 命令 | 作用 |
|---|---|
%timeit statement |
重复执行测平均耗时(后面测 NumPy 性能全靠它) |
%time statement |
单次执行计时 |
%pwd / %ls |
直接用 shell 命令 |
%magic / %lsmagic |
查看全部魔法命令 |
④ Jupyter Notebook:浏览器里的「文学编程」环境,代码块(cell)+ Markdown 笔记 + 内嵌图表,jupyter notebook 一敲就起。中断卡死的内核用 Kernel 菜单或 Ctrl+C,推荐的工作流是:小 cell 写、随手 Shift+Enter 跑、结果立刻看。
📏 语言语义:四条交通规则
缩进即语法。Python 用 4 空格缩进表达代码块,没有大括号。这不是风格偏好,是语法本身:
for x in array:
if x < 0:
print("负数")
else:
print("非负数")
一切皆对象。数字、字符串、函数、模块——每个值背后都是一个对象,带属性和方法。a.attr 读属性、a.method() 调方法,通用于万物。
变量是标签,不是盒子。这是 Python 最容易被误解的一点:赋值是给对象贴引用,不是把值拷进变量:
a = [1, 2, 3]
b = a # b 和 a 指向同一个列表!
b.append(4)
a # [1, 2, 3, 4] —— a 也变了
⚠️ 所以传参、赋值都要留个心眼:想独立一份就显式 list(a) 或 a.copy()。
动态引用 + 强类型。变量不用声明类型(动态),但 1 + "1" 会直接报错(强),不会偷偷帮你转。需要时显式转换:str(1)、int("5")。
🔢 标量类型:数字、字符串与 None
ival = 12345678 # int:任意精度,不怕溢出
fval = 4.5e-5 # float:双精度浮点
s = "数据分析" # str:Unicode 字符串
s.upper() # 方法返回新对象(字符串不可变)
None # 空值占位,函数默认返回值
字符串三连击必须会:format 格式化、切片、转义:
"{0:.2f} 元, {1} 件".format(3.14159, 5) # '3.14 元, 5 件'
s = "abcdef"
s[1:4] # 'bcd',左闭右开
s[::-1] # 'fedcba',反向
时间类型书里一笔带过但很重要:datetime.datetime.now(),后面第 11 章时间序列会全面展开。
🔀 控制流:if / for / while 速览
# 三元表达式:一行 if
x = 5
"正" if x > 0 else "非正"
# for 遍历任意可迭代对象
for i, v in enumerate(["a", "b"]): # 同时要下标和值
print(i, v)
a, b = 0, 1 # 多重赋值
a, b = b, a + b # 不用临时变量交换(Python 名场面)
range(n) 生成整数序列(惰性、省内存),配合 list(range(0, 20, 2)) 得 [0, 2, 4, ..., 18]。break 跳出循环、continue 跳过本轮、pass 占位什么都不做——三板斧齐了。
📌 本章小结:IPython 的 Tab 补全和
?内省每天用;%timeit是性能测量的标尺;变量是引用不是盒子(b = a之后改 b 会影响 a);缩进即语法、一切皆对象;字符串不可变,方法返回新对象。