摘要: Go代码同时使用递归和迭代实现二叉树遍历 package main import ( "fmt" ) type TreeNode struct { Val int Left, Right *TreeNode } type stack []TreeNode func (s stack) Push(t 阅读全文
posted @ 2020-09-02 23:56 Jeffrey_Yang 阅读(223) 评论(0) 推荐(0) 编辑
摘要: ![](https://img2020.cnblogs.com/blog/1410597/202006/1410597-20200611090721917-251633463.png)![](https://img2020.cnblogs.com/blog/1410597/202006/1410597-20200611090920322-1142894626.png) 阅读全文
posted @ 2020-06-11 09:08 Jeffrey_Yang 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 搬家 阅读全文
posted @ 2020-03-15 21:40 Jeffrey_Yang 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 在大型的面向对象程序中,有时将类定义置于元类的控制下会很有用。元类可以检查类的定义,并用于警告程序员可能未引起注意的潜在问题(例如,使用稍微不兼容的方法签名)。 有人可能会争辩说,程序分析工具或IDE可以更好地捕获此类错误。可以肯定的是,这样的工具是有用的。但是,如果您要创建供他人使用的框架或库,则 阅读全文
posted @ 2020-03-01 12:55 Jeffrey_Yang 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 本篇文章用于记录类创建过程相关的文档,可以为以后相关博文的编写提供材料。先在这里做文档备份。 官方文档:https://docs.python.org/3.8/reference/datamodel.html customizing class creation Python Cookbook 9. 阅读全文
posted @ 2020-02-29 19:30 Jeffrey_Yang 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 修改类定义可以通过单继承,多继承(mixin),以及元类等。其实,装饰器也可以修改类定义,并且和上述提到的方案相比,更简洁直观,性能也更强。 如下: 阅读全文
posted @ 2020-02-04 21:35 Jeffrey_Yang 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 编写一个装饰器,在包装函数的调用签名中添加一个额外的参数。 但是,添加的参数不会干扰该函数的现有调用约定。 额外的参数可以通过关键字参数注入到调用签名中,如下: 若被包裹的函数已经定义了额外增加的参数,则程序会崩溃。 聪明的人会发现,使用装饰器后,新的函数的签名并没有包含 debug 参数,如下: 阅读全文
posted @ 2020-02-04 21:14 Jeffrey_Yang 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 此处必须定义类对象的__call__()方法,因为在装饰器起作用时,实际上是Profiled的实例对象充当wrapper函数。实例对象要作为函数调用(使得其变成callable对象),必须实现__call__()方法。 此外,必须实现__get__()方法以使Spam的bar方法变成描述符对象,并通 阅读全文
posted @ 2020-02-04 19:58 Jeffrey_Yang 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 动态类型的特性使得Python函数在被调用时,其参数类型不易被知晓。或者,为了动态支持多类型,实际参数的类型由调用者提供。如下: 上面的例子可以看出,函数参数并没有指定类型,使得该函数支持多种类型,这也正是Python语言的特殊之处。 但有时候,我们想限制函数的参数类型。这时很多人会想到类型提示(T 阅读全文
posted @ 2020-02-03 21:42 Jeffrey_Yang 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 想编写一个装饰器,该装饰器可以不带参数(如@decorator)使用,也可以带可选参数(如@decorator(x,y,z))使用。 但是,由于简单修饰符和带有参数的修饰符之间的调用约定不同,因此似乎没有直接的方法。 以下示例解决了这种编程一致性问题: 阅读全文
posted @ 2020-02-03 19:41 Jeffrey_Yang 阅读(130) 评论(0) 推荐(0) 编辑