
Python
文章平均质量分 62
rommi
这个作者很懒,什么都没留下…
展开
-
理解 Python super mro
今天在知乎回答了一个问题,居然一个赞都没有,也是神奇,毕竟这算是我非常认真答的题之一。既然如此就贴过来好了,有些内容之后再补充。原问题Python中既然可以直接通过父类名调用父类方法为什么还会存在super函数?比如class Child(Parent): def __init__(self): Parent.__init__(self)这种方式转载 2016-04-04 20:38:22 · 1710 阅读 · 1 评论 -
Python 类成员函数第一个参数self
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。你一定很奇怪Python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清晰。假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObj转载 2016-04-20 19:44:58 · 6461 阅读 · 0 评论 -
Python With
with如何工作?紧跟with后面的语句被求值后,返回对象的 __enter__() 方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的 __exit__()方法。#!/usr/bin/env python# with_example01.pyclass Sample: def __enter__(se转载 2016-05-16 19:16:20 · 292 阅读 · 0 评论 -
Python Enumerate
def enumerate(collection): 'Generates an indexed series: (0,coll[0]), (1,coll[1]) ...' i = 0 it = iter(collection) while 1: yield (i, it.next()) i += 1enumer原创 2016-05-17 19:40:13 · 549 阅读 · 0 评论 -
Python is和==区别
1. is 是比较对象id是否相等,是否是同一对象,是否内存地址相同2. ==是比较内容是否相等a1 = "Hi"b1 = "Hi"a is b Truea== b Truea2 = "long sentence"b2 = "long sentence"a is b Falsea== b Truepython有string interning机制,原创 2016-05-17 19:56:43 · 265 阅读 · 0 评论 -
Python __init__.py 用法
python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module。那么,__init__.py还有什么别的功能呢?其实,__init__.py里面还是可以有内容的,我们在导入一个包时,实际上导入了它的__init__.py文件。我们可以再__init__.py文件中再导入其他的包,或者模块。[python]import rea转载 2016-05-18 19:25:05 · 727 阅读 · 0 评论 -
Python import 和 from import区别
导入mode,import与from...import的不同之处在于,简单说:如果你想要直接输入argv变量到你的程序中而每次使用它时又不想打sys,则可使用:from sys import argv一般说来,应该避免使用from..import而使用import语句,因为这样可以使你的程序更加易读,也可以避免名称的冲突from ... import 可能会导致命名冲突原创 2016-05-23 19:08:29 · 2635 阅读 · 0 评论 -
Python With
上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了__enter__() 和 __exit__() 方法。上下文管理器定义执行 with 语句时要建立的运行时上下文,负责执行 with 语句块上下文中的进入与退出操作。通常使用 with 语句调用上下文管理器,也可以通过直接调用其方法来使用。运行时上下文(runtime cont转载 2016-06-06 20:15:49 · 385 阅读 · 0 评论 -
Python @classmethod和@staticmethod区别
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别转载 2016-04-20 20:04:27 · 630 阅读 · 0 评论 -
python 类成员变量
class A(object): x = 0 # static variable def __init__(self): self.x = 1 # instance variableprint (A.x) # display 0a = A()print (a.x) # display 1原创 2016-07-20 14:20:19 · 525 阅读 · 0 评论 -
Python 函数默认参数不能使用可变对象,如List,dict
许多使用很长时间Python的人也被下面的问题困扰:def foo(a=[]): a.append(5) return aPython新手估计可能会想这个函数返回一个只有元素[5]的列表.但是结果却出人意料:>>> foo()[5]>>> foo()[5, 5]>>> foo()[5, 5, 5]>>> foo()[5, 5, 5, 5]>>> foo转载 2016-07-21 09:34:35 · 1656 阅读 · 0 评论 -
Python的函数参数传递:传值?引用?
我想,这个标题或许是很多初学者的问题。尤其是像我这样的对C/C++比较熟悉,刚刚进入python殿堂的朋友们。C/C++的函数参数的传递方式根深蒂固的影响这我们的思维–引用?传值?究竟是那种呢。语言的特性决定了是使用的方法,那么,现在我们来探究一下python的函数参数传递方式。对象vs变量在python中,类型属于对象,变量是没有类型的,这正是python的语言特性,转载 2016-03-31 19:35:12 · 4798 阅读 · 1 评论 -
Python Decorator 3: 嵌套
@decorator_one@decorator_twodef func(): pass等价于func = decorator_one(decorator_two(func))@decorator(arg1, arg2)def func(): pass等价于func = decorator(arg1,arg2)(func)带参数及多转载 2016-04-18 19:44:32 · 756 阅读 · 0 评论 -
Python3 nonlocal
在Python 2.x中,闭包只能读外部函数的变量,而不能改写它。举例来说,这样是合法的:def a(): x = 0 def b(): print locals() y = x + 1 print locals() print x, y return ba()()而这样是非法的:def a(): x = 0 def b():转载 2016-04-28 20:04:58 · 1656 阅读 · 0 评论 -
Mix-in 类
为了解决多重继承的问题,Java引入了接口 (interface)技术,Lisp、Ruby引入了 Mix-in 技术。Mix-in 技术按一下规则来限制多重继承:继承用但一继承;第二个及两个以上的父类必须是 Mix-in 的抽象类。Mix-in 类是具有以下特征的抽象类:不能单独生成实例;不能继承普通类。class TagMixin(object):原创 2016-04-05 20:14:51 · 1712 阅读 · 0 评论 -
Python public private
1. object # public2. __object__ # special, python system use, user should not define like it3. __object # private (name mangling during runtime)4. _object # obey python coding convention, consid转载 2016-04-06 19:55:07 · 1490 阅读 · 0 评论 -
Python的getattr(),setattr(),delattr(),hasattr()
1. getattr()函数是Python自省的核心函数,具体使用大体如下:class A: def __init__(self): self.name = 'zhangjing' #self.age='24' def method(self): print"method print" Instance =转载 2016-04-07 20:05:57 · 513 阅读 · 0 评论 -
Python decorator 1: 函数
A.把要装饰的方法作为输入参数,B.在函数体内可以进行任意的操作(可以想象其中蕴含的威力强大,会有很多应用场景),C.只要确保最后返回一个可执行的函数即可(可以是原来的输入参数函数, 或者是一个新函数)如果只需要在被包装函数执行前插入代码,decorator可以加上插入代码后返回原函数 (例1,3)如果需要在包装函数执行之前和之后都插入代码,decorator需要另加一个函转载 2016-04-13 19:51:04 · 328 阅读 · 0 评论 -
为什么 Python 不支持函数重载?
这个问题,最近在 cpyug 上面讨论得很火热。我简要概括一下。为了考虑为什么 python 不提供函数重载,首先我们要研究为什么需要提供函数重载。函数重载主要是为了解决两个问题。1。可变参数类型。2。可变参数个数。另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当转载 2016-04-26 19:31:52 · 1454 阅读 · 0 评论 -
Python 没有多态
C++的多态表示: 基类指针指向派生类对象。 Python变量无类型,自然也就不存在多态。python是一种动态语言,参数在传入之前是无法确定参数类型的class A: def prt(self): print "A" class B(A): def prt(self): print "B"原创 2016-04-26 19:43:01 · 1071 阅读 · 0 评论 -
Python decorator 2: 类
class myDecorator(object): def __init__(self, fn): print "inside myDecorator.__init__()" self.fn = fn def __call__(self): self.fn() print "inside myDecorato原创 2016-04-14 19:13:08 · 322 阅读 · 0 评论 -
Python args kwargs
先来看个例子:def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '---------------------------------------'if __name__ == '__main__': foo(1,2,3,4) foo(a=1,转载 2016-04-11 19:47:33 · 395 阅读 · 0 评论 -
Python 迭代器
迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。迭代器不能回退,只能往前进行迭代。这并不是什么很大的缺点,因为人们几乎不需要在迭代途中进行回退操作。迭代器也不是线程安全的,在多线程环境中对可变集合使用迭代器是一个危险的操作。但如果小心谨慎,或者干脆贯彻函数式思想坚持使用不可变的集合,那这也不是什么大问题。对于原生支持转载 2016-05-09 20:09:29 · 356 阅读 · 0 评论 -
Python 生成器 generator
1. 生成器:带有yield的函数,不能有return 2. 生成器表达式:类似与一个yield值的匿名函数。表达式本身看起来像列表推到, 但不是用方括号而是用圆括号包围起来生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行转载 2016-05-10 19:23:08 · 768 阅读 · 0 评论 -
Python 闭包
首先还得从基本概念说起,什么是闭包呢?来看下维基上的解释:有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。....上面提到了两个关键的地方:自由变量 和 函数, 这两个关键稍后再说。还是得在赘述下“闭包”的意思,望文知意,可以形象的把它理解为一个封闭的包裹,这个包裹就是一个函数,当然还有函数内部对应的逻辑,包裹里面的东西就是自由变量,自由变量可以在随着包裹转载 2016-04-28 19:57:00 · 282 阅读 · 0 评论 -
5 个很好的 Python 面试题
问题一:以下的代码的输出将是什么? 说出你的答案并解释。class Parent(object): x = 1class Child1(Parent): passclass Child2(Parent): passprint Parent.x, Child1.x, Child2.xChild1.x = 2print Parent.x, Child1.x,转载 2016-07-22 08:22:28 · 604 阅读 · 0 评论