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

原文地址:https://www.cnblogs.com/stellar/p/8493966.html