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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 一个实例的私有属性就是以__开头的属性,无法被外部访问,但从类的内部是可以访问的。除了可以定义实例的属性外,还可以定义实例的方法。 实例的方法就是在类中定义的函数,它的第一个参数永远是self,指向调用该方法的实例本身,其他参数和一个普通的函数是完全一样的。 class Person(object): def __init__(self,name): self.__name=name def get_name(self): return self.__name get_name就是一个实例的方法,__init__其实也可看作是一个特殊的实例方法。 调用实例方法必须在实例上调用 print p1.get_name 在实例方法内部,可以访问所以实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致外,还可以简化外部调用的难度。
    查看全部
  • 在实例变量上修改类属性。 p1.address=China, 对实例p1来说,它有一个实例属性的address,而它所属的类也有一个类属性address, 所以,访问p1时,优先查找实例属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。
    查看全部
  • 创建类属性: class Person(object): count = 0 def __init__(self,name): self.name = name Person.coumt += 1 p1 = Person('bob') 实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。 类属性是直接绑定在类上的,所以,访问类属性不需要创建实例,就可以直接访问。 print Person.count 所有实例都可以访问到它所属的类的属性。 print p1.count 类属性可以动态添加和修改。
    查看全部
  • 高阶函数的定义
    查看全部
  • Python对属性的控制是通过属性名来实现的,如果一个属性由双下划线开头,该属性就无法被外部访问。 特殊属性:_xxx_,可以被外部访问。 以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。
    查看全部
  • 在定义python类时,可以为python添加一个特殊的__int__()方法,当创建实例时,__int__()方法被自动调用,我们就能在此为每个实例都统一加上属性。 class Person(object): def __init__(self, name, gender, birth): self.name = name self.gender = gender self.birth = birth setattr(对象,对象属性(字符串),属性值) 接受任意关键字参数:**kw for k in kw: setattr(self,,k,kw[k]) 或者 for k,v in kw.iteritems(): setattr(self,k,v)
    查看全部
  • 每个实例都拥有各自不同的属性。 实例的属性可以像普通变量一样进行操作。
    查看全部
  • 在python中,类通过class关键字定义。 按照python的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。创建实例使用类名+()。
    查看全部
  • 老是卡在同一个坑里: define不等于运行!!! 包括@performance,它实际上是define了这个函数,即把装饰器当中的函数用factorial填充了进去,只有print factorial(10)的时候才表示它运行了: 打印factorial参数为10的时候该装饰器函数运行的结果。 所以在define装饰器函数的时候,不仅要设置print,还要设置return原函数,只有这样才会调用并显示原函数的运行结果。
    查看全部
  • print filter(lambda s:s and len(s.strip()) > 0, ['test', None, '', 'str', ' ', 'END']) 因为lambda不能有return,所以一开始把return改成了print,运行失败。 原函数的意思是,按照函数式筛选右边的列表并打印结果。这里我重新回去找了一下filter函数,发现一个问题:用于筛选条件的函数,可以写成return x%2==1,也可以写成return x and x%2==1,但是必须写成return s and len(s.strip())>0,这里不能直接写return len(s.strip())>0否则会报错。不知道是什么原因?
    查看全部
  • -x if x < 0 else x 这个聪明
    查看全部
  • def count(): fs = [] for i in range(1, 4): def f(m=i): return m*m fs.append(f) return fs f1, f2, f3 = count() print f1(), f2(), f3() 既然不能直接用循环变量i,那就将i赋值给m变成非循环变量。这也是一种方法。
    查看全部
    0 采集 收起 来源:python中闭包

    2018-02-14

  • def count(): fs = [] for i in range(1, 4): def f(j): def g(): return j*j return g r = f(i) fs.append(r) return fs f1, f2, f3 = count() print f1(), f2(), f3() 这个却不是。这个填充进列表里的是一个个函数,所以最后要用f1(),f2()这样的方式输出函数执行的结果。
    查看全部
    0 采集 收起 来源:python中闭包

    2018-02-14

  • def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f()) return fs f1, f2, f3 = count() print f1, f2, f3 这里面的count最后产出的是一个列表,因为f()即表示执行这个函数的意识,它最后填充进fs里面的是一个个单独的计算结果。
    查看全部
    0 采集 收起 来源:python中闭包

    2018-02-14

  • 要让 @log 自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用: def log(f): def fn(*args, **kw): print 'call ' + f.__name__ + '()...' return f(*args, **kw) return fn 现在,对于任意函数,@log 都能正常工作。 这两个是python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前 计算函数调用的时间可以记录调用前后的当前时间戳,然后计算两个时间戳的差。 即time.time() %s:格式化字符串 %f:格式化浮点数字,可指定小数点后的精度 % :可理解为格式化输出的标志 Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。(类似于占位符) 格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python用一个tuple将多个值传递给模板,每个值对应一个格式符。 'call %s() in %fs'是模板,%s为第一个格式符,表示一个字符串和%f为第二个格式符,表示一个浮点数,(f.__name__, (t2 - t1))中的两个元素'f.__name__和t2-t1为替换%s和%f的真实值。 即%s对应f.__name__获取到的函数名,%f对应t2-t1的时间差 其实不就类似c中的嘛,,忘了 __name__ 是连续两个下划线,需要注意
    查看全部

举报

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

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