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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。

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

    查看全部
  • 一个类实例也可通过特殊方法__call__( ) 变为可调用对象

    class Fib(object):
        def __call__(self,num):
            a, b, L = 0, 1, []
            for n in range(num):
                L.append(a)
                a, b = b, a + b
            return L
           
     

    f = Fib()
    print f(10)


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

    2018-04-17

  • 由于Python是动态语言,任何实例在运行期都可以动态地添加属性。

    如果要限制添加的属性,例如,Student类只允许添加 name、genderscore 这3个属性,就可以利用Python的一个特殊的__slots__来实现。

    顾名思义,__slots__是指一个类允许的属性列表:

    class Student(object):
        __slots__ = ('name', 'gender', 'score')
        def __init__(self, name, gender, score):
            self.name = name
            self.gender = gender
            self.score = score

    现在,对实例进行操作:

    >>> s = Student('Bob', 'male', 59)
    >>> s.name = 'Tim' # OK
    >>> s.score = 99 # OK
    >>> s.grade = 'A'
    Traceback (most recent call last):
      ...
    AttributeError: 'Student' object has no attribute 'grade'

    __slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存


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

    2018-04-17

  • 可以用装饰器函数把 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装饰后的副产品。

    现在,就可以像使用属性一样设置score了:

    >>> s = Student('Bob', 59)
    >>> s.score = 60
    >>> print s.score
    60


    查看全部
    0 采集 收起 来源:python中 @property

    2018-04-17

  • 如果要把 Rational 转为 int,应该使用:

    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

    结果如下:

    >>> print int(Rational(7, 2))
    3


    查看全部
  • 四则运算不局限于int和float,还可以是有理数、矩阵等。

    要表示有理数,可以用一个Rational类来表示:

    class Rational(object):
        def __init__(self, p, q):
            self.p = p
            self.q = q

    p、q 都是整数,表示有理数 p/q


    查看全部
  • Python中的__call__

    Python中函数其实就是一个对象,可以直接调用一个函数对象

    类实例也可以变成一个可调用的对象,只需要实现一个特殊的方法__call__()  ,在类中重写这个方法

    ....

    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

    p=Person('bob','male')

    p('xiao hong')

     单看p不知道是实例还是函数对象,由于在类中对__call__()方法进行了重写,实现了特殊的方法,这里调用的就是实例

    输出结果:My name is bob My friend is xiao hong 

            


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

    2018-04-17

  • s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。

    当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),


    查看全部
  • 加深了我对高阶函数的理解,特别是log(factorial) 真的可以这么玩,而且必须这么玩

    查看全部
  • abs 是一个内置函数 不在math包内,******使用时“abs”

    sqrt 是math 包内的一个函数,*****使用时"math.sqrt"


    查看全部
  • def performance(f):  定义装饰
       def fn(*args, **kw):  定义多参数闭包
           t1 = time.time()  记下函数调用前时间
           r = f(*args, **kw)  调用函数
           t2 = time.time()  记下函数调用后时间
           print 'call %s() in %fs' % (f.__name__, (t2 - t1))  print里两个参数,一个%s是字符串,接受f._name_,另一个%f是浮点数,接收两个时间的差(t2-t1)

    查看全部
  • 函数式编程:非纯函数,也可有变量

    查看全部
  • 阻挡我们学习代码的不是思维而是翻译,什么叫闭包,我的感觉叫“越权行为”都更加直观(翻译不好请多指正),匿名就更离谱了,是我们熟悉的匿名的意思吗,叫“裸体”函数都直观一些

    查看全部
  • strip函数即去除字符串两端空格

    查看全部

举报

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

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