python常见的初级面试题及答案

1. 深拷贝和浅拷贝的区别是什么?

  1. 一切皆对象----- python中,所有的数据都被当成对象来处理,无论是数字、字符串、还是函数、甚至是模块。
  2. 对象分为不可变对象如数字、字符串、元组等和可变对象如列表、字典、集合等;不可变对象的特性是数据不可被修改,而可变对象则反之。
  3. 引用 ------- 在python程序中、每个对象都会在内存中申请开辟一块空间来存该对象,该对象在内存中所在位置的地址被称为引用(引用实际就是内存中的一个数字地址编号,知道这个对象的地址,就可以操作这个对象,但地址不好记,就可以使用变量名操作)
    深拷贝----就是将对象本身复制给另一个对象,如果对对象的副本进行更改时不会影响原对象,copy.deepcopy()函数进行深拷贝
    浅拷贝---- 就是将对象的引用复制给另一个对象,因此如果我们在副本中进行更改,则会影响原对象,使用copy.copy()函数进行浅拷贝

2. 解析python中的三元表达式

与C++不同,在python中我们不需要使用?符号,而是使用如下语法:[on true] if [expression] else [on false] ---- 如果[expression]为真,则[on true]部分被执行,反之[on false]被执行,举例:x=2,y=3, a = ‘sss’ if x>y else ‘www’

3. python如何实现多线程

线程是cpu调度的基本单位,同一个进程内的线程共享进程的资源,简而言之,一个程序至少有一个进程,一个进程至少有一个线程。python是一种多线程语言,它有一个多线程包。同时GIL确保一次执行单个线程,一个线程保存GIL并在将其传递给下一个线程之前执行一些操作,这就产生了并行执行的错觉。但实际上只是线程轮流在cpu上执行,当然,所有传递都会增加执行的开销。

4. 解析下继承

继承就是一个类继承自另一个类,也就是说是一个孩子类/派生类/子类,继承了父类/基类/超类,同时获取了所有类成员的属性和方法。
作用:继承使得我们可以重用代码,子类继承父类的同时还可以在子类中添加新的属性和功能,提供开发效率,避免代码冗余。
python支持一下类型的继承:

  • 单继承:一个子类继承单个父类(父类已是顶级类)
  • 多继承:一个子类继承多个父类(父类已是顶级类)
  • 多重多继承:一个子类继承一个父类,而父类继承另一个父类
  • 分层继承: 多个子类继承自同一个基类
  • 混合继承:两种或两种以上继承类型的组合

5.什么是Flask?

什么是Web框架?

  • 协助开发者框架开发Web应用程序的一套功能代码;开发者只需要按照框架约定要求,在指定位置上写上自己的业务逻辑代码,使用框架的优点是稳定性和可扩展性强,可以降低开发难度,提高开发效率,避免重复造轮子
    Flask是一个使用python编程的轻量级Web应用框架,使用BSD授权。Flask的WSGI工具箱采用Werkzeug,模板引擎则使用Jinja2。除了Werkzeug和Jinja2以外几乎不依赖任何外部库。Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方扩展来实现。比如可以用Flask扩展加入ORM、窗体验证工具、文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择Mysql和Nosql。

6. 如何在python中管理内存?

pyhon用一个私有堆内存空间来防止所有对象和数据结构,我们无法访问它。是由解析器来管理它,不过使用一些核心API,我们可以访问一些python内存管理工具控制内存分配。

7. 解析python中的help()函数和dir()函数

help()函数返回帮助文档和参数说明:如import copy help(copy)
dir()函数返回对象中的所有成员(任何类型);如dir(copy.copy)

