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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • Python偏函数:自定义排序函数sorted ,lambda函数


    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中偏函数

    2019-03-30

  • python 闭包?!确保引用局部变量在函数返回后不能变

    def count():

        fs = []

        for i in range(1, 4):

            def f(i):

                def g():

                    return i*i

                return g

            fs.append(f(i))

        return fs


    f1, f2, f3 = count()

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


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

    2019-03-30

  • def is_sqr(x): return math.sqrt(x) in range(1,101) print filter(is_sqr, range(1, 101)) range生成的是全整数的list,所以判断sqrt(x)是否在整数中,可转为判断range生成的整数list
    查看全部
  • 核心是fs append的是三个不同的函数(i为1,2,3时g函数)指向的地址,三个函数指向不同地址,而之前append的都是f这同一个函数指向的地址,所以i变化时,f1f2f3都会变化

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

    2019-03-30

  • 课程

    \后端开发

    \Python

    \python进阶

    举报

    • 分享

    •   

    关注

    5b8ce8a20001e37e02000200-40-40.jpg 慕移动2429273

    我这样写也能运行成功,帮我看看有没有什么不合理的地方呢?

    def count():

        fs = []

        for i in range(1, 4):

            def f(i):

                 return i*i

            fs.append(f(i))

        return fs


    f1, f2, f3 = count()

    print f1, f2, f3

    和这个对比下,就知道为啥了

    1. 在原题目中fs.append(f)是向fs这个list中新增了函数(函数成为了list的元素),并且该函数还并未被调用,也就是没有运行,也就没有计算i*i的值,函数中的变量i会随着for循环而改变,循环了3次,i的值最终变成了3。

      这段代码f1, f2, f3 = count(),是将count中的元素按顺序分别赋给变量f1,f2,f3,在最后调用函数f1(),f2(),f3()时,才进行了i*i的计算,此时i=3,所以结果都是9。

    2. 你的代码fs.append(f(i))此时已经调用了函数f(),且进行了i*i的计算,并把计算的值加进了fs这个list,计算后得出的值是不会改变的,成为了fs的一个元素。

      https://img1.sycdn.imooc.com//5c6bb2ef00012c4a07610241.jpg

      你的代码运行结果,此时count()就是list   [1,4,9]

    3. 你的代码最后f1, f2, f3 = count(),其实就是把1,4,9分别赋给了f1,f2,f3。


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

    2019-03-30

  • 内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)

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

    2019-04-03

  • def calc_prod(lst):


        def prod():


            inte=1


            for l in lst :


                inte=inte*l


            return inte#attention the return position


        return prod




    f = calc_prod([1, 2, 3, 4])


    print f()


    查看全部
  • def calc_prod(lst):

        def prod():

            inte=1

            i=0

            while i<4:

        

                inte=inte*lst[i]

                i=i+1

     

            return inte #mind the return the position ,while no return ,no too much return the fist is right

        

        return prod


    f = calc_prod([1, 2, 3, 4])

    print f()


    查看全部
  • def calc_prod(lst):

        def prod():

            inte=1

            for name in lst :

                inte=inte*name

                return inte

        return prod


    f = calc_prod([1, 2, 3, 4])

    print f()


    查看全部
  • 类的属性称为方法

    查看全部
  •  sorted()函数可对list进行排序:

    >>>sorted([36, 5, 12, 9, 21])
    [5, 9, 12, 21, 36]


    查看全部
  • 装饰器的作用
    查看全部
  • def cmp_ignore_case(s1, s2):

            if s1.lower()>s2.lower():

                return 1

            if s1.lower()<s2.lower():

                return -1

    return 0

    print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)


    查看全部
  • import math


    def is_sqr(x):

        return math.sqrt(x)%1==0


    print filter(is_sqr, range(1, 101))

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

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

    a = '     123'
    a.strip()

    结果: '123'

    a='\t\t123\r\n'
    a.strip()

    结果:'123'


    查看全部
  • def format_name(s):

    return s[0].upper()+s[1:].lower()


    print(list(map(format_name, ['adam', 'LISA', 'barT'])))

    python3

    查看全部

举报

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

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