zoukankan      html  css  js  c++  java
  • python基础和注意点概要2

    1. range和xrange
    xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。

    对生成器进行迭代时,元素是逐个被创建的。一般来看,在对大序列进行迭代的时候,因为xrange的特性,所以它会比较节约内存。


    2. 迭代
    可迭代对象(iterable):可以直接作用于for循环的对象
    迭代器(itertor): 可以被next()函数调用并不断返回下一个值的对象
    可迭代对象 -> iter() -> 迭代器 -> next()

    列表推导式:mylist = [x*x for x in range(3)]


    生成器是一种特殊的迭代器,两种方式:
    1)生成器函数
    使用yield语句而不是return语句返回结果;
    yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

    在执行过程中,遇到yield就中断,下次又继续执行

    把函数改成generator后,我们基本上从来不会用next()来调用它,而是直接使用for循环来迭代,比如

    for n in fib(6):
         print n

    2)生成器表达式
    类似迭代器中的列表推导式,只不过用()代替[]
    mygenerator = (x*x for x in range(3))

     3/5

    1. __init__和__new__
    实例化一个类时:
    __init__是在类实例创建之后调用,而 __new__方法正是创建这个类实例的方法。

    __new__的作用:
    当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径
    比如需要一个永远都是正数的整数类型:
    对于int这种 不可变的对象,我们只有重载它的__new__方法才能起到自定义的作用。
    class PositiveInteger(int):
    def __new__(cls, value):
    return super(PositiveInteger, cls).__new__(cls, abs(value))
    i = PositiveInteger(-3)
    print i # 3


    2. 回调函数
    #回调函数
    def double(x):
    return x*2

    def quadruple(x):
    return x*4

    #中间函数
    def middle(k, middleMethod):
    return 1 + middleMethod(k)

    #程序入口
    i = middle(4,double)
    print i

    i = middle(4,quadruple)
    print i


    3. 单例模式
    确保某一个类只有一个实例存在

    使用模块

    使用 __new__
    https://www.cnblogs.com/loveyouyou616/p/7440064.html

    使用装饰器(decorator)
    http://blog.csdn.net/linshengchao123/article/details/47775383

    使用元类(metaclass)


    4.实例方法/类方法/静态方法
    实例方法有self参数,类方法有cls参数,静态方法是不需要这些附加参数的。

    静态方法不能访问类变量和实例变量;
    使用静态方法的好处是,不需要定义实例即可使用这个方法。另外,多个实例共享此静态方法。

    class Person:
    grade=1
    def __init__(self,name):
    self.name = name
    def sayHi(self):#加self区别于普通函数
    print 'Hello, your name is?',self.name

    @staticmethod #声明静态,去掉则编译报错;还有静态方法不能访问类变量和实例变量
    def sayName():#使用了静态方法,则不能再使用self
    print "my name is king"#,grade,#self.name

    @classmethod #类方法
    def classMethod(cls):
    print("class method")

    p = Person("king")
    p.sayHi()
    p.sayName()
    p.classMethod()
    Person.classMethod()

    输出:
    Hello, your name is? king
    my name is king
    class method
    class method


    5.闭包函数
    在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。
    内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
    https://www.cnblogs.com/Lin-Yi/p/7305364.html

    6.字典排序

    d = [('a', 1), ('b', 22), ('c', 3)]
    dict(sorted(d.items(),key=lambda x:x[1],reverse = True))

    7. 占位符
    整数占位符:%d
    浮点数占位符:%f # %.xf 则是精确至小数点后x位
    字符串占位符:%s

  • 相关阅读:
    73. Set Matrix Zeroes
    289. Game of Live
    212. Word Search II
    79. Word Search
    142. Linked List Cycle II
    141. Linked List Cycle
    287. Find the Duplicate Number
    260. Single Number III
    137. Single Number II
    Oracle EBS中有关Form的触发器的执行顺序
  • 原文地址:https://www.cnblogs.com/stellar/p/8493966.html
Copyright © 2011-2022 走看看