实习被虐
记录自己实习阶段被虐倒的题目,以及正确答案
6.4 谷露软件
关于python
-
类方法和静态方法的区别
- 类方法:类方法需要用类去调用,而不是实例对象调用
- 关键字
@classmethod
- 函数例子
def classfun(cls)
参数为cls
- 关键字
- 静态方法:静态方法没有参数
- 关键字
@staticmethod
- 函数例子
def staticmethod()
无参数
- 关键字
- 类方法:类方法需要用类去调用,而不是实例对象调用
-
python类中
__init__
和__new__
方法的区别__new__
为静态方法- 调用时间:对象创建之前被调用
- 作用:创建实例并返回
__init__
为实例方法- 调用时间:对象创建完成后调用
- 作用:设置对象的初始值
-
如何获取对象的所有方法和属性
-
所有属性:
def prn_obj(obj): print '\n'.join(['%s:%s' % item for item in obj.__dict__.items()])
使用对象的
__dict__
属性可以得到所有属性-
查看其所有属性与方法
dir(obj)
-
-
python中命名空间和作用域
-
命名空间
有三种命名空间
- 内置名称(built-in names), Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。
- 全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
- 局部名称(local names),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)
-
作用域:
-
有四种作用域:
- L(Local):最内层,包含局部变量,比如一个函数/方法内部。
- E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
- G(Global):当前脚本的最外层,比如当前模块的全局变量。
- B(Built-in): 包含了内建的变量/关键字等。最后被搜索
-
-
python如何实现有序字典
-
有序字典:collections库有的OrderedDict,迭代时,可以保持Key的顺序:
-
如何实现:
class MyDict(dict): #有序字典实现 def __init__(self): self.li = [] super(MyDict,self).__init__() def __setitem__(self, key,value): #利用li来存储Key的顺序 self.li.append(key) super(MyDict,self).__setitem__(key,value) def __str__(self): temp_list = [] for key in self.li: value = self.get(key) temp_list.append("'%s':%s" %(key,value,)) temp_str = '{' + ','.join(temp_list) + '}' return temp_str obj = MyDict() obj['k1'] = 123 obj['k2'] = 456 print(obj)
-
-
深拷贝和浅拷贝
-
可变对象和不可变对象:
-
不可变对象:所指向的地址上值是不能修改的
-
通常来讲不可变元素包含:
int
,float
,complex
,long
,str
,unicode
,tuple
-
-
可变对象:在不改变其所指向的地址的前提下,可以修改其所指向的地址中的值
- 例如:
list
,dict
,set
- 例如:
-
-
浅拷贝:
-
特点:仅拷贝不可变对象,不拷贝可变对象
-
方法:
import copy
copy.copy(obja)
-
实例:
import copy a = [1,2,['a','b','c'],4] b = copy.copy(a) print(a);print(b) # [1, 2, ['a', 'b', 'c'], 4] # [1, 2, ['a', 'b', 'c'], 4] a.append(5) print(a);print(b) # [1, 2, ['a', 'b', 'c'], 4, 5] # [1, 2, ['a', 'b', 'c'], 4] a[2].append('d') print(a);print(b) #[1, 2, ['a', 'b', 'c', 'd'], 4, 5] #[1, 2, ['a', 'b', 'c', 'd'], 4]
-
-
深拷贝:
-
特点:拷贝可变对象和不可变对象
-
方法:copy.deepcopy(a)`
-
实例:
import copy a = [1,2,['a','b','c'],4] c = copy.deepcopy(a) print(a);print(c) # [1, 2, ['a', 'b', 'c'], 4] # [1, 2, ['a', 'b', 'c'], 4] a.append(5) print(a);print(c) # [1, 2, ['a', 'b', 'c'], 4, 5] # [1, 2, ['a', 'b', 'c'], 4] a[2].append('d') print(a);print(c) #[1, 2, ['a', 'b', 'c', 'd'], 4, 5] #[1, 2, ['a', 'b', 'c'], 4]
-
-
关于数据库
- MySQL的驱动引擎有哪些
- 数据库事务的四个特性是什么
- 事务的隔离级别
关于网络
- http协议和https协议的区别