- 博客(14)
- 收藏
- 关注
转载 Python3 nonlocal
在Python 2.x中,闭包只能读外部函数的变量,而不能改写它。举例来说,这样是合法的:def a(): x = 0 def b(): print locals() y = x + 1 print locals() print x, y return ba()()而这样是非法的:def a(): x = 0 def b():
2016-04-28 20:04:58 1613
转载 Python 闭包
首先还得从基本概念说起,什么是闭包呢?来看下维基上的解释:有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。....上面提到了两个关键的地方:自由变量 和 函数, 这两个关键稍后再说。还是得在赘述下“闭包”的意思,望文知意,可以形象的把它理解为一个封闭的包裹,这个包裹就是一个函数,当然还有函数内部对应的逻辑,包裹里面的东西就是自由变量,自由变量可以在随着包裹
2016-04-28 19:57:00 265
原创 Python 没有多态
C++的多态表示: 基类指针指向派生类对象。 Python变量无类型,自然也就不存在多态。python是一种动态语言,参数在传入之前是无法确定参数类型的class A: def prt(self): print "A" class B(A): def prt(self): print "B"
2016-04-26 19:43:01 1023
转载 为什么 Python 不支持函数重载?
这个问题,最近在 cpyug 上面讨论得很火热。我简要概括一下。为了考虑为什么 python 不提供函数重载,首先我们要研究为什么需要提供函数重载。函数重载主要是为了解决两个问题。1。可变参数类型。2。可变参数个数。另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当
2016-04-26 19:31:52 1422
转载 Python @classmethod和@staticmethod区别
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别
2016-04-20 20:04:27 606
转载 Python 类成员函数第一个参数self
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。你一定很奇怪Python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清晰。假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObj
2016-04-20 19:44:58 6416
转载 Python Decorator 3: 嵌套
@decorator_one@decorator_twodef func(): pass等价于func = decorator_one(decorator_two(func))@decorator(arg1, arg2)def func(): pass等价于func = decorator(arg1,arg2)(func)带参数及多
2016-04-18 19:44:32 728
原创 Python decorator 2: 类
class myDecorator(object): def __init__(self, fn): print "inside myDecorator.__init__()" self.fn = fn def __call__(self): self.fn() print "inside myDecorato
2016-04-14 19:13:08 299
转载 Python decorator 1: 函数
A.把要装饰的方法作为输入参数,B.在函数体内可以进行任意的操作(可以想象其中蕴含的威力强大,会有很多应用场景),C.只要确保最后返回一个可执行的函数即可(可以是原来的输入参数函数, 或者是一个新函数)如果只需要在被包装函数执行前插入代码,decorator可以加上插入代码后返回原函数 (例1,3)如果需要在包装函数执行之前和之后都插入代码,decorator需要另加一个函
2016-04-13 19:51:04 310
转载 Python args kwargs
先来看个例子:def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '---------------------------------------'if __name__ == '__main__': foo(1,2,3,4) foo(a=1,
2016-04-11 19:47:33 375
转载 Python的getattr(),setattr(),delattr(),hasattr()
1. getattr()函数是Python自省的核心函数,具体使用大体如下:class A: def __init__(self): self.name = 'zhangjing' #self.age='24' def method(self): print"method print" Instance =
2016-04-07 20:05:57 499
转载 Python public private
1. object # public2. __object__ # special, python system use, user should not define like it3. __object # private (name mangling during runtime)4. _object # obey python coding convention, consid
2016-04-06 19:55:07 1457
原创 Mix-in 类
为了解决多重继承的问题,Java引入了接口 (interface)技术,Lisp、Ruby引入了 Mix-in 技术。Mix-in 技术按一下规则来限制多重继承:继承用但一继承;第二个及两个以上的父类必须是 Mix-in 的抽象类。Mix-in 类是具有以下特征的抽象类:不能单独生成实例;不能继承普通类。class TagMixin(object):
2016-04-05 20:14:51 1680
转载 理解 Python super mro
今天在知乎回答了一个问题,居然一个赞都没有,也是神奇,毕竟这算是我非常认真答的题之一。既然如此就贴过来好了,有些内容之后再补充。原问题Python中既然可以直接通过父类名调用父类方法为什么还会存在super函数?比如class Child(Parent): def __init__(self): Parent.__init__(self)这种方式
2016-04-04 20:38:22 1665 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人