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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • PY中的__call__ PY中的函数是一个对象,所有函数都可调用对象 一个类实例也可以**变成**一个可调用对象,只需要实现一个特殊方法__call__() :把Person变成一个可调用对象 class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __call__(self, friend): print 'My name is %s...' % self.name print 'My friend is %s...' % friend 现在对Person实例进行直接调用 >>> p = Person('Bob', 'male') >>> p('Tim') My name is Bob... My friend is Tim... 在PY中,函数和对象的区别并不显著
    查看全部
    0 采集 收起 来源:python中 __call__

    2018-03-22

  • 1. @property---可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,这是关键字,固定格式,能让方法当“属性”用 @score.setter---前面的"score"是@property紧跟的下面定义的那个方法的名字,"setter"是关键字,这种“@+方法名字+点+setter”是个固定格式与@property搭配使用 2. 把score定义成了私有属性__score,而我们根据前面的知识了解到私有属性在类外是不能够直接访问的,必须通过方法调用的方式,而装饰器函数又恰好把方法装饰成了属性调用,所以这里调用属性其实就是调用方法,返回的是私有属性 3. 如果只使用@property而不使用@xx.setter,就不能对“属性”赋值,这时,就可以创建一个只读“属性”。
    查看全部
    0 采集 收起 来源:python中 @property

    2018-03-22

  • def gcs(a,b): for i in reversed(range(1,min(a,b)+1)): if a%i==0 and b%i==0: break return i 自己的土办法 def gcs(a,b): while b!=0 a,b = b,a%b return a wiki上的辗转相除法。
    查看全部
  • 1. 使用 get/set 方法来封装对一个属性的访问在许多面向对象编程的语言中都很常见。 class Student(object): def __init__(self, name, score): self.name = name self.__score = score def get_score(self): return self.__score def set_score(self, score): if score < 0 or score > 100: raise ValueError('invalid score') self.__score = score 2. 因为Python支持高阶函数,在函数式编程中我们介绍了装饰器函数,可以用装饰器函数把 get/set 方法“装饰”成属性调用 class Student(object): def __init__(self, name, score): self.name = name self.__score = score @property def score(self): return self.__score @score.setter def score(self, score): if score < 0 or score > 100: raise ValueError('invalid score') self.__score = score 注意: 第一个score(self)是get方法,用@property装饰,第二个score(self, score)是set方法,用@score.setter装饰,@score.setter是前一个@property装饰后的副产品。
    查看全部
    0 采集 收起 来源:python中 @property

    2018-03-22

  • PY中的__slots__ PY的任何势力在运行期都可以动态添加属性;而要限制添加的属性,可以用PY中一个特殊的方法__slots__来实现,这是一个类允许的属性列表 class Student(object): __slots__ = ('name', 'gender', 'score') def __init__(self, name, gender, score): self.name = name self.gender = gender self.score = score 如果对实例进行操作 >>> s.grade = 'A' Traceback (most recent call last): ... AttributeError: 'Student' object has no attribute 'grade' __slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存
    查看全部
    0 采集 收起 来源:python中 __slots__

    2018-03-22

  • 看不懂
    查看全部
  • @property---可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,这是关键字,固定格式,能让方法当“属性”用 @score.setter---前面的"score"是@property紧跟的下面定义的那个方法的名字,"setter"是关键字,这种“@+方法名字+点+setter”是个固定格式与@property搭配使用 把score定义成了私有属性__score,而我们根据前面的知识了解到私有属性在类外是不能够直接访问的,必须通过方法调用的方式,而装饰器函数又恰好把方法装饰成了属性调用,所以这里调用属性其实就是调用方法,返回的是私有属性
    查看全部
    0 采集 收起 来源:python中 @property

    2018-03-22

  • PY中的@property class Student(object): def __init__(self, name, score): self.name = name self.score = score 修改一个student的score属性时这样写 s = Student('Bob',59) s.score = 60 s.score = 1000 直接给属性赋值无法检查分数的有效性 利用两个方法: class Student(object): def __init__(self, name, score): self.name = name self.__score = score def get_score(self): return self.__score def set_score(self, score): if score < 0 or score > 100: raise ValueError('invalid score') self.__score = score 1000分的就会报错 用get/set方法封装对一个属性的访问在面向对象编程的语言中很常见 但s.get_score()和s.set_score()没有直接写s.score直接,而PY支持高阶函数,可以用装饰器函数把get/set方法“装饰”成属性调用 @property def score(self): return self.__score @score.setter def score(self, score): if score < 0 or score > 100: raise ValueError('invalid score') self.__score = score 第一个score(self)是get方法,用@property装饰,第二个score(self, score)是set方法,用@score.setter装饰,@score.setter是前一个@property装饰后的副产品
    查看全部
    0 采集 收起 来源:python中 @property

    2018-03-22

  • PY类型转换 将有理数运算结果转为int或float,应该用 r = Rational(12,5) n = int(r) 要让int()函数正常工作,只需要实现特殊方法__int__() class Rational(object): def __init__(self, p, q): self.p = p self.q = q def __int__(self): return self.p // self.q 同理,要让float()函数正常工作,只需要实现特殊方法__float__()
    查看全部
  • python 中编写无参数decorator
    查看全部
  • 当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。所以在示例中修改类属性后再取值则取的是实例属性的值,类似文中的p1.address='china'
    查看全部
  • 创建类并接受任意关键字参数:(初始化类属性) 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) xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student') print xiaoming.name print xiaoming.job
    查看全部
  • def f(j): def g(): return j*j return g 它可以正确地返回一个闭包g,g所引用的变量j不是循环变量,因此将正常执行 方法:问题的产生是因为函数只在执行时才去获取外层参数i,若函数定义时可以获取到i,问题便可解决。而默认参数正好可以完成定义时获取i值且运行函数时无需参数输入的功能,所以在函数f()定义中改为f(m = i),函数f返回值改为m*m即可
    查看全部
    0 采集 收起 来源:python中闭包

    2017-06-08

  • Python 3.6 中取消了__div__, 改成了__truediv__ 产生float, 相当于a / b, 和__floordiv__产生integer, 相当于a // b。 所以此题在Python 3.6中应该改成: def __truediv__(self, r): return Rational(self.p* r.q, self.q * r.p) 参考评论区@tutan0558,谢谢。
    查看全部
  • soreted()接受一个比较函数: 这里按照name进行排序 L1 = [p1, p2, p3] L2 = sorted(L1,lambda p1,p2:cmp(p1.name,p2.name))
    查看全部

举报

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

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