Python学习(1)

今天看到一个博客,列出了如下问题:

1. 是否了解动态语言的鸭子模型?
2. 是否了解可变参数与关键字参数?
3. 对函数式编程有初步了解
4. 是否知道列表生成式?
5. 是否知道lambda/decorator/slots?
6. 为什么要把缺省参数设为immutable?
7. 是否知道Mixin?
8. 是否知道WSGI接口?
9. 是否知道异步框架如gevent/tornado?
10. 是否深入了解过Python的GC和GIL?
11.是否了解python对象的查找机制?
</pre><pre code_snippet_id="263201" snippet_file_name="blog_20140329_1_1339813" name="code" class="python">那就从这些问题开始深入理解Python吧
1. 装饰器:接收一个函数,返回一个增强版本的函数,主要用于:参数检查、缓存、代理、上下文提供者,
<p>2.在python中,访问一个属性的优先级顺序为:(1).类的属性(2).数据描述有__del__, __get__, __set__, 实现了这三个方法的类就是数据描述符了。3).实例的属性 (4).非数据描述符 就是除了上面提到的,没实现del, get, set这三个方法的类就是非数据描述符了。(只实现了get也是非数据描述符)dir(object)['__class__', '__delattr__</p><p>', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__''__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'就是非数据描述符了</p><p>3.元编程</p><p>可以通过__new__ and __metaclass__两个方法,在运行时修改类和对象的定义__new__:类实例化时被调用</p><p><span style="white-space:pre"></span>__metaclass__: 创建类时会去寻找它,找到了则用它来创建类,没找到则用type来创建类,type可以说是默认的类创建器,所有的类创建本质都是由它来创建的</p><p><span style="white-space:pre"></span>因此使用__metaclass__可以实现你想创建的类</p><p><span style="white-space:pre"></span>class Foo(object):</p><p><span style="white-space:pre"></span>__metaclass__ = dosomething</p><p><span style="white-space:pre"></span>tyep创建类的格式:(类名, 父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值))</code></span></p><p><span style="white-space:pre"><a target=_blank target="_blank" href="http://blog.jobbole.com/21351/">参考http://blog.jobbole.com/21351/</a></span></p><p></p><p>4. 槽__slots__:</p><p><span style="white-space:pre"></span>类的每一个实例都有一个__dict__,用来维护这个实例的变量,所以每一个实例都会有__dict__,这会浪费空间</p><p><span style="white-space:pre"></span>__slots__就是阻止实例化类时分配__dict__,类的实例只能拥有__slots__定义的那些变量。class base(object):</p>    v = 1
    def __init__(self):
        pass

a=base()

a.x = 2# -------> OK

 class bases(object):
     __slots__=('y')
    v =1
    def __init__(self):
         pass

a=bases()

a.y = 4 ------>OK

a.x = 4 ----->AttributeError: 'bases' object has no attribute 'x'


5. classmethod, staticmethod

 class Foo(object):
	def test(self):
		print "test"
	@staticmethod
	def test2():
		print "static"
	@classmethod
	def test3(cls):
		print "class",cls.__name__
class Foo1(Foo):
	pass
>>>Foo.test3()
class Foo

>>>Foo1.test3()
class Foo1

classmethod可以将子类作为参数传进来,staticmethod则不能,它只属于Foo类。


6.abstractmethod

@abc.abstractmethod,实现抽象类


7.可变参数与关键字参数?



函数参数分为四部分:
arg1,arg2,key1,key2普通参数
*arg 非关键字参数列表
**keywords 关键字参数列表


函数声名部分,参数的四个部分不可颠倒位置,可以没有其中某几部分。


python函数的这种特性使得函数参数更加灵活,参数个数也不受限制。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值