1.python下多线程的限制以及多进程中传递参数的方式?

python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程序一个意思,大家都是轮着用的,这叫“并发”,不是“并行”。

多进程间共享数据,可以使用 multiprocessing.Value

和multiprocessing.Array。

2.什么是lambda函数?它有什么好处?

lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。

lambda 函数不能包含命令,它们所包含的表达式不能超过一个。

不要试图向lambda 函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。

3.如何用Python输出一个Fibonacci数列?

1 a,b = 0, 1

2 while b<100:

3 print (b),

4 a, b = b, a+b

4.解释一下python的and-or语法

与C表达式 bool ? a : b类似,但是bool and a or b,当 a 为假时,不会象C表达式 bool ? a : b 一样工作

应该将 and-or 技巧封装成一个函数:

defchoose(bool, a, b):return(booland[a]or[b])[0]

因为 [a] 是一个非空列表,它永远不会为假。甚至 a 是 0 或 '' 或其它假值,列表[a]为真,因为它有一个元素。

5.Python里面如何拷贝一个对象?

标准库中的copy模块提供了两个方法来实现拷贝.一个方法是copy,它返回和参数包含内容一样的对象。

使用deepcopy方法,对象中的属性也被复制。

6.如何用Python来进行查询和替换一个文本字符串?

可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, string[, count=0])

replacement是被替换成的文本

string是需要被替换的文本

count是一个可选参数,指最大被替换的数量

7.Python里面search()和match()的区别?

match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none 。

8.有两个序列a,b,大小都为n,序列元素的值任意整形数,无序?

要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。

1. 将两序列合并为一个序列,并排序,为序列Source

2. 拿出最大元素Big,次大的元素Small

3. 在余下的序列S[:-2]进行平分,得到序列max,min

4. 将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max,小的为min。

9.python如何捕获异常?

(1)使用try和except语句来捕获异常

捕获到的IOError错误的详细原因会被放置在对象e中,然后运行该python 异常处理的except代码块捕获所有的异常

(2)用raise语句手工引发一个异常:

(3)采用sys模块回溯最后的异常

10.如何用Python来发送邮件?

可以使用smtplib标准库。

以下代码可以在支持SMTP监听器的服务器上执行。

11.介绍一下except的用法和作用?

Python的except用来捕获所有异常,因为Python里面的每次错误都会抛出一个异常,所以每个程序的错误都被当作一个运行时错误。

12. 解释Range函数

Range函数可以用来创建一个整数列表,一般用在for循环中。它有3种使用方法。Range函数可以接受1到3个参数,参数必须是整数。

请注意:我已经将range的每种用法包装在一个递推式构造列表(list comprehension)中,以便我们可以看到生成的值。

用法1 - range(stop):生成从0到参数“stop”之间的整数。

[i for i in range(10)]
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
用法2 - range(start, stop) : 生成从参数“start”到“stop”之间的整数
[i for i in range(2,10)]
#=> [2, 3, 4, 5, 6, 7, 8, 9]
用法3 - range(start, stop, step):以参数“step”为步长,生成从“start”到“stop”之间的整数。
[i for i in range(2,10,2)]#=> [2, 4, 6, 8]
13. 定义一个名为car的类,它有两个属性:“color”和“speed”。然后创建一个实例并返回“speed”。
class Car :
def __init__(self, color, speed):
self.color = color
self.speed = speedcar = Car('red','100mph')
car.speed
#=> '100mph'

14.“func”和“ func()”有什么区别?

这个问题的目的是想看看你是否理解所有函数也是Python中的对象。

def func(): print('Im a function')func#=> function __main__.func>func() #=> Im a function

15.python代码得到列表list的交集与差集?

交集

差集

16. 如何使用reverse函数反转一个列表?

下面的代码对一个列表调用reverse()函数,对其进行修改。该方法没有返回值,但是会对列表的元素进行反向排序。

li = ['a','b','c']
print(li)
li.reverse()
print(li)
#=> ['a', 'b', 'c']
#=> ['c', 'b', 'a']

17. 字符串乘法是如何工作的?

让我们看看将字符串" cat"乘以3的结果。

'cat' * 3

#=> 'catcatcat'

该字符串将自身连接3次。

18. 列表乘法是如何工作的?

