有理数、整数和分数的关系是继承关系吗?

yangyi_2009 2015-03-15 10:15:15
数学上有理数可以分为整数和分数,都能进行加法运算。如何表示这种关系?

0.
分数继承自整数肯定是不对的。
分数代入 整数.加(整数, 整数) 方法进行运算,明显违反里氏代换原则。

1.
有理数作为父类,整数和分数分别继承自有理数。
为整数类实现方法 整数.加(整数, 整数);
为分数类实现方法 分数.加(分数, 分数);
现要实现有理数加法 有理数.加(有理数, 有理数),
当然就包括 加(整数, 分数)这种情况,
如果在 有理数.加 方法里进行类型判断,
就导致父类耦合子类的问题了。

2.
有理数作为联合体,作为整数和分数的包装。
分数类有属性 分子、分母,而整数没有,
有理数类里要不要实现属性 分子、分母呢?
如果实现那么就可以访问整数的“分子、分母”,从而引发混乱。
(或者类似于F#的“可区分联合”?)
...全文
312 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-03-16
  • 打赏
  • 举报
回复
如果你把整数和分数对立起来看,那就变成白马非马了 你硬要把白马和马看成是2个物种,然后它们都是哺乳动物,那么白马和马之间要做运算,当然就会很混乱
於黾 2015-03-16
  • 打赏
  • 举报
回复
理论上来说,任何有理数都能用分数表示,所以分数就是有理数 分数是有限小数或无限循环小数,有理数的定义也是有限小数或无限循环小数(整数是特殊的小数,小数点后为0的小数) 而无限不循环小数则属于无理数范畴
於黾 2015-03-16
  • 打赏
  • 举报
回复
我觉得你是从数学上进行抽象的时候就不对,导致用程序实现的时候也很混乱 整数和分数是毫无关系的2个类型? 明明分数就是有理数,而整数不过是一种特殊的分数(分子能够整除分母的分数)
threenewbee 2015-03-15
  • 打赏
  • 举报
回复
从逻辑上说,包含/子集的关系可以用继承表示,但是从实现上说,这样做有没有必要,性能上是否太低则是需要考虑的。 就好比从逻辑上说,没有必要有字符串这种类型,字符串就是数组,甚至没有必要有数组这种类型,数组就是以自然数为下标的字典。但是任何编程语言都有字符串这种特异化的类型。
yangyi_2009 2015-03-15
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
abstract class 有理数
{
    public abstract 有理数 Plus(有理数 x);
}

class 整数 : 有理数
{

    public override 有理数 Plus(有理数 x)
    {
        throw new NotImplementedException();
    }
}

class 分数 : 有理数
{

    public override 有理数 Plus(有理数 x)
    {
        throw new NotImplementedException();
    }
}
我一开始是想搞成运算符(静态方法)的,

class Integer : Rational
{
     public static Integer operator +(Integer left, Integer right)
}

class Fraction: Rational
{
     public static Fraction operator +(Fraction left, Fraction right)
}

abstract class Rational
{
    public static Rational operator +(Rational left, Rational right)
        {
            if (left is Integer && right is Integer)
                return (Integer)left + (Integer)right;
            else if (
                (left is Fraction && right is Integer) ||
                (left is Integer && right is Fraction) ||
                (left is Fraction && right is Fraction)
                )
                return ((Fraction)left + (Fraction)right).Normalize();
            else
                throw new ArithmeticException("未知的类型");
        }
}
结果是有理数的方法里要判断类型,父类耦合子类。 关键问题是整数和分数的具体运算实现是不一样的, 就要能判断一个有理数是整数还是分数。 如果用您的方法, 整数加分数这种情况,.Plus(有理数 x) 方法里还是要判断x是整数还是分数。 整数类耦合分数类了。 而且分数+分数可能是整数,就有类型转换的问题。 分数.Plus(有理数 x) 方法里要判断结果是不是整数,如果是整数就要转成整数, 也就是分数类就要耦合整数类了。 有什么方法避免这种耦合关系呢?
  • 打赏
  • 举报
回复
为什么说
Interface 有理数
{//定义规范
     double Add();
}
肯定不能用呢?因为它这个操作无法表达“二元运算”概念。 在子类的“有理数 整数.加(有理数)”和“有理数 分数.加(有理数)”这里才能进行所谓的“类型判断”。这体现了子类重写父类方法、扩展父类功能实现的特点。 继承,不是为了省点写代码的事情。有些程序员为了省得写点代码而使用继承,那绝对是要不得的。继承是为了进行大系统的设计,只有举出更有意义的“面向应用领域的”实例时才会看得更清楚,也能体现出价值。而在非常低的层次,可以使用最笨最原始的办法写程序而不必花精力过分抽象。
  • 打赏
  • 举报
回复
引用 楼主 yangyi_2009 的回复:
1. 有理数作为父类,整数和分数分别继承自有理数。 为整数类实现方法 整数.加(整数, 整数); 为分数类实现方法 分数.加(分数, 分数); 现要实现有理数加法 有理数.加(有理数, 有理数), 当然就包括 加(整数, 分数)这种情况, 如果在 有理数.加 方法里进行类型判断, 就导致父类耦合子类的问题了。
要注意,接口规格中“运算”是父类定义的。 如果你定义“整数.加(整数, 整数)”,那么它绝对不是从父类继承而来的操作。因此这个操作谈不上继承。 对于分数也是一样。 所以你虽然知道概念,但是一但真正到子类,就没有继承概念了。
  • 打赏
  • 举报
回复
abstract class 有理数
{
    public abstract 有理数 Plus(有理数 x);
}

class 整数 : 有理数
{

    public override 有理数 Plus(有理数 x)
    {
        throw new NotImplementedException();
    }
}

class 分数 : 有理数
{

    public override 有理数 Plus(有理数 x)
    {
        throw new NotImplementedException();
    }
}
  • 打赏
  • 举报
回复
Interface 有理数
{//定义规范
     double Add();
}

Interface 整数:有理数
{//整数特有的
}

Interface 分数:有理数
{//分数特有的
     double 分子{get;}
     double 分母{get;}
}
部分程序未完成所有功能,,,东华理工2011届课程设计,,汇总 1. 有理数运算 有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。在C++中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。对有理数的各种操作都可以用重载运算符来实现。 定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符==实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。 2. 模拟计算器 设计一个程序来模拟一个简单的手持计算器。程序支持算术运算+、-、*、/、=、以及C(清除)、A(全清除)操作。 定义一个计算器类,该类包括两个组件对象,一个计算引擎和一个用户接口,用户接口对象处理接受的键盘输入信息,并显示答案,计算引擎对象对给出的数据执行相应操作,并存储操作的结果。 3. 设计一个Database类 设计一个Database类。Database类是一个表的集合,而表又由行和列组成。例如,下面的雇员信息表包含三个记录,每个记录有四个字段( Employee、Name、Department和Boss)。 雇员 姓名 部门 部门经理 111-11-1234 Cruz ACC Warder 213-44-5649 Johnston MIS Michaels 321-88-7895 Tom FIN Bearskin 能够完成对数据库的基本操作;包括创建数据库,实现对数据库里面的表的添加,删除;以及能够完成对表结构的修改(如添加或删除字段),以及对表中的记录进行添加和删除;能够完成对使用适当的查询语言从一个或多个表中查找相关信息。 4、 矩阵类设计 定义Matrix类,参照实现: (1) 任意行数,列数矩阵的构建 (2) 常数矩阵 (3) 转置矩阵 (4) 矩阵加法,减法,乘法 (5) 矩阵与数组间的转换 (6) 逆矩阵 (7) 矩阵的输入与输出 (8) 完成相应应用程序设计 5、 表格类设计 定义Table类,参照实现: a) 任意行数,列数表格的构建 b) 表格标题设置 c) 表头的定义 d) 表格数据的输入及修改 e) 表格框线的绘制 f) 表格数据显示 g) 表格数据的统计计算 h) 完成相应应用程序设计 6、 堆栈类设计* 定义Stack类,参照实现: a) 用数组实现先进后出的数据结构 b) 栈顶指针的设置 c) 进栈操作 d) 出栈操作 e) 空栈与栈满溢出判定 f) 完成相应应用程序设计 7、 矢量设计* 定义Vector类,参照实现: a) 矢量的构建 b) 矢量的加法,减法 c) 矢量的点积 d) 矢量的叉积 e) 矢量的输出 f) 完成相应应用程序的设计 8、 链表类设计 定义Link类,参照实现: a) 建立链表的数据结构 b) 输入链表结点的数据 c) 显示链表结点数据 d) 插入链表结点 e) 删除链表结点 f) 完成相应应用程序设计 9、通信录的设计 一、定义人员(person)类,其中至少包括姓名、性别、电话、地址、邮政编码、邮箱、QQ号和类别(例如:同学、朋友等)。 二、实现下面的功能 1、设计菜单实现功能选择; 2、输入功能:输入人员信息,并保存到文件中; 3、查询功能: 1)能够根据姓名、电话精确查询人员信息; 2)能够根据地址进行模糊查询人员信息; 3)根据人员类别查询人员信息 4、根据姓名对人员信息排序输出 5、能根据姓名、电话修改人员信息 6、能根据姓名、电话删除人员信息 10、职工工资管理 一、定义职工(employee )类,其中至少包括姓名、性别、工号、电话、所在科室和工资。 二、实现下面的功能 1、设计菜单实现功能选择; 2、输入功能:输入职工信息,并保存到文件中; 3、查询功能: 1)能够根据工号精确查询职工信息; 2)能够根据姓名、科室查询职工信息 3)分科室进行工资统计,计算各科室的平均工资 4、根据职工的工资排序输出 5、根据工号修改职工信息 6、根据工号删除职工信息 11、三角形的种类与面积 一、定义点(point)类,包含点的坐标x和y;通过继承点类派生出线段(line)类;通
院 系:计 算 机 学 院 实验课程:计算机基础实验课程 实验项目:多态 指导老师:XXX 开课时间:XXXX~ XXXX年度第 2学期 专 业:XXXX 班 级:XXXX级 本X班 学 生:XXX 学 号:XXXXXXXX 一、实验目的与要求: 1.掌握运算符重载的基本方法。 2.掌握虚函数的定义及多态性的实现。 二、实验内容: (一)实验题目一: 编写有理数(即分数,包括整数类型的分子和分母)类,并进行运算符重载,编 写运算符"+"、 "-"、 "*"、 "/"的重载函数,在主函数的函数体内中实现使用运算符直接进行有理数对象的加、减 、乘、除运算。 1.程序清单: #include using namespace std; class Rnumber { public: Rnumber(){a=0;b=0;} Rnumber(int,int); Rnumber operator +(Rnumber &); Rnumber operator -(Rnumber &); Rnumber operator *(Rnumber &); Rnumber operator /(Rnumber &); void display(); private: int a; int b; }; Rnumber::Rnumber(int x,int y):a(x),b(y){} Rnumber Rnumber::operator +(Rnumber & x) { int i; i=(a>x.a)?a:x.a; for(;i!=0;i++) { if(i%b==0 && i%x.b==0) break; } return Rnumber(i/b*a+i/x.b*x.a,i); } Rnumber Rnumber::operator -(Rnumber & x) { int i; i=(a>x.a)?a:x.a; for(;i!=0;i++) { if(i%b==0 && i%x.b==0) break; } return Rnumber(i/b*a-i/x.b*x.a,i); } Rnumber Rnumber::operator *(Rnumber & x) { return Rnumber(a*x.a,b*x.b); } Rnumber Rnumber::operator /(Rnumber & x) { return Rnumber(a*x.b,b*x.a); } void Rnumber::display() { int n; n=(a1;n--) { if(a%n==0 && b%n==0) { a=a/n; b=b/n; } } cout<
第1章 文本 1 引言 1 1.1 每次处理一个字符 6 1.2 字符和字符值之间的转换 7 1.3 测试一个对象是否是类字符串 8 1.4 字符串对齐 10 1.5 去除字符串两端的空格 11 1.6 合并字符串 11 1.7 将字符串逐字符或逐词反转 14 1.8 检查字符串中是否包含某字符集合中的字符 15 1.9 简化字符串的translate方法的使用 18 1.10 过滤字符串中不属于指定集合的字符 20 1.11 检查一个字符串是文本还是二进制 23 1.12 控制大小写 25 1.13 访问子字符串 26 1.14 改变多行文本字符串的缩进 29 1.15 扩展和压缩制表符 31 1.16 替换字符串中的子串 33 1.17 替换字符串中的子串-Python 2.4 34 1.18 一次完成多个替换 36 1.19 检查字符串中的结束标记 39 1.20 使用Unicode来处理国际化文本 40 1.21 在Unicode和普通字符串之间转换 43 1.22 在标准输出中打印Unicode字符 45 1.23 对Unicode数据编码并用于XML和HTML 46 1.24 让某些字符串大小写不敏感 49 1.25 将HTML文档转化为文本显示到UNIX终端上 52 第2章 文件 55 引言 55 2.1 读取文件 59 2.2 写入文件 62 2.3 搜索和替换文件中的文本 64 2.4 从文件中读取指定的行 65 2.5 计算文件的行数 66 2.6 处理文件中的每个词 68 2.7 随机输入/输出 70 2.8 更新随机存取文件 71 2.9 从zip文件中读取数据 73 2.10 处理字符串中的zip文件 74 2.11 将文件树归档到一个压缩的tar文件 76 2.12 将二进制数据发送到Windows的标准输出 77 2.13 使用C++的类iostream语法 78 2.14 回退输入文件到起点 80 2.15 用类文件对象适配真实文件对象 83 2.16 遍历目录树 84 2.17 在目录树中改变文件扩展名 85 2.18 从指定的搜索路径寻找文件 86 2.19 根据指定的搜索路径和模式寻找文件 87 2.20 在Python的搜索路径中寻找文件 88 2.21 动态地改变Python搜索路径 89 2.22 计算目录间的相对路径 91 2.23 跨平台地读取无缓存的字符 93 2.24 在Mac OS X平台上统计PDF文档的页数 94 2.25 在Windows平台上修改文件属性 95 2.26 从OpenOffice.org文档中提取文本 96 2.27 从微软Word文档中抽取文本 97 2.28 使用跨平台的文件锁 98 2.29 带版本号的文件名 100 2.30 计算CRC-64循环冗余码校验 102 第3章 时间和财务计算 105 引言 105 3.1 计算昨天和明天的日期 111 3.2 寻找上一个星期五 112 3.3 计算日期之间的时段 114 3.4 计算歌曲的总播放时间 115 3.5 计算日期之间的工作日 116 3.6 自动查询节日 118 3.7 日期的模糊查询 121 3.8 检查夏令时是否正在实行 123 3.9 时区转换 124 3.10 反复执行某个命令 125 3.11 定时执行命令 127 3.12 十进制数学计算 129 3.13 将十进制数用于货币处理 130 3.14 用Python实现的简单加法器 133 3.15 检查信用卡校验和 136 3.16 查看汇率 137 第4章 Python技巧 139 引言 139 4.1 对象拷贝 140 4.2 通过列表推导构建列表 144 4.3 若列表中某元素存在则返回之 146 4.4 循环访问序列中的元素和索引 147 4.5 在无须共享引用的条件下创建列表的列表 148 4.6 展开一个嵌套的序列 149 4.7 在行列表中完成对列的删除和排序 152 4.8 二维阵列变换 154 4.9 从字典中取值 155 4.10 给字典增加一个条目 157 4.11 在无须过多援引的情况下创建字典 158 4.12 将列表元素交替地作为键和值来创建字典 159 4.13 获取字典的一个子集 161 4.14 反转字典 163 4.15 字典的一键多值 164 4.16 用字典分派方法和函数 166 4.17 字典的并集与交集 167 4.18 搜集命名的子项 169 4.19 用一条语句完成赋值和测试 171 4.20 在Python中使用printf 174 4.21 以指定的概率获取元素 174 4.22 在表达式中处理异常 176 4.23 确保名字已经在给定模块中被定义 178 第5章 搜索和排序 180 引言 180 5.1 对字典排序 185 5.2 不区分大小写对字符串列表排序 185 5.3 根据对象的属性将对象列表排序 187 5.4 根据对应值将键或索引排序 189 5.5 根据内嵌的数字将字符串排序 192 5.6 以随机顺序处理列表的元素 193 5.7 在增加元素时保持序列的顺序 195 5.8 获取序列中最小的几个元素 197 5.9 在排序完毕的序列中寻找元素 199 5.10 选取序列中最小的第n个元素 200 5.11 三行代码的快速排序 203 5.12 检查序列的成员 206 5.13 寻找子序列 208 5.14 给字典类型增加排名功能 210 5.15 根据姓的首字母将人名排序和分组 214 第6章 面向对象编程 217 引言 217 6.1 温标的转换 223 6.2 定义常量 225 6.3 限制属性的设置 227 6.4 链式字典查询 229 6.5 继承的替代方案-自动托管 231 6.6 在代理中托管特殊方法 234 6.7 有命名子项的元组 237 6.8 避免属性读写的冗余代码 239 6.9 快速复制对象 240 6.10 保留对被绑定方法的引用且支持垃圾回收 243 6.11 缓存环的实现 245 6.12 检查一个实例的状态变化 249 6.13 检查一个对象是否包含某种必要的属性 252 6.14 实现状态设计模式 255 6.15 实现单例模式 257 6.16 用Borg惯用法来避免“单例”模式 259 6.17 Null对象设计模式的实现 263 6.18 用_ _init_ _参数自动初始化实例变量 266 6.19 调用超类的_ _init_ _方法 267 6.20 精确和安全地使用协作的超类调用 270 第7章 持久化和数据库 273 引言 273 7.1 使用marshal模块序列化数据 275 7.2 使用pickle和cPickle模块序列化数据 277 7.3 在Pickling的时候压缩 280 7.4 对类和实例使用cPickle模块 281 7.5 Pickling被绑定方法 284 7.6 Pickling代码对象 286 7.7 通过shelve修改对象 288 7.8 使用Berkeley DB数据库 291 7.9 访问MySQL数据库 294 7.10 在MySQL数据库中储存BLOB 295 7.11 在PostgreSQL中储存BLOB 296 7.12 在SQLite中储存BLOB 298 7.13 生成一个字典将字段名映射为列号 300 7.14 利用dtuple实现对查询结果的灵活访问 302 7.15 打印数据库游标的内容 304 7.16 适用于各种DB API模块的单参数传递风格 306 7.17 通过ADO使用Microsoft Jet 308 7.18 从Jython Servlet访问JDBC数据库 310 7.19 通过Jython和ODBC获得Excel数据 313 第8章 调试和测试 315 引言 315 8.1 阻止某些条件和循环的执行 316 8.2 在Linux上测量内存使用 317 8.3 调试垃圾回收进程 318 8.4 捕获和记录异常 320 8.5 在调试模式中跟踪表达式和注释 322 8.6 从traceback中获得更多信息 324 8.7 当未捕获异常发生时自动启用调试器 327 8.8 简单的使用单元测试 328 8.9 自动运行单元测试 330 8.10 在Python 2.4中使用doctest和unittest 331 8.11 在单元测试中检查区间 334 第9章 进程、线程和同步 336 引言 336 9.1 同步对象中的所有方法 339 9.2 终止线程 342 9.3 将Queue.Queue用作优先级队列 344 9.4 使用线程池 346 9.5 以多组参数并行执行函数 349 9.6 用简单的消息传递协调线程 351 9.7 储存线程信息 353 9.8 无线程的多任务协作 357 9.9 在Windows中探测另一个脚本实例的运行 359 9.10 使用MsgWaitForMultipleObjects处理Windows消息 360 9.11 用popen驱动外部进程 363 9.12 获取UNIX Shell命令的输出流和错误流 364 9.13 在UNIX中fork一个守护进程 367 第10章 系统管理 370 引言 370 10.1 生成随机密码 371 10.2 生成易记的伪随机密码 372 10.3 以POP服务器的方式验证用户 375 10.4 统计Apache中每个IP的点击率 376 10.5 统计Apache的客户缓存的命中率 378 10.6 在脚本中调用编辑器 379 10.7 备份文件 381 10.8 选择性地复制邮箱文件 383 10.9 通过邮箱创建一个邮件地址的白名单 384 10.10 阻塞重复邮件 386 10.11 检查你的Windows声音系统 388 10.12 在Windows中注册和反注册DLL 388 10.13 检查并修改Windows自动运行任务 390 10.14 在Windows中创建共享 391 10.15 连接一个正在运行的Internet Explorer实例 392 10.16 读取Microsoft Outlook Contacts 393 10.17 在Mac OS X中收集详细的系统信息 396 第11章 用户界面 400 引言 400 11.1 在文本控制台中显示进度条 402 11.2 避免在编写回调函数时使用lambda 404 11.3 在tkSimpleDialog函数中使用默认值和区间 405 11.4 给Tkinter列表框增加拖曳排序能力 406 11.5 在Tkinter部件中输入一个重音字符 408 11.6 在Tkinter中嵌入内联的GIF 410 11.7 转换图片格式 412 11.8 在Tkinter中实现一个秒表 415 11.9 用线程实现GUI和异步I/O 的结合 417 11.10 在Tkinter中使用IDLE的 Tree部件 421 11.11 在Tkinter Listbox中支持单行多值 423 11.12 在Tkinter部件之间复制Geometry方法和选项 427 11.13 在Tkinter中实现一个带标签的记事本 429 11.14 使用wxPython实现带面板的记事本 431 11.15 在Jython中实现一个ImageJ插件 433 11.16 用Swing和Jython来通过URL查看图片 434 11.17 在Mac OS中获得用户输入 434 11.18 程序化地创建Python Cocoa GUI 437 11.19 用IronPython实现淡入窗口 439 第12章 XML处理 441 引言 441 12.1 检查XML的格式完好性 443 12.2 计算文档中标签的个数 444 12.3 获得XML文档中的文本 445 12.4 自动探测XML的编码 447 12.5 将一个XML文档转化成Python对象树 449 12.6 从XML DOM节点的子树中删除仅有空白符的文本节点 451 12.7 解析Microsoft Excel的XML 452 12.8 验证XML文档 454 12.9 过滤属于指定命名空间的元素和属性 455 12.10 用SAX合并连续的文本事件 458 12.11 使用MSHTML来解析XML或HTML 461 第13章 网络编程 462 引言 462 13.1 通过Socket数据报传输消息 464 13.2 从Web抓取文档 466 13.3 过滤FTP站点列表 467 13.4 通过SNTP协议从服务器获取时间 468 13.5 发送HTML邮件 469 13.6 在MIME消息中绑入文件 471 13.7 拆解一个分段MIME消息 474 13.8 删除邮件消息中的附件 475 13.9 修复Python 2.4的email.FeedParser 解析的消息 477 13.10 交互式地检查POP3邮箱 479 13.11 探测不活动的计算机 482 13.12 用HTTP监视网络 487 13.13 网络端口的转发和重定向 489 13.14 通过代理建立SSL隧道 492 13.15 实现动态IP协议 495 13.16 登录到IRC并将消息记录到磁盘 498 13.17 访问LDAP服务 500 第14章 Web编程 502 引言 502 14.1 测试CGI是否在工作 503 14.2 用CGI脚本处理URL 506 14.3 用CGI上传文件 507 14.4 检查web页面的存在 509 14.5 通过HTTP检查内容类型 510 14.6 续传HTTP下载文件 512 14.7 抓取Web页面时处理Cookie 513 14.8 通过带身份验证的代理进行HTTPS导航 516 14.9 用Jython实现Servlet 517 14.10 寻找Internet Explorer的cookie 519 14.11 生成OPML文件 521 14.12 聚合RSS Feed 524 14.13 通过模板将数据放入Web页面 527 14.14 在Nevow中呈现任意对象 530 第15章 分布式编程 534 引言 534 15.1 实现一个XML-RPC方法调用 536 15.2 服务XML-RPC请求 537 15.3 在Medusa中使用XML-RPC 539 15.4 允许XML-RPC服务被远程终止 541 15.5 SimpleXMLRPCServer的一些细节 542 15.6 给一个XML-RPC服务提供一个wxPython GUI 544 15.7 使用Twisted的Perspective Broker 546 15.8 实现一个CORBA服务和客户 549 15.9 使用telnetlib执行远程登录 551 15.10 使用SSH执行远程登录 554 15.11 通过HTTPS验证一个SSL客户端 557 第16章 关于程序的程序 559 引言 559 16.1 验证字符串是否代表着一个合法的数字 564 16.2 导入一个动态生成的模块 565 16.3 导入一个名字在运行时被确定的模块 567 16.4 将参数和函数联系起来 568 16.5 组合函数 571 16.6 使用内建的Tokenizer给Python源码上色 572 16.7 合并和拆解Token 575 16.8 检查字符串是否有平衡的圆括号 577 16.9 在Python中模拟枚举 580 16.10 在创建列表推导时引用它自身 583 16.11 自动化py2exe将脚本编译成Windows可执行文件的过程 585 16.12 在UNIX中将主脚本和模块绑成一个可执行文件 587 第17章 扩展和嵌入 590 引言 590 17.1 实现一个简单的扩展类型 592 17.2 用Pyrex实现一个简单的扩展类型 597 17.3 在Python中使用C++库 598 17.4 调用Windows DLL的函数 601 17.5 在多线程环境中使用SWIG生成的模块 603 17.6 用PySequence_Fast将Python序列转为 C数组 604 17.7 用迭代器逐个访问Python序列的元素 608 17.8 从Python可调用的C函数中返回None 611 17.9 用gdb调试动态载入的C扩展 613 17.10 调试内存问题 614 第18章 算法 616 引言 616 18.1 消除序列中的重复 619 18.2 在保留序列顺序的前提下消除其中的重复 621 18.3 生成回置采样 625 18.4 生成无回置的抽样 626 18.5 缓存函数的返回值 627 18.6 实现一个FIFO容器 629 18.7 使用FIFO策略来缓存对象 631 18.8 实现一个Bag(Multiset)收集类型 634 18.9 在Python模拟三元操作符 637 18.10 计算素数 640 18.11 将整数格式化为二进制字符串 642 18.12 以任意数为基将整数格式化为字符串 644 18.13 通过法雷分数将数字转成有理数 646 18.14 带误差传递的数学计算 648 18.15 以最大精度求和 651 18.16 模拟浮点数 653 18.17 计算二维点集的凸包和直径 656 第19章 迭代器和生成器 660 引言 660 19.1 编写一个类似range的浮点数递增的函数 663 19.2 从任意可迭代对象创建列表 665 19.3 生成Fibonacci序列 667 19.4 在多重赋值中拆解部分项 669 19.5 自动拆解出需要的数目的项 670 19.6 以步长n将一个可迭代对象切成n片 672 19.7 通过重叠窗口循环序列 674 19.8 并行地循环多个可迭代对象 678 19.9 循环多个可迭代对象的矢量积 680 19.10 逐段读取文本文件 683 19.11 读取带有延续符的行 685 19.12 将一个数据块流处理成行流 687 19.13 用生成器从数据库中抓取大记录集 688 19.14 合并有序序列 690 19.15 生成排列、组合以及选择 694 19.16 生成整数的划分 696 19.17 复制迭代器 697 19.18 迭代器的前瞻 701 19.19 简化队列消费者线程 703 19.20 在另一个线程中运行迭代器 705 19.21 用itertools.groupby来计算汇总报告 706 第20章 描述符、装饰器和元类 710 引言 710 20.1 在函数调用中获得常新的默认值 712 20.2 用嵌套函数来编写property属性 715 20.3 给属性值起别名 717 20.4 缓存属性值 719 20.5 用同一个方法访问多个属性 722 20.6 封装一个方法来给类增加功能 723 20.7 增强所有方法来给类增加功能 726 20.8 在运行时给一个类实例添加方法 728 20.9 检查接口的实现 730 20.10 在自定义元类中正确地使用_ _new_ _和_ _init_ _ 732 20.11 允许对List的可变方法的链式调用 734 20.12 通过更紧凑的语法使用协作的超类调用 736 20.13 不使用_ _init_ _来初始化实例属性 738 20.14 实例属性的自动初始化 740 20.15 重新加载时自动更新类实例 743 20.16 在编译时绑定常量 747 20.17 解决元类冲突 752

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