Python核心编程 第2章
命令行选项
-d 提供调试输出 -O 生成优化字节码(产生.pyo文件) -S 启动时不要运行导入地址查询Python路径 -v 详细输出(详细追踪import语句) -m mod 将模块当脚本运行 -Q opt 除法选项 -c cmd 将cmd字符串当Python脚本执行 file 从指定文件运行Python脚本
-d 提供调试输出 -O 生成优化字节码(产生.pyo文件) -S 启动时不要运行导入地址查询Python路径 -v 详细输出(详细追踪import语句) -m mod 将模块当脚本运行 -Q opt 除法选项 -c cmd 将cmd字符串当Python脚本执行 file 从指定文件运行Python脚本
关于调试器的第一个简明提示:总是使用调试器。
调试代码:
#include <math.h>
#include <stdio.h> //size_t
typedef struct meanvar {double mean, var;} meanvar;
meanvar mean_and_var(const double *data){
long double avg = 0,
avg2 = 0;
long double ratio;
size_t count= 0;
for(size_t i=0; !isnan(data[i]); i++){
ratio = count/(count+1);
count ++;
avg *= ratio;
avg2 *= ratio;
avg += data[i]/(count +0.0);
avg2 += pow(data[i], 2)/(count +0.0);
}
return (meanvar){.mean = avg,
.var = avg2 - pow(avg, 2)}; //E[x^2] - E^2[x]
}
int main(){
double d[] = { 34124.75, 34124.48,
34124.90, 34125.31,
34125.05, 34124.98, NAN};
meanvar mv = mean_and_var(d);
printf("mean: %.10g var: %.10g\n", mv.mean, mv.var*6/5.);
double d2[] = { 4.75, 4.48,
4.90, 5.31,
5.05, 4.98, NAN};
mv = mean_and_var(d2);
mv.var *= 6./5;
printf("mean: %.10g var: %.10g\n", mv.mean, mv.var);
}使用CFLAGS="-g -Wall -std=gnu11 -O3" make stddev编译代码,gdb stddev_bugged调试代码。
必须获取的包:
一些省去重复造轮子的C库:
面向对象编程和泛型编程都是处理程序编写时类型未知的情况。两者的区别是面向对象编程直到运行时类型才能知道,而泛型编程类型在编译期间知道。
容器,迭代器和算法都是泛型编程的例子。当编写一个泛型程序,我们用一种独立于任何类型的方式编写代码。当使用一个泛型程序,我们提供程序的实例将操作的类型或值。
用户可以有很多种方式与游戏交互,这一章详细讲解多种输入设备。除了从设备获取信息,我们也要探索如何将用户所做的事情翻译成游戏中有意义的事件。容易交互对任何游戏都至关重要,不管你有多好的外观和声音。