自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(177)
  • 收藏
  • 关注

转载 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 561

转载 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 1579

原创 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 473

转载 Python With

上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了__enter__() 和 __exit__() 方法。上下文管理器定义执行 with 语句时要建立的运行时上下文,负责执行 with 语句块上下文中的进入与退出操作。通常使用 with 语句调用上下文管理器,也可以通过直接调用其方法来使用。运行时上下文(runtime cont

2016-06-06 20:15:49 349

原创 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 2580

转载 Python __init__.py 用法

python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module。那么,__init__.py还有什么别的功能呢?其实,__init__.py里面还是可以有内容的,我们在导入一个包时,实际上导入了它的__init__.py文件。我们可以再__init__.py文件中再导入其他的包,或者模块。[python]import rea

2016-05-18 19:25:05 678

原创 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 240

原创 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 507

转载 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 263

转载 Python 生成器 generator

1. 生成器:带有yield的函数,不能有return 2. 生成器表达式:类似与一个yield值的匿名函数。表达式本身看起来像列表推到, 但不是用方括号而是用圆括号包围起来生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行

2016-05-10 19:23:08 728

转载 Python 迭代器

迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。迭代器不能回退,只能往前进行迭代。这并不是什么很大的缺点,因为人们几乎不需要在迭代途中进行回退操作。迭代器也不是线程安全的,在多线程环境中对可变集合使用迭代器是一个危险的操作。但如果小心谨慎,或者干脆贯彻函数式思想坚持使用不可变的集合,那这也不是什么大问题。对于原生支持

2016-05-09 20:09:29 311

转载 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 1589

转载 Python 闭包

首先还得从基本概念说起,什么是闭包呢?来看下维基上的解释:有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。....上面提到了两个关键的地方:自由变量 和 函数, 这两个关键稍后再说。还是得在赘述下“闭包”的意思,望文知意,可以形象的把它理解为一个封闭的包裹,这个包裹就是一个函数,当然还有函数内部对应的逻辑,包裹里面的东西就是自由变量,自由变量可以在随着包裹

2016-04-28 19:57:00 252

原创 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 996

转载 为什么 Python 不支持函数重载?

这个问题,最近在 cpyug 上面讨论得很火热。我简要概括一下。为了考虑为什么 python 不提供函数重载,首先我们要研究为什么需要提供函数重载。函数重载主要是为了解决两个问题。1。可变参数类型。2。可变参数个数。另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当

2016-04-26 19:31:52 1410

转载 Python @classmethod和@staticmethod区别

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别

2016-04-20 20:04:27 591

转载 Python 类成员函数第一个参数self

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。你一定很奇怪Python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清晰。假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObj

2016-04-20 19:44:58 6358

转载 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 718

原创 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 290

转载 Python decorator 1: 函数

A.把要装饰的方法作为输入参数,B.在函数体内可以进行任意的操作(可以想象其中蕴含的威力强大,会有很多应用场景),C.只要确保最后返回一个可执行的函数即可(可以是原来的输入参数函数, 或者是一个新函数)如果只需要在被包装函数执行前插入代码,decorator可以加上插入代码后返回原函数 (例1,3)如果需要在包装函数执行之前和之后都插入代码,decorator需要另加一个函

2016-04-13 19:51:04 293

转载 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 357

转载 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 484

转载 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 1443

原创 Mix-in 类

为了解决多重继承的问题,Java引入了接口 (interface)技术,Lisp、Ruby引入了 Mix-in 技术。Mix-in 技术按一下规则来限制多重继承:继承用但一继承;第二个及两个以上的父类必须是 Mix-in 的抽象类。Mix-in 类是具有以下特征的抽象类:不能单独生成实例;不能继承普通类。class TagMixin(object):

2016-04-05 20:14:51 1656

转载 理解 Python super mro

今天在知乎回答了一个问题,居然一个赞都没有,也是神奇,毕竟这算是我非常认真答的题之一。既然如此就贴过来好了,有些内容之后再补充。原问题Python中既然可以直接通过父类名调用父类方法为什么还会存在super函数?比如class Child(Parent):    def __init__(self):    Parent.__init__(self)这种方式

2016-04-04 20:38:22 1624 1

转载 Python的函数参数传递:传值?引用?

我想,这个标题或许是很多初学者的问题。尤其是像我这样的对C/C++比较熟悉,刚刚进入python殿堂的朋友们。C/C++的函数参数的传递方式根深蒂固的影响这我们的思维–引用?传值?究竟是那种呢。语言的特性决定了是使用的方法,那么,现在我们来探究一下python的函数参数传递方式。对象vs变量在python中,类型属于对象,变量是没有类型的,这正是python的语言特性,

2016-03-31 19:35:12 4632 1

原创 对C语言数组的理解

1. 下标运算符[]和数组没有关系     p[i]   =   *(p+i)   = *(i+p)   =  i[p]2.  数组名表示指向数组初始元素的指针,不是指向数组的指针     int  array[3]                 array是指向数组第一个元素的指针     int (*array_p)[3]         array_p是指向大小

2013-06-29 10:49:13 752

原创 对C语言声明的理解

C语言的声明应该从内向外,用英语来读。1.  int (*func_table[10])(int a)      func_table is an array (size 10) of pointer to function (param int) returning int      func_table是函数指针的数组2.  int value

2013-06-29 10:32:03 564

原创 二分查找注意点

二分查找的前提: 已序序列正确算法:int binary_sort(int arr[], int length, int value){ if(arr == NULL || length == 0) return -1; int ret = -1; int left = 0; int right = length-1;

2013-05-28 17:02:44 694

原创 第17题:

在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b                                                                    如果从头遍历,与后面字符进行比较出现次数是否为1,算法复杂度为O(n^2),考虑以空间换时间,因为一个字符占8位。因此可用一个256位数组保存每个字符出现的次数char

2013-05-24 16:04:23 637

原创 第14题:

题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11。思路: 2个指针,分别从两边向中间移动,相加找到退出。void findtwonum

2013-05-21 16:30:16 528

原创 第13题: 题目:输入一个单向链表,输出该链表中倒数第k 个结点。链表的倒数第0 个结点为链表的尾指针。

链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};算法实现ListNode* FindLastK(ListNode* head, int k){ ListNode* p1=head, *p2=head; int nNode=0; while(p1->m_pNext

2013-05-21 16:09:38 1192

原创 翻转句子中单词的顺序。

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”void reverseOrder(char pStr[], int begin, int end){ if(begin >= end)

2013-05-16 15:42:12 645

原创 选择排序 实现

插入排序基本原理: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕时间复杂度:n^2稳定排序算法实现void SelectionSort(int arr[], int len){ for(int i=0; i<len-1; i++)

2013-05-16 12:07:45 507

原创 算法时间复杂度计算

定义: 算法中基本操作重复执行的次数是问题规模n的某个函数计算循环次数k和循环变量之间的关系具体步骤可以简化为:1. 找到执行次数最多的语句2. 计算语句执行次数的数量级3. 用大O来表示结果例1: int Sum1( int n ){ int p=1, sum=0, m ; for (m=1; m<=n; m++) {

2013-05-10 15:52:15 1013

转载 C++ 构造函数抛出异常会引起内存泄漏吗?

C++ 构造函数抛出异常会引起内存泄漏吗? 我们用实际代码说明问题:先看一下如下代码:#include using namespace std;class Inner{public:Inner(){cout}~Inner(){cout}}; class Outer{private:int m_Value;Inn

2013-03-21 13:44:40 873

转载 STL迭代器失效的情况

STL中的容器按存储方式分为两类,一类是按以数组形式存储的顺序容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。1、使用非顺序容器遍历删除(list, set, map)       在使用 list、set 或 map遍历删除某些元素时可以这样使用:正确使用方法1

2011-10-25 14:37:12 449

原创 More Effective C++总结(3):异常

条款9: 使用析构函数防止资源泄漏下面代码会产生的问题:pa->processAdoption()可能抛出异常,导致delete不被执行void processAdoption(istream& datasource){ while(datasource)

2011-09-20 15:31:46 794

原创 atoi和itoa的实现

atoiint atoi(char* in){ int sign=1; if(*in == '-') sign=-1; int sum=0; in++; while(*in!='\0')

2011-09-19 16:25:06 423

原创 求2进制中1的个数

解法1int Count(unsigned int v){ int num=0; while(v) { num += v & 0x01; v>>=1; } return num;}算法复杂度lo

2011-09-19 16:01:06 497

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除