Python知识点

本文介绍了Python编程的一些关键知识点,包括私有变量的标识(__xxx__和__xxx)、使用单下划线和双下划线的保护变量与私有变量的区别。此外,还探讨了pickle序列化和unpickling的安全性,以及生成器(yield)在创建迭代器中的作用。进一步讲解了Python内存管理机制,如引用计数和分代垃圾回收策略。最后,提到了装饰器和lambda函数在代码增强及简洁表达方面的应用,并简单提及了Python的单例模式。

1.基础

_xxx 不能用’from module import *’导入
__xxx__ 系统定义名字
__xxx 类中的私有变量名
核心风格:避免用下划线作为变量名的开始


“单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
“双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。


2.关于pickling与unpickling

pickling过程是将python对象转换成字符串,存储到文件中。pickling要比使用纯文本文件安全。

import pickle
data = {'one':1,
             'two':2,
             'three':3 }
pklF = open('data.pkl', 'wb')
pickle.dump(data, pklF)  #把pickled数据写入文件
pklF.close()


unpickling过程是从pickling过程存储的字符串文件中提取原始的python对象
import pickle
pklF = open('data.pkl', 'rb')
data = pickle.load(pklF) #把数据load到变量中去
print data
pklF.close()

3.生成器yield

yield的作用是把一个函数变成一个生成器generator,带有yield的函数不再是一个普通函数,Python解释器会将其视为一个generator,当调用该函数时不会立即执行,而是返回一个iterator对象


4.python内存管理

在Python中,每个对象都有存有指向该对象的引用总数,即引用计数。当Python的某个对象的引用计数降为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了。
Python同时采用了分代(generation)回收的策略。这一策略的基本假设是,存活时间越久的对象,越不可能在后面的程序中变成垃圾。Python将所有的对象分为0,1,2三代。所有的新建对象都是0代对象。当某一代对象经历过垃圾回收,依然存活,那么它就被归入下一代对象。垃圾回收启动时,一定会扫描所有的0代对象。如果0代经过一定次数垃圾回收,那么就启动对0代和1代的扫描清理。当1代也经历了一定次数的垃圾回收后,那么会启动对0,1,2,即对所有对象进行扫描。


5.python装饰器

代码运行期间动态增加功能的方式,称之为“装饰器”

import functools

def log(text):      #带参数的decorator
    def decorator(func):
        @functools.wraps(func)    #复制被装饰函数func的__name__属性到wrapper函数中
        def wrapper(*args, **kw):
            print '%s %s():' % (text, func.__name__)  #添加的功能
            return func(*args, **kw)
        return wrapper
    return decorator

@log("execute")
def fun():
    print "fun is decorated"

4.python中的lambda

lambda定义了一个匿名函数,是一个表达式而非语句。

lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。

f = lambda x, y, z : x+y+z
print f(1,2,3)

L = [(lambda x:x+1),
        (lambda x:x+2),
        (lambda x:x+3)]
print L[0](2), L[1](2),L[2](2)

5.python单例模式

class Singleton(object):
    __instance = None

    def __init__(self):
        pass

    def __new__(cls, *args, **kwagrs):
        if not cls.__instance:
            cls.__instance = super(Singleton, cls).__new_(cls, *args, *kwargs)
        return cls.__instance



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值