图

Python 入门

   到 2019 年, Python 已经成为最流行的语言, 无论是在科学计算还是在计算机领域都有大量的使用者. 本书中我们主要介绍 python 在科学计算中的应用.

   如果不想安装软件可以直接使用用浏览器访问 Jupyter Notebook 运行 Python 程序, 要在本地使用 Python 推荐安装 Anoconda. 以下我们用前者进行讲解. Jupyter Notebook 的优点是交互式编程, 即每输入一个命令都可以立即执行(快捷键 Shift + Enter), 利于学习和实验.

作为计算器

   请在 Jupyter Notebook 中尝试输入以下命令并执行(运行结果略). Python 程序使用 # 注释一行, 或者用两个 """ 注释多行. 注释是为了辅助人阅读代码, 不会被机器执行.

   四则运算

1
2 + 2
1
123 / 456
幂运算
1
3 ** 2
整数除法, 即相除再向下取整
1
4 // 3
求余
1
4 % 3 # 使得 a == a // b + a % b 恒成立
使用括号
1
(123 - 234*2)**2 / (34 + 54**4)
各种数学函数都在 math 模块中, 需要加载.
1
import math
使用模块中的函数, 要在前面加上模块名和一点. 例如开方 (square root)
1
math.sqrt(284)
自然指数函数
1
math.exp(5.1)
这样做虽然略显麻烦, 但可以区分不同模块中同名函数. 在确保没有冲突的情况下我们也可以用以下方法加载模块中的指定函数, 如
1
from math import sqrt, exp, sin, cos
现在使用这些函数就不需要 math. 的前缀了
1
sin(1)
我们甚至可以用这种方式引入所有函数而无需前缀(但名称冲突的可能性更大, 不建议使用)
1
from math import *
从模块中不仅可以引入函数, 还有常数, 例如圆周率和自然对数底(注意 e 这种单字母名称很可能会产生冲突, 所以不建议取消 math. 前缀)
1
sin(pi/2)
1
log(e)

   math 模块中的其他常用函数如: 绝对值 (absolute value)

1
fabs(-32)
自然对数
1
log(0.5)
以 10 为底的对数
1
log10(1000)
弧度转为角度
1
degrees(pi/2)

变量

   Python 中的变量(variable) 和数学上的不同, Python 的变量可以理解为一个储存数值的容器, 我们可以用等号把一个数值储存在一个变量中. 例如要计算一个长方体的面积, 我们直接把三个数字相乘, 也可以先把这三个数字赋值给三个变量然后相乘

1
2
3
4
a = 1
b = 2
c = 3
volumn = a*b*c
在 Jupyter Notebook 执行这四行发现并没有输出, 无论是一次性执行还是分开执行. 这是因为赋值命令默认不输出结果. 要强制输出结果可以用
1
print(volumn)
或者一次输出多个变量
1
print(a, b, c, volumn)
要强调的是, 这里的等号并不是数学上的等于, 而是赋值, 即把等号右边得到的数值储存在左边的变量中. 在第 4 行执行时, 计算机会先计算等号右边表达式的结果 6, 然后将 6 储存在变量 volumn 中. volumn 这个变量中并不会包含 “a*b*c” 这个信息, 只储存 6 这个数值.

   如果要让长方形的某个边长增加 1, 我们可以执行

1
a = a + 1
如果将等号理解为数学上的等于, 这个式子显然是错的. 但正确的理解是, 先把 a 当前的值(1)加上 1 得到 2, 然后把 2 赋值给 a. 由于我们没有给 volumn 重新赋值, 它仍然是 6, 要更新 volumn, 只需要重新执行
1
volumn = a*b*c
并用 print(volumn) 显示新的值.

   等效地, 我们也可以用自加运算, 将 a = a + 1 记为

1
a += 1
其中 += 是一个整体的算符, 中间不能有空格. 类似的运算还有 -=*=/= 等.

函数

   Python 中的函数与数学中的函数不完全一样, 函数可以有若干个输入变量和输出变量(也可以没有). 下面我们定义一个简单的函数来计算长方形的面积

1
2
3
def f(a, b, c):
    volumn = a*b*c
    return volumn
这段代码用到了两个 Python 的关键字(keyword) defreturn. 关键字是指在程序中有特殊含义的, 不能作为变量名和函数名的名称. 其中 def 用于定义函数, f 是函数名, abc 分别是函数的输入变量(argument). 冒号以后是函数体, 可以有若干行命令. 注意这些命令前面必须有缩进(indentation). 在以上代码中, 函数体的第一行计算面积, 第二行将用关键字 return 将计算的结果作为因变量输出并退出函数.

   现在我们可以使用这个函数, 使用方法和 sinsqrt 等数学函数一样, 只是不同输入变量要用逗号隔开.

1
f(1.2, 3.4, 6)

数组

   我们这里使用 numpy 模块中的数组. numpy 是数值计算中一个常用的模块, 主要用于处理各种数组(或矩阵). 这里介绍另一种 import 的方式

1
import numpy as np
这相当于给 numpy. 指定一个更简单的名字 np., 方便了使用. 你也可以把 np 替换成其他名字. 上文使用 math 模块时也可以使用
1
import numpy as m

   要创建一个一维数组(或者叫做行矢量), 如

1
a = np.array([1, 2, 3])
这个数组有三个元素, 每个元素相当于一个独立的变量. 要获取第 i 个元素的值, 用 a[i], 如
1
a[0]
注意索引 i 从 0 开始而不是 1. 所以第一个元素索引为 0, 第二个索引为 1 等等.

   显示整个数组

1
print(a)
要获取数组的一部分
1
a[1:2]

致读者: 小时物理百科一直以来坚持所有内容免费且不做广告,这导致我们处于日渐严重的亏损状态。长此以往很可能会最终导致我们不得不选择商业化,例如大量广告,内容付费,会员制,甚至被收购。因此,我们鼓起勇气在此请求广大读者热心捐款,使网站得以健康发展。如果看到这条信息的每位读者能慷慨捐助 10 元,我们几天内就能脱离亏损状态,并保证网站能在接下来的一整年里向所有读者继续免费提供优质内容。感谢您的支持。

编辑词条(需要权限) 返回目录 返回主页 捐助项目 © 小时物理百科 保留一切权利