为了账号安全,请及时绑定邮箱和手机立即绑定

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
学习人数
综合评分9.20
575人评价 查看评价
9.6 内容实用
9.0 简洁易懂
9.0 逻辑清晰
  • for k, v in kw.iteritems():

                setattr(self, k, v)


    查看全部
  •     def __init__(self, name, gender, **kw):

            self.name=name

            self.gender=gender

            for k, v in kw.iteritems():

                setattr(self, k, v)

    传入**kw 即可传入任意数量的参数,并通过 setattr() 绑定属性。

    查看全部
  • json.load(s)默认会调用read()方法,但是需要参数s是文件类型。在students类中加入read()方法后,students类型的变量也可以调用read()方法

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

    2020-03-24

  • class Person(object):
        def __init__(self, name, gender):
            self.name = name
            self.gender = gender
    class Teacher(Person):
        def __init__(self, name, gender, course):
            super(Teacher, self).__init__(name, gender)
            self.course = course


    查看全部
  • 每个函数在遇到第一个return之后就结束调用了,所以这里的if后面不用else

    查看全部
  • 当实例属性和类属性重名时,实例属性优先级高

    查看全部
  • **kw表示dict字典,k,v是键值对。

    **args表示元组

    查看全部
  • 要让 @log 自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用:

    查看全部
  • 任务

    请定义Person类的__init__方法,除了接受 name、gender 和 birth 外,还可接受任意关键字参数,并把他们都作为属性赋值给实例。

    要定义关键字参数,使用 **kw;

    除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。

    参考代码:

    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


    查看全部
  • >>> getattr(s, 'name')  # 获取name属性'Bob'
    
    >>> setattr(s, 'name', 'Adam')  # 设置新的name属性
    >>> getattr(s, 'age')  # 获取age属性,但是属性不存在,报错
    >>> getattr(s, 'age', 20)  # 获取age属性,如果属性不存在,就返回默认值20


    查看全部
    • kw是字典,iteritems()用于遍历字典kw,而setattr(self, k, v)就等价于self.k = v


       

    • setattr(self,k,v) 是相当于self.k = v

    • 官方文档内容:
      setattr(object, name, value)

    查看全部
  • functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:

    >>> import functools
    >>> int2 = functools.partial(int, base=2)
    >>> int2('1000000')
    64
    >>> int2('1010101')
    85

    所以,functools.partial可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值,这样,新函数调用的难度就降低了。

    任务

    在第7节中,我们在sorted这个高阶函数中传入自定义排序函数就可以实现忽略大小写排序。请用functools.partial把这个复杂调用变成一个简单的函数:

    sorted_ignore_case(iterable)

    参考代码:

    import functools
    sorted_ignore_case = functools.partial(sorted, cmp=lambda s1, s2: cmp(s1.upper(), s2.upper()))
    print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])


    查看全部
    0 采集 收起 来源:python中偏函数

    2020-03-21

  • 请思考带参数的@decorator,@functools.wraps应该放置在哪:

    def performance(unit):
        def perf_decorator(f):
            def wrapper(*args, **kw):
                ???
            return wrapper
        return perf_decorator

    参考代码:

    import time, functools
    def performance(unit):
        def perf_decorator(f):
            @functools.wraps(f)
            def wrapper(*args, **kw):
                t1 = time.time()
                r = f(*args, **kw)
                t2 = time.time()
                t = (t2 - t1) * 1000 if unit=='ms' else (t2 - t1)
                print 'call %s() in %f %s' % (f.__name__, t, unit)
                return r
            return wrapper
        return perf_decorator
    
    @performance('ms')
    def factorial(n):
        return reduce(lambda x,y: x*y, range(1, n+1))
    print factorial.__name__


    查看全部
  • sorted(L, f):高阶函数,接受函数f对L进行排序,函数f的返回值为-1,1,0;

    查看全部
  • 这里map作用的s其实是list中的各个元素,而非list本身,所以这里s[0]已经是指首字母了

    查看全部

举报

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

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

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