Python编程笔记

Python中的装饰器

  • 装饰器模式:所谓的装饰器模式,可以简单地理解为“在不改变原有内部实现的情况下,为函数或者类添加某种特性”。这样我们就可以将一些与业务无关、具有通用性的代码抽象出来,作为装饰器附加到需要这些代码的函数或者类之上。用面向切面编程的思想解释就是“装饰器应该是一个切面”。
  • 函数是一等公民:意思就是函数可以被当成普通变量一样使用。在Python中,可以把函数赋值给变量,可以将函数作为其它函数的参数,也可以将函数作为其它函数的返回值
  • 闭包:我们都知道局部作用域可以引用全局作用域中的变量,相似的,当一个函数内部又定义了其它函数的时候,内部函数可以使用外部函数所在作用域的变量,这就是闭包。
from functools import wraps

def decorator1(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print('Decorator 1')
        return func(*args, **kwargs)
    return wrapper

def decorator2(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print('Decorator 2')
        return func(*args, **kwargs)
    return wrapper

@decorator1
@decorator2
def add(x, y):
    return x + y
  • 语法糖:它意指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法,语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读。不过其并没有给语言添加什么新东西

类方法、静态方法和实例方法

  • 实例方法隐含的参数为类实例self,而类方法隐含的参数为类本身cls。 静态方法无隐含参数,主要为了类实例也可以直接调用静态方法。所以逻辑上,类方法应当只被类调用,实例方法实例调用,静态方法两者都能调用。主要区别在于参数传递上的区别,实例方法悄悄传递的是self引用作为参数,而类方法悄悄传递的是cls引用作为参数。
class A(object): 
    def __init__(self, x=0):
        self.x = x

    #类实例方法  # 最常见的实例方法
    def foo(self, y=0):
        print self.x, y

    #类方法  # cls即为类自身
    @classmethod   
    def class_foo(cls, x=1, y=1):  
        return cls(x)  # 因为类方法可以传参一个cls参数,所以可以调用类的相关信息,而静态方法是一个独立的函数,也是可以调用的,这里为了简单,没有调用静态方法

    #静态方法   # 不能传递和类或实例相关的参数,如cls或self,但可以传递其他参数
    @staticmethod  
    def static_foo(x=2):  
        return A(x)

>>> a = A()  # 类实例化
>>> a.x  
0
>>> a.foo() # 调用类实例方法,可以使用self.x 取出类实例化的(即初始值)
0 0

>>> b = A.class_foo() # 调用类方法
>>> b.x
1

>>> c = A.static_foo() # 调用类的静态方法
>>> c.x
2

元类

  • 元类就是用来创建类的“东西”。元类就是用来创建这些类(对象)的,元类就是类的类。
MyClass = MetaClass() #实际上产生的是类 对象(创建类实例)
MyObject = MyClass()
  • 函数type实际上是一个元类。type就是Python在背后用来创建所有类的元类.可以在写一个类的时候为其添加metaclass属性创建元类。
class Foo(object):
    __metaclass__ = something
  • Python就会用元类来创建类Foo。小心点,这里面有些技巧。你首先写下class Foo(object),但是类对象Foo还没有在内存中创建。Python会在类的定义中寻找metaclass属性,如果找到了,Python就会用它来创建类Foo,如果没有找到,就会用内建的type来创建这个类.

initnew方法

  • new方法只负责创建,new至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供,new必须要有返回值,返回实例化出来的实例,这点在自己实现new时要特别注意,可以return父类new出来的实例,或者直接是object的new出来的实例.
  • init方法只负责初始化,init_有一个参数self,就是这个new返回的实例,initnew的基础上可以完成一些其它初始化的动作,init不需要返回值.

Python虚拟环境(pyvenv、virtualenv)

Linux下:https://blog.csdn.net/ailib/article/details/74820374

Windows下:https://www.jianshu.com/p/d01a85c8995e

你可能感兴趣的:(Python编程笔记)