Python查漏----FourDay

一、装饰器

         1.装饰器本质就是函数,功能是为其他函数添加附加功能

          2.原则:①不修改被修饰函数的源代码

                       ②不修改被修饰函数的调用方式

          3.装饰器的实现:装饰器=高级函数+函数嵌套+闭包                                  

#装饰器实现下列代码
def now():
    print('call %s():' % now.__name__)
    print('2015-3-25')


#装饰器实现:
def log(func):                     ①
 def wrapper(*args, **kw):         ③
      print('call %s():' % func.__name__)  ④
      return func(*args, **kw)     ⑤
 return wrapper                    ②

@log
def now():                        ⑤
    print('2015-3-25')            ⑥

           由于log()是一个decorator,返回一个函数,所以,原来的now()函数仍然存在,只是现在同名的now变量指向了新的函数,于是调用now()将执行新函数,即在log()函数中返回的wrapper()函数。wrapper()函数的参数定义是(*args, **kw),因此,wrapper()函数可以接受任意参数的调用。

         4.带参数的装饰器

def log(text):              #传参数
    def decorator(func):    #传函数
        def wrapper(*args, **kw):    #功能函数
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

@log('execute')
def now():
    print('2015-3-25')

 二、python中的__name__的使用

         1:__name__是一个变量。前后加了爽下划线是因为是因为这是系统定义的名字。普通变量不要使用此方式命名变量。
         2:Python有很多模块,而这些模块是可以独立运行的!这点不像C++和C的头文件。
         3:import的时候是要执行所import的模块的。
         4:__name__就是标识模块的名字的一个系统变量。这里分两种情况:假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是__main__,通过if判断这样就可以执行“__mian__:”后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字(不加后面的.py),通过if判断这样就会跳过“__mian__:”后面的内容。

三、一些常用的模块和包                  https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319347182373b696e637cc04430b8ee2d548ca1b36d000

四、面向对象

      1.类的创建:class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。

       2.实例的创建:创建实例是通过类名+()实现的

       3.例子:test=Student()

                    变量test指向的就是一个Student的实例    

        4.访问限制:①私有变量:如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问.

                             ②特殊变量:在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量。

         5.继承:当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。

                      子类获得了父类的全部功能

         6.多态:当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()

          注:在编写程序的时候,千万不要对实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。

>>> class Student(object):
...     name = 'Student'
...
>>> s = Student() # 创建实例s
>>> print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
Student
>>> print(Student.name) # 打印类的name属性
Student
>>> s.name = 'Michael' # 给实例绑定name属性
>>> print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
Michael
>>> print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问
Student
>>> del s.name # 如果删除实例的name属性
>>> print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
Student

猜你喜欢

转载自blog.csdn.net/qq_21467113/article/details/86520555