我们来看看将列表[1,2,3]乘以2的结果。

[1,2,3] * 2

#=> [1, 2, 3, 1, 2, 3]

输出的列表包含了重复两次的列表[1,2,3]的内容。

19. 类中的“self”指的是什么?

“self”引用类本身的实例。这就是我们赋予方法访问权限并且能够更新方法所属对象的能力。

下面,将self传递给__init__(),使我们能够在初始化时设置实例的颜色。

class Shirt:
def __init__(self, color):
self.color = color
s = Shirt('yellow')
s.color
#=> 'yellow'

20.列出5个python标准库

os:提供了不少与操作系统相关联的函数

sys: 通常用于命令行参数

re: 正则匹配

math: 数学运算

datetime:处理日期时间

21.阅读下面的代码,写出A0,A1至An的最终值

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
A0 = {'a':1,'b':2,'c':3,'d':4,'e':5}
A1 = range(10)
A1 = [0,1,2,3,4,5,6,7,8,9]
A2 = [i for i in A1 if i in A0]
A2 = [] # 当对字典进行in判断是,判断的是key
A3 = [A0[s] for s in A0]
A3 = [1,2,3,4,5]
A4 = [i for i in A1 if i in A3]
A4 = [1,2,3,4,5]

21.你对多线程和多进程的理解。

①进程是系统进行资源分配和调度的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源;

②一个程序至少有一个进程,一个进程至少有一个线程;

③线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高;

④进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率 ;

⑤线线程不能够独立执行,必须依存在进程中;

⑥优缺点:线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。

22.线程中start方法和run方法的区别?

①若调用start,则先执行主进程,后执行子进程;

②若调用run,相当于正常的函数调用,将按照程序的顺序执行

23.linux命令 grep awk sed是怎么用的?

grep:Global Regular Expression Print

24.介绍一下except的用法和作用?

try:

pass

except Exception as e:

print(e)

finally:

pass

25.*args和**kwargs是什么意思?

*args表示可变参数(variadic arguments),它允许你传入0个或任意个无名参数,这些参数在函数调用时自动组装为一个tuple; **kwargs表示关键字参数(keyword arguments),它允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。同时使用*args和**kwargs的时候,必须保证*args在**kwargs之前。

26.python里面如何拷贝一个对象?

(1) 赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个;

(2)浅拷贝(copy.copy()),创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另一个也会被改变);

(3)深拷贝(copy.deepcopy()),创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另一个不会改变)

注意:并不是所有的对象都可以拷贝

27.简要描述python的垃圾回收机制

python中的垃圾回收是以引用计数为主,标记-清除和分代收集为辅。

引用计数:python在内存中存储每个对象的引用计数,如果计数变成0,该对象就会消失,分配给该对象的内存就会释放出来。

标记-清除:一些容器对象,比如说list、dict、tuple、instance等可能会出现引用循环,对于这些循环,垃圾回收器会定时回收这些循环(对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边)。

分代收集:python把内存根据对象存活时间划分为三代,对象创建之后,垃圾回收器会分配它们所属的代。每个对象都会被分配一个代,而被分配更年轻的代是被优先处理的,因此越晚创建的对象越容易被回收。

28.什么是lambda函数?它有什么好处?

lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

Python允许你定义一种单行的小函数。定义lambda函数的形式如下(lambda参数:表达式)lambda函数默认返回表达式的值。你也可以将其赋值给一个变量。lambda函数可以接受任意个参数,包括可选参数,但是表达式只有一个。

29.什么是鸭子类型?

在鸭子类型中,关注的不是对象的类型本身,而是他如何使用的。例如,在不适用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭的对象,并调用它的走和叫方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。

class duck():
def walk(self):
print('I am duck,I can walk...')
def swim(self):
print('I am duck,I can swim...')
def call(self):
print('I am duck,I can call...')
duck1=duck()
duck1.walk()
# I am duck,I can walk...
duck1.call() # I am duck,I can call...
30.Python如何实现单例模式?
class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, di
ct)
cls.instance = None
def __call__(cls, *args,**kw):
if cls.instance is None:
cls.instance = super(Singleton, cls).__call__(*args, **kw)
return cls.instance
class MyClass(object):
__metaclass__ = Singleton