为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
python进阶_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 解释器内部会将**kw拆分成对应的dict.
    setattr()方法接受3个参数:setattr(对象,属性,属性的值)
    setattr(self,k,v)相当于self.k = v
    kw.iteritems()历遍字典kw的所有key和value,分别匹配k,v

    查看全部
  • isinstance(object, classinfo)
    其中,object 是变量,classinfo 是类型即 (tuple,dict,int,float,list,bool等) 和 class类。

    若参数 object 是 classinfo 类的实例,或者 object 是 classinfo 类的子类的一个实例, 返回 True。
    若 object 不是一个给定类型的的对象, 则返回结果总是False。

    若 classinfo 不是一种数据类型或者由数据类型构成的元组,将引发一个 TypeError 异常。

    查看全部
  • try 的作用是捕获错误,并在捕获到指定错误时执行 except 语句。

    查看全部
  • __str__()用于显示给用户,而__repr__()用于显示给开发人员。

    查看全部
  • 这三个方法是关联的定义了其中一个就要定义其他两个。

    __getattr__()
    __setattr__()
    __delattr__()


    查看全部
  • 如果已知一个属性名称,要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数了

    **kw:用于dict,关键字参数

    *args:用于tuple,非关键字参数

    查看全部
  • 类中方法分:实例方法和类方法

    实例方法:class中的方法全是实例方法,实例方法的第一个参数self即实例本身。

    类方法:需要使用@classmethod,就把该方法绑定到类上,第一个参数通常名为:cls,cls.count相等于Person.count

    查看全部
  • 和属性类似,方法也分实例方法和类方法。

    在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。

    要在class中定义类方法,需要这么写:

    class Person(object):
        count = 0    @classmethod
        def how_many(cls):
            return cls.count
        def __init__(self, name):
            self.name = name
            Person.count = Person.count + 1
    
    print Person.how_many()
    p1 = Person('Bob')
    print Person.how_many()

    通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count。

    因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。


    查看全部
  • 通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count

    因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。

    查看全部
  • 调用实例方法必须在实例上调用:

    p1 = Person('Bob')
    print p1.get_name()  # self不需要显式传入# => Bob

    查看全部
  • get_name(self) 就是一个实例方法,它的第一个参数是self。__init__(self, name)其实也可看做是一个特殊的实例方法。

    查看全部
  • Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。

    查看全部
  • setattr 函数对应函数 getatt(),用于设置属性值,该属性必须存在。

    语法

    setattr 语法:

    setattr(object, name, value)

    参数

    • object -- 对象。

    • name -- 字符串,对象属性。

    • value -- 属性值。

    返回值

    无。

    查看全部
  • 绑定在一个实例上的属性不会影响其他实例,但是,类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个!也就是说,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。

    定义类属性可以直接在 class 中定义:

    class Person(object):    address = 'Earth'
        def __init__(self, name):
            self.name = name


    查看全部
  • f1, f2, f3 = count()中为何要有3个元素f1, f2, f3?因为count()返回的是fs,而fs是什么?是列表。什么列表?有3个元素的列表。为什么有3个元素?因为for语句的rang(1,4)。所以相当于

    f1,f2,f3=[ 值,值 ,值 ]。所以f1, f2, f3中你不能多写一个f4或少写f1, f2, f3其中任何一个,因为你要分别匹配[ 值,值 ,值 ]3个。好,现在我问你列表里的值是什么?是[1,4,9]?哈哈,错了,不是,你可以看到r输出的是<function count.<locals>.f.<locals>.g at 0x10067bae8>  之类的(有3个)。我们来分析r = f(i)。首先第一个循环,i=1,那就是f(1),请问f(1)返回的给r的是什么?看到return g没有?是g,也就是g()函数的地址,f1-->r-->g,f1指向的是g的地址。剩下的i=2、i=3一样。所以r就是g()函数的地址。fs.append(r)就是将r追加到列表fs[]中,所以输出r你看到的是以下输出:

    [<function count.<locals>.f.<locals>.g at 0x10067bae8>, <function count.<locals>.f.<locals>.g at 0x10067ba60>, <function count.<locals>.f.<locals>.g at 0x10067bb70>]

    看到了吗?[地址,地址,地址]。ps:g的地址为什么不同?因为你创建循环3次调用了f(),自然调用了3次g()

    终于最后一步了:print(f1(),f2(),f3()),你会问为什么f1还要加上()。f1指向的是g的地址,所以f1()表示什么?表示是g()。i=1,传参数给j。所以g()就返回1*1(return j * j)。同理f2()=2*2,f3()=3*3.

    查看全部
    0 采集 收起 来源:python中闭包

    2018-05-03

举报

0/150
提交
取消
课程须知
本课程是Python入门的后续课程 1、掌握Python编程的基础知识 2、掌握Python函数的编写 3、对面向对象编程有所了解更佳
老师告诉你能学到什么?
1、什么是函数式编程 2、Python的函数式编程特点 3、Python的模块 4、Python面向对象编程 5、Python强大的定制类
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!