开发工具:
文件大小: 595kb
下载次数: 0
上传时间: 2019-04-19
详细说明:Python interview Collection3ARP协议
4uib和urib2的区别
5Post和Get
°6 Cookie和 Session
7 apache和 nginx的区别
°8网站用户密码保存
°9HTTP和Https
10XSRF和×Ss
11幂等 Idempotence
12 RESTfu架构( SOAP RPC
o 13 SOAP
0 14 RPC
15CG|和WSG
16中间人攻击
17c10k回题
18 socket
9浏览器缓存
°20HTTP10和HTP11
21 Aja
NIX
unⅸx迸程间通信方式(PC
·数据结构
1红黑树
编程题
1台阶问题斐波那契
2变态台阶问题
3矩形覆盖
°4杨氏矩阵查找
5去除列表中的重复元素
6链表成对调换
7创建字典的方法
■1直接创建
2工厂方法
3 dronkeys(方法
8合并两个有序列表
°9交叉链表求交点
10二分查找
11快推
°12找零问题
13广度谝历和深度遍历二叉树
17前中后序遍历
18求最大树深
19求两棵树是否相同
20前序中序求后序
21单链表逆置
o22两个字符串是否是变位词
o23动态规划问题
Python语言特性
1 Python的函数参数传递
看两个例子
def fun(a):
fun(a)
print a
def fun(a):
a append(1)
fun(a)
print a i[1]
所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中vod的感觉。
通过id来看引用a的内存地址可以比较理解
def fun(a)
print func
in",id(a) func in 41322472
2
print re-point",id(a),id(2) re-point 41322448 41322448
print func out",id(a), id (1) func out 41322472 41322472
funa)
print a #1
注:具体的值在不同电脑上运行时可能不同
可以看到,在执行完a=2之后,a引用中保存的值,即內存地址发生变化,由原来1对象的所在的地
址变成了2这个实体对象的内存地址。
而第2个例子a引用保存的内存值就不会发生变化
def fun(a):
print func in",id(a)# func in 53629256
a append(1)
print func out, id(a)
f func out 53629256
fun(a)
print a #[1]
这里记住的是类型是属于对象的,而不是变量。而对象有两种,“可更改”( mutable)与“不可更
改”( immutable)对象。在 python中, strings, tuples,和 numbers是不可更改的对象,而list,dict,set等则是
可以修改的对象。(这就是这个问题的重点
当一个引用传递给函数的时候函数自动复制一份引用,这个函数里的引用和外边的引用没有半毛关系了所以
第一个例子里函数把引用指向了一个不可变对象,当函数返回的时候外面的引用没半毛感觉而第二个例子就
不一样了,函数內的引用指向的是可变对象,对它的操作就和定位了指针地址一样在内存里进行修改
如果还不明白的话这里有更好的解释:htp:/ stackoverflow. com/ questions/986006/ how-do-1- pass-a-variable
by-reference
2 Python中的元类( metaclass
这个非常的不常用,但是像ORM这种复杂的结构还是会需要的详情请
E:http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python
3staticmethodFHclassmethod
Python其实有3个方法即静态方法( staticmethod),类方法( classmethod)和实例方法,如下
def foo(x)
print executing foo(%s)%(x)
class A(object)
def foo(self,x
print
xecuting foo(s,号S)”号(se1f;x)
classmethod
def class foo(cls,x):
print" executing c1assf。o(岩s,号s)"是(c工Srx)
astaticmethod
def static foo(x):
print" executing static_foo(岩s)"告x
a=A()
这里先理解下函数参数里面的sel和cs这个se和cs是对类或者实例的绑定,对于一般的函数来说我们可以这
么调用foo(x),这个函数就是最常用的它的工作跟任何东西(类实例)无关对于实例方法我们知道在类里
每次定义方法的时候都需要绑定这个实例,就是foo(self,x),为什么要这么做呢?因为实例方法的调用离
不开实例我们需要把实例自己传给函数,调用的时候是这样的a.foo(x)(其实是foo(a,x)).类方法
样只不过它传递的是类而不是实例,A.c1 ass foo(x)注意这里的se和cs可以替换别的参数,但是 python
的约定是这俩还是不要改的好
对于静态方法其实和普通的方法一样不需要对谁进行绑定,唯一的区别是调用的时候需要使
用a. static foo(x)或者A. static_foo(x)来调用
实例方法类方法
静态方法
a=Ao a foo(x) aclass foo(x) a static_foo(x)
A
不可用 class_foo(x)) A static foc(x)
更多关于这个问题1.http:/stackoverflow.com/questions/136097/what-is-the-difference-between-
staticmethod-and-classmethod-in-python2.https://realpython.com/blog/python/instance-class-and-static-
methods-demystified/
4类变量和实例变量
类变量
是可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的)。例如下例中,
numofinstance就是类变量,用于跟踪存在着多少个Test的实例。
实例变量
实例化之后,每个实例单独拥有的变量
class Test(object):
num of instance =0
f init (self, name):
self. name name
Test. num of instance += 1
if name
main
print Test. num of instance #0
tl =Test( jack)
print Test. num of instance #f 1
t2=Test( lucy)
print tl name ,tl num of instance jack 2
print t2. name t2num of instance lucy 2
补充的例子
class person:
name= aaa
pl=Person()
p2=Person(
pl. name="bbb
print pl name bbb
print p2. name #aaa
print Person name aaa
这里p1.name="bbb"是实例调用了类变量,这其实和上面第一个问题一样就是函数传参的问
题,p1.name一开始是指向的类变量name="aaa",但是在实例的作用域里把类变量的引用改变了就变成
了一个实例变量, self. name不再引用 Person的类变量name了
可以看看下面的例子:
class person
name=
pl=Person(
p2=Person
pl name append(l)
r⊥ntp1.name
[1
print p2. name #[1
print Person name [11
httpstackoverflowcom/questions/6470428/catch-multiple-exceptions-in-one-line-except-block
5 Python自省
这个也是 python彪悍的特性
自省就是面向对象的语言所写的程序在运行时所能知道对象的类型简单一句就是运行时能够获得对象的类
型.比如 typed,dirQ, getattr, hasattro, isinstance()
1,2,3
b={"a':1
c:3
c =True
print type(a), type(b) type(c)#
print isinstance(a,list) True
6字典推导式
可能你见过列表推导时却没有见过字典推导式在27中才加入的
d = ikey: value for (key, value)in iterable)
7 Python中单下划线和双下划线
>>>class MyClass():
def init (self)
self. superprivate ="Hello
self. semiprivate =, world!
>> mc MyClass()
>> print mc. superprivate
traceback (most recent call last)
File " line l, in
AttributeError: my Class instance has no attribute
superprivate
>> print mc. semiprivate
world i
print mc. dict
f MyClass superprivate: Hello, semiprivate:, world! y
foo:一种约定, Python内部的名字用来区别其他用户自定义的命名,以防冲突,就是例
如init(),de1(),ca1l()这些特殊方法
foo:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.不能用 from module import*导
入,其他方面和公有一样访问;
foo:这个有真正的意义:解析器用c1 assname foo来代替这个名字,以区别和其他类相同的命名,它
无法直接像公有成员一样随便访问,通过对象名.类名ⅹxx这样的方式可以访问.
ilenl:http://stackoverflow.com/questions/1301346/the-meaning-of-a-single-and-a-double-underscore
before-an-object-name-in-python
或者:htto/www.zhihu.com/question/19754941
8字符串格式化:%和 format
format在许多方面看起来更便利对于号最烦人的是它无法同时传递一个变量和元组你可能会想下面的代码
不会有什么问题
" hi there各s"号name
但是,如果name恰好是(1,2,3),它将会抛出一个 Type Error异常为了保证它总是正确的你必须这样做:
hi there昌s"号(name,)#提供一个单元素的数组而不是一个参数
但是有点丑. format就没有这些问题你给的第二个问题也是这样, formati好看多了
你为什么不用它?
·不知道它(在读这个之前)
为了和 Python25兼容(譬如 logging库建议使用号(ssue#4)
http://stackoverflow.com/questions/5082452/python-string-formatting-vs-format
9迭代器和生成器
这个是stackoverflow里python排名第一的问题值得一看:htp/stackoverflow.com/questions/231767/hat
does-the-yield-keyword-do-in-python
这是中文版:htp:/ taizilongxu. gitbooksiIo/ stackovertlow-about-python/ onten1/ README htm
这里有个关于生成器的创建问题面试官有考:问:将列表生成式中[改成)之后数据结构是否改变?答案
是,从列表变为生成器
>>>I=[x* for x in range(10)
>>>工
[0;1;4;9;16;25;36,49;64,81
(x*x for x in range(10))
at 0x0000028F8B774200>
通过列表生成式,可以直接创建一个列表。但是,受到內存限制,列表容量肯定是有限的。而且,创建一个
包含百万元素的列表,不仅是占用很大的内存空间,如:我们只需要访问前面的几个元素,后面大部分元素
所占的空间都是浪费的。因此,没有必要创建完整的列表(节省大量内存空间)。在 Python中,我们可以采
用生成器:边循环,边计算的机制-> generator
10 *args and **kwargs
用*args和* kwargs只是为了方便并没有强制使用它们
当你不确定你的函数里将要传递多少参数时你可以用*args例如它可以传递任意数量的参数
> def print everything (*args)
for count, thing in enumerate(args):
print 0,il]. format(count, thing)
> print everything( apple,banana,cabbage)
1
1. banana
2. cabbage
相似的,* kwargs允许你使用没有事先定义的参数名:
def table things(**kwargs):
for name, value in kwargs items()
print 10]=11. format(name, value)
> table things(apple = fruit, cabbage =vegetable)
cabbage vegetable
apple fruit
你也可以混着用命名参数首先获得参数值然后所有的其他参数都传递给*args和** kwargs.命名参数在
列表的最前端例如:
def table things(titlestring, **kwargs)
args和** kwargs可以同时在函数的定义中,但是*args必须在太 kwargs前面
当调用函数时你也可以用*和**语法例如:
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.