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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 初学python的闭包,不知道这样理解有没有错误和理解不到位的地方

    def count():#定义一个计算函数

        fs = []#创建一个空的列表

        for i in range(1, 4):#循环条件i从1到三

            def f():#本来想创建一个闭包的错误函数

                 return i*i#返回值是i的平方

            fs.append(f)#往空列表依次增加刚刚定义的函数

        return fs#返回空的列表

     

    f1, f2, f3 = count()#依次把count里面的三个函数赋给f1, f2, f3

    print f1(),f2().f3()#之所以三个函数的返回值均为9是因为f1()的调用时基于i等于3,故产生了错误的值。

     

     

     

     

     

    def count():

        fs = []

        for i in range(1, 4):#以下是正确的闭包

            def f(j):#定义函数f(j)  j为形参

                def g():#定义函数g

                    return j*j#返回值为j的平方

                return g   #返回值为函数g

               

               

            fs.append(f(i))#每i变化一次都往里面list里面放入一个函数g,且里面的形参至关重要为外函数的i,故每次调用f1()不会因为i已经变为三而出错

        return fs

     

    f1, f2, f3 = count()

    print f1(),f2(), f3()

    另外应该需要注意fs.append(f())与fs.append(f)的区别


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

    2019-02-23

  • 2-11、python中decorator装饰器

    1、添加新功能而不修改原函数

    2、利用高阶函数,接收函数为参数,返回新函数

    3、python内置@语法简化装饰器调用

    4、作用极大简化代码

         a、@log 打印日志

         b、@performance 检测性能

         c、@transaction 数据库事务

         d、@post('/register') URL路由

    查看全部
  • 2-10、python中的匿名函数

    1、lambda x:x*x,x为参数,返回值为x*x即表达式的结果

    2、只能有一个表达式,不写return


    查看全部
  • 2-9、python中的闭包

    1、闭包:内层函数引用外层函数的变量,然后返回内层函数

    2、函数内部定义的函数无法被外部访问

    3、闭包特点:返回的函数引用了外层函数的局部变量,要确保引用的局部变量在函数返回后不能变

    4、本题,在count函数的循环内部,借助f函数,避免引用循环变量i

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

    2019-02-22

  • 2-8、python中的返回函数

    1、在函数f内部定义函数g,并返回函数g,调用f可返回g

    2、返回函数可以把一些计算延迟执行

    3、本例:

        a、先定义一个计算乘积的函数

             def f(x,y):

                    return x*y

        b、使用reduce函数调用乘积函数处理lst

              def lazy_prod():

                     def f(x,y):

                           return x*y

                    return reduce(f,lst,1)

          c、定义函数,内部调用该函数:

               def cal_prod(lst):

                    def lazy_prod():

                           def f(x,y):

                                return x*y

                     return reduce(f,lst,1)

               return cal_prod

               

    查看全部
  • 2-7、python中的自定义排序函数

    参数:比较函数和list

    比较函数:如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0

    本例:全部转换大写,再进行比较

    查看全部
  • 2-6、python中的filter()函数

    参数:f和list,f对list的每个元素进行判断,返回True、False

    返回:符合条件的元素list

    函数s.strip(rm):删除s字符串中开头、结尾出的rm序列的字符,rm空时,删除空字符串(\n,\r,\t)

    查看全部
  • 2-5、python中的reduce()函数

    参数:函数f、list

    特点:f必须接收2个参数

    操作:对list的每个元素反复调用f

    返回:最终结果值(不是list)

    查看全部
  • 2-4、python中的map()函数

    1、python内置的高阶函数,参数:函数f和list,处理:h函数f作用list的每个元素,返回:新list

    查看全部
  • 实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的:

    class Person(object):
    
        def __init__(self, name):
            self.__name = name
    
        def get_name(self):
            return self.__name

    get_name(self) 就是一个实例方法,它的第一个参数是self。__init__(self, name)其实也可看做是一个特殊的实例方法。

    调用实例方法必须在实例上调用:

    p1 = Person('Bob')
    print p1.get_name()  # self不需要显式传入# => Bob


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

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

    定义类属性可以直接在 class 中定义:

    class Person(object):    address = 'Earth'
        def __init__(self, name):
            self.name = name

    因为类属性是直接绑定在类上的,所以,访问类属性不需要创建实例,就可以直接访问:

    print Person.address# => Earth


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

    class Person(object):
        def __init__(self, name):
            self.name = name
            self._title = 'Mr'
            self.__job = 'Student'
    p = Person('Bob')
    print p.name
    # => Bob
    print p._title
    # => Mr
    print p.__job
    # => Error
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'Person' object has no attribute '__job'


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

    class Person(object):    def __init__(self, name, gender, birth):
            self.name = name
            self.gender = gender
            self.birth = birth

    __init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。

    相应地,创建实例时,就必须要提供除 self 以外的参数:

    xiaoming = Person('Xiao Ming', 'Male', '1991-1-1')
    xiaohong = Person('Xiao Hong', 'Female', '1992-2-2')

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

    print xiaoming.name# 输出 'Xiao Ming'print xiaohong.birth# 输出 '1992-2-2'


    查看全部
  • 在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类如下:

    class Person(object):
        pass

    按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。类的继承将在后面的章节讲解,现在我们只需要简单地从object类继承。

    有了Person类的定义,就可以创建出具体的xiaoming、xiaohong等实例。创建实例使用 类名+(),类似函数调用的形式创建:

    xiaoming = Person()
    xiaohong = Person()


    查看全部

举报

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

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