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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • def count():
       fs = []
       for i in range(1, 4):
           def f(m = i):
               return m * m
           fs.append(f)
       return fs

    f1, f2, f3 = count()
    print f1(), f2(), f3()
    方法:问题的产生是因为函数只在执行时才去获取外层参数i,若函数定义时可以获取到i,问题便可解决。而默认参数正好可以完成定义时获取i值且运行函数时无需参数输入的功能,所以在函数f()定义中改为f(m = i),函数f返回值改为m*m即可.

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

    2018-03-23

  • 返回闭包不能引用循环变量,请改写count()函数,让它正确返回能计算1x1、2x2、3x3的函数。


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

    2018-03-23

  • Python中_future_的使用

    当Python新版本与旧版本不兼容时,该特性将会在旧版本中添加到_future_中,以便代码能够在旧的版本中实现新的特性

    例如:

    Python2中   /   表示整除     但是在Python3中   //才表示整除  /将得到带浮点数的结果

    在Python2中用_future_ 方法可以用到Python3中的特性

    from  _future_  import division

    print 10/3

    就可以得到浮点数的结果3.333333333.....


    查看全部
  • python 中的动态导入

    如果导入的模块不存在,Python解析器就会报错 ImportError

    可以用动态导入的方式解决这样的问题

    用到  try 语句

     例如:两个不同的模块都提供了相同的功能,StringIO和cStringIO都提供了StringIO这个功能

    而Python时动态语言,解释执行,因此Python代码的运行速度慢

    可以通过利用c语言对函数重写,从而提高执行速度

    StringIO是纯Python语言编写的,cStringIO部分是c语言编写的,所以后者的执行效率更高

    利用ImportError错误,我们经常在Python中动态导入模块:

    try:
       from cStringIO import StringIO
    except ImportError:
       from StringIO import StringIO

    分析:先尝试从cStringIO导入,如果失败(没有安装cStringIO)再从String去导入

    try语句可以捕获错误 ,当指定的错误出现后,再执行except后的代码


    查看全部
  • 内层函数引用了外层函数的变量,然后返回内层函数  称之为闭包  

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

    2018-03-23

  • 首先 我们要清楚sorted函数的语法:

    sorted(iterable, cmp=None, key=None, reverse=False)

    iterable --  可迭代对象。

    cmp -- 比较的函数,有两个参数,都是从可迭代对象中取出,大于则返回1,小于则返回-1,等于则返回0。

    key -- 调用比较元素,只有一个参数取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

    reverse -- 排序规则,reverse = True  降序 , reverse = False 升序(默认)。

    明白了每个参数的意义,我们知道要修改的是key,将比较的元素都变成统一大小写,那我们输入一个匿名函数:key=lambda x:x.upper()


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

    2018-03-23

  • Python之导入模块

    可以通过导入模块,调用所导入模块的函数或模块中的变量

    如果只需要导入模块中的部分函数而不是所有的函数,可以使用  from...import  导入

    例如:导入函数math中的 pow sin log这三个函数

    from math import pow,sin,log

    通过from...import导入的函数可以直接调用,无需再加上模块名  ;调用时直接用   sin(  )

    如何解决导入模块的函数与自身模块中函数同名的冲突问题呢?

    可以通过给导入模块的函数进行重命名 “别名”

    例如:函数math和logging两个模块中都有   log这个函数

    使用时,按照下面的方法重命名

    from math import log

    from logging import log as logger    #logging模块的log在当前模块中就变成了logger

    print log(10)

    logger(10,'import from logger')    #调用的是logging中的log

    查看全部
  • 所以这装饰器有啥用呢 越来越麻烦 看不出使用decorator意义何在

    查看全部
  • Python中的模块和包

    一个模块就是一个.py文件   例如xx.py

    不同模块中,两个同名的变量互不影响  

    引用其他模块中的函数的方法:

    用import关键字引入模块 引用模块中的方法时,使用    模块名.方法名    进行调用

    例如:

    #test2.py   自身的模块名称

    import  test1    #引入模块

    print test1.func1( )  #在其他模块中调用所引入模块中的函数func1( )

    查看全部
  • import functools


    sorted_ignore_case = functools.partial(sorted,key=str.lower)


    print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])


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

    2018-03-23

  • __init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法)<br> <br> *args是一般的普通参数, 实际传入的是一个元组,如(a,b), **kwargs是关键字参数,用于传key=value这样的参数<br> <br> 解释器内部会将**kw拆分成对应的dict.<br> setattr()方法接受3个参数:setattr(对象,属性,属性的值)<br> setattr(self,k,v)相当于self.k = v<br> kw.iteritems()历遍字典kw的所有key和value,分别匹配k,v 遍历一个dict三种方法:(注意迭代dict都是没有顺序的) 1.for i in dict: #i迭代dict中的每一个key 2.for (i,v) in dict.items(): # (i,v)迭代dict.items()函数返回的长度为dict中key:value序对个数的list,这个list中每个元素又为一个二维list,元素皆为(key,value); 3.for i,v in dict.iteritems(): #大体与2同,不过dict.iteritems()是一个迭代器,随着for 循环执行一次,读取一个(key,value),更节省资源。

    查看全部
  • import time, functools


    def performance(unit):

        def perf_decorator(f):

            @functools.wraps(f) #复制在这里

            def wrapper(*args, **kw):

                print  'call', f.__name__, '()in', time.time()

                return f(*args,**kw)

            return wrapper

        return perf_decorator

        

    @performance('ms')

    def factorial(n):

        return reduce(lambda x,y: x*y, range(1, n+1))


    print factorial.__name__


    查看全部
  • import time

    from functools import reduce


    def performance(unit):

        def pertime(f):

            def wrapper(*args,**kw):

                #print  'call', f.__name__, '()in', time.time()

                print('call %s () %s' % (f.__name__ , time.time()))

                return f(*args,**kw)

            return wrapper

        return pertime


    @performance('ms')

    def factorial(n):

        return reduce(lambda x,y: x*y, range(1, n+1))


    print(factorial(10))

    查看全部
  • Python中的偏函数

    当一个函数有多个参数时,调用该函数时就需要提供多个参数,通过使用Python中的偏函数,可以减少参数的个数,从而简化调用的负担;

    例如:int()函数 转整函数,可以接收一个字符串,将其转化成整数,返回结果

    但int()函数还提供第二个额外的参数base参数 ,他的默认值为10 ,如果调用时不传入:默认按十进制转换,传入参数后就根据传入的参数N进行转换

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

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

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


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

    2018-03-23

  • 按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。

    查看全部

举报

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

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