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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 为了算时间所以引入r 调用一次f

    不是直接return f

    查看全部
  • map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    [1, 4, 9, 16, 25, 36, 49, 64, 81]

    等价于

    def f(x):
        return x * x
        map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])


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

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

    2019-03-24

  • math.sqrt 函数的返回值是浮点型


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

    查看全部
  • def calc_prod(lst):
        def list1():
            def prod(x, y):
                return x*y
            print reduce(prod, lst)
        return list1

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

    输出

    24

    none

    查看全部
  • 数列使用匿名函数(lambda x:x*x,[])

    sorted函数使用匿名函数([ ],lambda x:-cmp(x,y))

    带条件使用匿名函数 myabs=lambda x:-x if x<0 else x

    查看全部
  • 匿名函数 lambda x:x*x


    查看全部
  • def format_name(s):
        return  str.capitalize(s)
    print map(format_name, ['adam', 'LISA', 'barT'])


    查看全部
  • 请定义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


    查看全部
  • int()函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做 N 进制的转换

    functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2()

    partial 

    adj.部分的; 偏爱的; 偏袒的; 钟爱的;
    n.[数学] 偏微商;


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

    2019-03-23

  • @functools.wraps应该作用在返回的新函数上

    查看全部
  • python中返回函数

    Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数!

    例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写:

    def f():
        print 'call f()...'    # 定义函数g:
        def g():
            print 'call g()...'    # 返回函数g:
        return g

    仔细观察上面的函数定义,我们在函数 f 内部又定义了一个函数 g。由于函数 g 也是一个对象,函数名 g 就是指向函数 g 的变量,所以,最外层函数 f 可以返回变量 g,也就是函数 g 本身。

    调用函数 f,我们会得到 f 返回的一个函数:

    >>> x = f()   # 调用f()call f()...
    >>> x   # 变量x是f()返回的函数:<function g at 0x1037bf320>
    >>> x()   # x指向函数,因此可以调用call g()...   # 调用x()就是执行g()函数定义的代码

    请注意区分返回函数和返回值:

    def myabs():
        return abs   # 返回函数def myabs2(x):
        return abs(x)   # 返回函数调用的结果,返回值是一个数值

    返回函数可以把一些计算延迟执行。例如,如果定义一个普通的求和函数:

    def calc_sum(lst):
        return sum(lst)

    调用calc_sum()函数时,将立刻计算并得到结果:

    >>> calc_sum([1, 2, 3, 4])
    10

    但是,如果返回一个函数,就可以“延迟计算”:

    def calc_sum(lst):
        def lazy_sum():
            return sum(lst)
        return lazy_sum

    # 调用calc_sum()并没有计算出结果,而是返回函数:

    >>> f = calc_sum([1, 2, 3, 4])
    >>> f
    <function lazy_sum at 0x1037bfaa0>

    # 对返回的函数进行调用时,才计算出结果:

    >>> f()
    10

    由于可以返回函数,我们在后续代码里就可以决定到底要不要调用该函数。

    任务

    请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。

    • 先定义能计算乘积的函数,再将此函数返回。

      参考代码:

      def calc_prod(lst):
          def lazy_prod():
              def f(x, y):
                  return x * y
              return reduce(f, lst, 1)
          return lazy_prod
      f = calc_prod([1, 2, 3, 4])
      print f()


    查看全部
  • 任务

    请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:

    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    • ?不会了怎么办

    • filter() 接收的函数必须判断出一个数的平方根是否是整数,而 math.sqrt()返回结果是浮点数。

    • range()函数从第0为开始

      参考代码:

      import math
      def is_sqr(x):
          r = int(math.sqrt(x))
          return r*r==x
      print filter(is_sqr, range(1, 101))
    查看全部

  • 在Python 3.x中,字符串统一为unicode,不需要加前缀 u,而以字节存储的str则必须加前缀 b。



    from __future__ import unicode_literals

    s = 'am I an unicode?'
    t = b'am I an str?'
    print isinstance(s, unicode)
    print isinstance(t,str)

    查看全部

举报

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

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