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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 类有类属性a,创建实例p1

    实例p1也有类属性a

    改变实例p1的类属性a为'China',并不会改变类属性a,而是会增加一个实例属性a, 访问p1.adress 时,优先查找实例属性,返回'China'。

    当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。

    可见,千万不要在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。

    查看全部
  • class Person(object):

        count = 0 #类属性

        def __init__(self,name):

            self.name = name

            Person.count += 1 #类属性

    p1 = Person('Bob')

    print Person.count

    p2 = Person('Alice')

    print Person.count

    p3 = Person('Tim')

    print Person.count


    查看全部
  • 像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包.

    闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。

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

    2019-05-30

  • sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。

    reversed_cmp( ):实现倒序排序

    sorted( ):也可以对字符串进行排序,字符默认按照ASCII大小来比较。


    查看全部
  • map( )函数:python内置高阶函数,接受函数f和一个list,并通过函数f依次作用在list的每个元素上,得到一个新的list并返回。

    map( )函数不改变原有的list,而是返回一个新的list。

    map( )可以处理任意类型的list。

    查看全部
  • 高阶函数:能接受函数做参数的函数

    变量可以指向函数

    函数的参数可以接受变量

    一个函数可以接受另一个函数作为参数

    能接收函数做参数的函数就是高阶函数


    查看全部
  • Person类的属性,在调用时必须为Person.属性名

    查看全部
  • 关键字参数   **kw:一般表示字典

                      *args:一般表示tuple元组

    for k,v in kw.items():

            setattr(self,k,v) 

    //setattr(self,name,value)     self.k = v

    查看全部
  • sorted(list,key = lambda x:x.name)

    查看全部
  • 有关联性的特殊方法都必须实现,比如定义一个__getattr__方法,就必须把__setattr__和__delattr__都定义

    查看全部
  • class Person(object):    def __init__(self, name, gender, birth, **kw):        self.name = name        self.gender = gender        self.birth = birth        for k, v in kw.iteritems():            setattr(self, k, v)p1 = Person('Jack''男''1997.12.17', job='Student')print(p1.name, ' ', p1.job)


    **kw表示可以任意输入参数和对应的值,这些键值对被组织成字典dict,for k,v in kw.iteritems()表示对该字典的键值对进行迭代(k获得键,v获得值), iteritems()这个方法可以一个一个输出字典中的键值对,setattr(self,k,v)表示对实例自身设置属性和对应的值,self表示实例自身,k表示参数,v表示值。

    查看全部
  • 在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:

    class Person(object):

        def __init__(self, name, gender, birth, job):

            self.name=name

            self.gender=gender

            self.birth=birth

            self.job=job

            pass


    xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')


    print xiaoming.name

    print xiaoming.job

    有了__init__()方法,每个Person实例在创建时,都会有 name、gender 和 birth 这3个属性,并且,被赋予不同的属性值,访问属性使用.操作符


    为什么唯独job是需要加上个"=".个人认为是因为没有内嵌的job元素


    查看全部
  • 类是模板,而实例则是根据类创建的对象

    https://img1.sycdn.imooc.com//5cee22200001d44804280119.jpg

    实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。

    由于Python是动态语言,类属性也是可以动态添加和修改的

    因为类属性只有一份,所以,当Person类的address改变时,所有实例访问到的类属性都改变了。


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

    但是,如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义

    以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。

    查看全部
  • 实例的属性不同(地址、其他属性)

    虽然可以通过Person类创建出xiaoming、xiaohong等实例,但是这些实例看上除了地址不同外,没有什么其他不同。在现实世界中,区分xiaoming、xiaohong要依靠他们各自的名字、性别、生日等属性。

    查看全部

举报

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

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