['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

8. 当退出python时是否释放所有内存分配?

否!具有对象循环引用或者全局命名空间引用的变量,在python退出时往往不会被释放,另外不会释放C库保留的部分内容。

9. 什么是猴子补丁?

在运行时动态修改类和模块,猴子补丁的含义是指在动态语言中,不去改变源码而对功能进行追加和变更。

>>> class A:
    def func(self):
        print("Hi")
>>> def monkey(self):
print "Hi, monkey"
>>> m.A.func = monkey
>>> a = m.A()
>>> a.func()
运行结果为:Hi,Monkey

10. 什么是python字典?

字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值key=》value对用冒号:分割,每个键值对直接用逗号,分割,整个字典包括在花括号{}中。键一般是唯一的,如果重复最后一个键值为准,值不需要唯一。值可以取任意数据类型,但键必须是不可变的,可哈希的。

11. 能否解析一下*args和**kwargs?

  • 如果我们不知道将多少个参数传递给函数,比如当我们想传递一个列表或一个元组值时,就可以是由*args
  • 如果我们不知道将会传入多少关键字参数时,使用**kwargs会会收集关键字参数
  • 使用args和kwargs作为参数名只是举例,可以任意使用别的参数名,如a,b

12. 编写程序实现计算文件中的大写字母数

import os
os.chdir('C:\\Users\\xxx\\Desktop')
with open('Today.txt') as today:
    count = 0 
    for i in today.read():
        if i.isupper():
            count+=1
     print (count)

13. 什么是python的负索引?

先创建一个列表, lis = [1,2,3,4] , 正索引去除列表第一个元素,lis[0], – 负索引取出列表最后一个元素lis[-1],取出4,负索引取倒数第二个,lis[2],负索引切片:lis[-3: -1] ,注意切片是左闭右开的,取不到最右边元素

14. 如果随机打乱列表中元素,要求不引用额外的内存空间

可以用random包中的shuffle()函数来实现

lis = [1,2,3,4,5]
import random 
random.shuffle(lis)
print(lis)

15. 解析下python中的join()和split()函数的作用

join()函数可以降序列中的元素以指定的字符连接生成一个新的字符串
语法为:str.join(sequesnce)

str  = "-"
seq = ('a','b','c')
print(str.join(seq)

split()函数可以用指定的字符分割字符串,并返回分割后的字符串列表
而os.path.split()是按照路径将文件名和路径分隔开

string = 'www.fasf.com.cn'
print(string.split('.'))
输出:['www','fasf','com','cn']

分割两次
print(string.split('.', 2))
输出: ['www','fasf','com.cn']

分割两次,并取序列为1的项
print(string.split('.', 2)[1])
输出:fasf

分割两次,并把分割后的三个部分保存到三个文件
u1,u2,u3 = string.split('.', 2)
print(u1) ----- www
print(u2) ----- fasf
print(u3) -----  com.cn

分离文件名和路径
import os
print(os.path.split('/dodo/soft/python/'))
('/dodo/soft/python', '')
print(os.path.split('/dodo/soft/python'))
('/dodo/soft', 'python')

实例
str="hello boy<[www.baidu.com]>byebye"
print(str.split("[")[1].split("]")[0])
www.baidu.com

16. python区分大小写吗?

区分的,举例如下:

>>> myname = 'alice'
>>> Myname
Traceback (most recent call last):
 File "", line 1, in 
NameError: name 'Myname' is not defined
>>>

17. python中标识符的命名规则

  1. 标识符由数字、字母、下划线组成,且数字不能开头
  2. 标识符可以是任意长度,区分大小写
  3. 关键字不能作为标识符;一键查看关键字:help(‘keywords’) ---- True、False、if、elif、else、and、 or、not、pass、is、in

18. 如何删除字符串中的空格

str1 = '       alanjkl       '
print(str1.lstrip())
print(str1.rstrip())
print(str1.strip())

strp()方法语法: str.strip([chars]);
      chars---移除字符串头尾指定的字符序列
       返回移除字符串头尾指定的字符生成的新字符串
 举例:
 str1 = '0000023232faf00000'
 print(str.strip('0'))
 输出:23232faf

str2 = '123afjeifjeier321'
print(str2.strip('12')) 
输出:3ajfoawej3

你可能感兴趣的:(python,面试题)