zoukankan      html  css  js  c++  java
  • python参考手册--第4、5、6、7章

    1.zip

    zip(s,t):将序列组合为一个元组序列[(s[0],t[0]), (s[1],t[1]), (s[2],t[2]), (s[3],t[3]),...]

    >>> s = [1,2,3,4,5,6]
    >>> t = ['a','b','c','d','e','e']
    >>> zip(s,t)
    [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'e')]

    2.assert,__debug__()

    assert 、__debug__()用于调试

    3.作用域

    解析名称时首先检查局部作用域,然后由内向外检查外部嵌套函数定义的作用域,找不到再搜索全局名称和内置命名空间。

    python3中可以使用nonlocal var,将var绑定到外部嵌套函数中定义的变量。建议还是通过参数传进来吧。以兼容python2.

    可以通过闭包嵌套实现延迟求值或惰性求值:

    >>> from urllib import urlopen
    >>> def page(url):
        def get():
        return urlopen(url).open()
        return get

    >>> baidu = page('www.baidu.com')
    >>> baiduData = baidu()

    4.装饰器

    用于增强类或者方法:

    @foo

    @bar

    def func(x):

      pass

    等价于

    def func(x):

      pass

    func = foo(bar(func))

    装饰器可以带参数:

    @bar(x)

    5.列表推导及生成器表达式

    (1)列表推导

    >>> a = [1,3,4,5,6,7,8]
    >>> b = [2*s for s in a]
    >>> b
    [2, 6, 8, 10, 12, 14, 16]

    (2)生成器表达式

    >>> a = [1,3,4,5,6,7,8]
    >>> b = (10*s for s in a)
    >>> b
    <generator object <genexpr> at 0x02DAC170>
    >>> b.next()
    10
    >>> b.next()
    30

    列表推导与生成器表达式区别:前者创建了包含结果数据的列表,后者只知道如何安装需要生成数据的生成器,内存分配有需要再分配。类似于range(n)与xrange(n)的区别。

    6.lambda表达式

    lambda语句用于创建表达式形式的匿名函数。

    >>> a = lambda x,y: x+y
    >>> r = a(4,6)
    >>> r
    10

    7.compile、exec、eval

    compile将字符串编译成代码对象(语句)或者表达式,exec执行代码对象(语句),eval执行表达式

    >>> s = "for i in range(0,10): print(i)"
    >>> c = compile(s,'','exec')
    >>> exec(c)
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

    >>> x = 10
    >>> y = 100
    >>> t = '3*x + 4*y'
    >>> b = compile(t,'','eval')
    >>> result = eval(b)
    >>> result
    430

    8.类中self

    类会定义命名空间,但是不会为在方法体内使用的名称限定范围,所以在实现类时,对属性和方法引用必须用self限定。

    9.类的多继承

    class Derived(Base1,Base2,Base3)

    这点与java不一样,java中不能多继承,只能通过接口实现。

    10.动态绑定和鸭子类型

    动态绑定:类属性查找顺序,实例本身内部-》实例的类定义-》基类的类定义。

    这种查找模式是:鸭子类型(duck typing):如果看起来像、叫声像而且走起路来像鸭子,那么他就是鸭子。

    这点与java不一样,java中不能多继承,只能通过接口实现。

    11.staticmethod、property

    @staticmethod:静态方法(装饰器)。

    @property:特性(装饰器),实现以属性的方式访问该装饰器修饰的方法。实质是通过get、set、delete方法来进行访问。

    12.抽象基类

    python中创建抽象基类,需要使用abc模块,该模块定义了一个元类:ABCMeta和一组装饰器(@abstractmethod和@abstractproperty)

    >>> from abc import ABCMeta, abstractmethod, abstractproperty
    >>> class Foo:
        __metaclass__ = ABCMeta
        @abstractmethod
        def spam(self,a,b):
          pass
        @abstractproperty
        def name(self):
          pass

    抽象基类不能实例化。

    13.元类

    显示的指定其元类:__metaclass__ = ABCMeta

    如果不显示的指定,则默认元类为:types.ClassType

    14.类装饰器

    类装饰器是一个函数,他以类作为输入,类作为输出

  • 相关阅读:
    今天晚上有个什么样的博文呢
    STM8CubeMx来了
    开博啦
    Authentication
    文件上传设计要点
    分布式杂记
    SQL Server 知识集
    C# 集合使用误区
    网络知识集
    关于 elasticsearch 近实时特征的思考
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/3524395.html
Copyright © 2011-2022 走看看