python面试题总结

什么是python?有什么特点?

        python是一种解释性、面向对象、动态数据类型的高级程序设计语言,python在编写时无须定义变量类型,在运行时变量类型强制固定,属于强类型语言,python无需编译,可以在解释器环境下直接运行

        特点:是一种解释性语言,因此不需要编译

                   动态类型语言,不需要指定变量类型

                   面向对象的编程,至此通过组合和继承的方式定义类

                   python代码比较容易,运行速度比编译语言慢

                   用途广泛,被称为‘胶水语言’

                   专注于算法和数据结构,不需要处理底层的语言

python2.0和python3.0版本的区别?

       (1) print语句没有了,取而代之的是print()函数

        (2)python2.0默认使用ASCII编码,不支持中文,且变量名只能使用英文

                python3.0默认使用UTF-8编码,默认支持中文,且变量名能够使用中文

         (3)python2.0中整除相除是一个整数,会把小数点忽略掉

                python3.0整除相除的结果也会是浮点数

         (4)python3中使用as作为关键字,捕获异常由except exc var 改成except  exc  as var

         (5)python3中range完全取代了xrange函数

         (6)python2中不等于有两种写法 “!=” 和“<>”,python3只有‘!=’一种写法

         (7)python2中一个tab和8个span等价,python3中tab和span共存会报错

        (8)打开文件,python2中使用file()或open(),python3只能使用open()

python常见的运算符

        python算数运算符

        python比较运算符

        python赋值运算符

        python位运算符

        python逻辑运算符

        python成员运算符

        python身份运算符

运算符is与==的区别?

        is判断a对象是否是b对象,用于判断两个对象是否为同一个,通过id判断

        ==判断a对象的值是否和b对象相等,通过value判断

python有哪些数据类型,可变数据类型和不可变数据类型分别包括哪些?

        python自带的数据类型分为可变数据类型和不可变数据类型

        可变数据类型:表示允许变量的值发生变化,如果改变了该数据类型的对应变量的值,不会重新分配内存空间

                                可变数据类型包括:列表(list),集合(set)和字典(dict)

        不可变数据类型:不允许变量的值发生变化,如果改变了该数据类型的对应变量的值,那么会重新分配内存空间

                                不可变数据类型:字符串(str)元组(tuple)数组(number)

列表、元组、集合、字典的区别有哪些?

        列表(list):是长度可变有序的数据存储容器,可以通过下标索引到相应的数据

        元组(tuple):固定长度不可变的顺序容器,访问效率高,适合存储一些常量数据,可以作为字典的键使用

        集合(set):无序,元素只出现一次,可以自动去重

        字典(dict):长度可变的hash字典容器,存储的方式为键值对,可以获取相应的键获取相应的值,key支持多种类型,key必须是不可变类型且唯一

列表和元组的区别有哪些?

        列表是可以修改的,而元组不能修改,如果要增添和删除元素,只能使用列表,元组被称为只读列表,数据可以被查询,但不能被修改,元组一旦被定义,长度和内容是固定的,不能被修改,

        列表用[]表示,元组用()表示

        列表不能作为字典的key使用,而元组可以

        如果元组中仅有一条元素,那么需要在元素后加上逗号

如何反序地迭代一个序列

        使用内置的reversed()和range()来实现,也可以使用扩展切片[::-1]的形式实现

        如果序列是列表:使用reverse()

        reversed()是python内置的函数,参数可以是字符串、列表、元组等序列

        range(start,stop[,step])

        start:计数从start开始,默认从0开始

        end:计数结束,但不包括end

        step:步长,默认为1

列表的sort方法和sorted方法有何区别?

        sort方法和内置方法sorted方法都有key和reverse参数,key参数接收一个函数来实现自定义排序,reverse默认是false,表示不需要反向排序,如果需要反向排序,设置为true

        sort是列表方法,只可用来对列表进行排序,是在原序列上进行修改,不会产生新的序列,内置的sorted方法可以用于任何可迭代的对象(字符串、列表、元组、字典),它会产生一个新的序列,旧的对象仍然存在。

什么是列表生成式?

        用来创建列表的表达式就是列表生成式,也被称为列表推导式,它相当于for循环的简写形式,列表生成式返回的是一个列表,它提供了从序列创建列表的简单途径,通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列

        列表生成式的语法:[表达式for循环]

字符串格式化%和.format的区别是什么?

        一般情况下,使用%已经足够满足程序的要求,但是像那种需要在一个位置添加元素或列表类型的代码,最好选择format方法,在format中,{}表示占位符

单引号、双引号和三引号的区别?

        单引号和双引号式等效的,如果需要换行,那么需要使用符号(\),三引号可以直接换行,并且可以包含注释

        注意:三引号括起来的字符串可以换行

                单引号里面不能再加单引号,但是可以加双引号进行转义输出

                双引号里面不能再加双引号,可以加单引号进行转移输出

python常见的字符串函数

        center(width,fillchar)返回一个原字符串居中,并使用空格填充至长度width,默认填充字符为 空格

        count(str,beg=0,end=len(string))返回str在string里面出现的次数,如果beg或者end指定,返回指定范围内str出现的次数

        isalnum()字符串至少有一个字符并且所有字符都是字母或者数字则返回true,否则返回false

        isalpha()字符串至少有一个字符并且所有字符都是字母则返回true,否则返回false

        join(seq)以指定字符串作为分隔,将seq中所有元素合并为一个新的字符串

        len(string)返回字符串的长度

        lower()转换字符串中所有大写字符转为小写

        lstrip()截掉字符串左边的空格或指定字符串

        max(str)返回字符串str中最大的字母

        min(str)  返回字符串str中最小的字母

判断一个字符串为全数字的方法

        isdigit() 检测字符串是否只由数字组成

        isnumeric() 这个方法只针对Unicode字符串,定义Unicode在字符串前加u即可,例:str=u'12344'

        自定义函数is_number

字典的items()与iteritems()有什么不同?

        字典的items方法可以将所有的字典项以列表的方式返回,因为字典是无序的,所以用items方法返回字典的所有项,也是无序的

        items会一次性取出所有的值,并以列表返回,iteritems方法与items方法用法大致相同,只是它返回的不是列表,而是一个迭代器,通过迭代取里面的值,一般数据量大的时候,iteritems比items效率高些

        python3中已经废除了iteritems(),用items替代了iteritems,可以用for循环遍历

python中pass的作用?

        pass是一个在python中不会被执行的语句,pass语句一般作为占位符或者创建占位程序,在复杂语句中,如果一个地方需要被暂时留白,可以使用pass语句

except的作用?

        捕获异常,当使用try语句时,发生异常会执行except代码块,若try语句正常执行,则执行else块代码

常见的异常

        IOError:输入输出异常

        AttributeError:视图访问一个对象没有的属性

        ImportError:无法引入模块或包,基本是路径问题

        IndentationError:语法错误,代码没有正确的对齐

        IndexError:下标索引超出序列边界

        KeyError:试图访问字典里不存在的键

        SyntaxError:python代码逻辑语法出错,不能执行

        NameError:使用一个还未赋值的的变量

xrange和range的区别?

        range([start,]stop,[,step]),根据start与stop指定的范围以及step设定的步长,生成一个序列,xrange用法与range完全相同,但是,xrange生成的是一个生成器,他的数据可以一个一个取出来,在需要生成很大的数字序列时,xrange比range性能更优,因为不需要在一开始的时候就开辟一块很大的内存空间

python的编码规范

代码编排

        缩进:4个空格实现缩进,尽量不要使用tab        

        行:每行长度不超过79,换行用\

        空行:类和top-level函数之间空两行,类中的方法定义空一行

        空格:括号内的第一个位置,不要空格,紧靠右的位置也不能空格

注释规范

        块注释,在代码前增加注释,#

        行注释,在一句代码后加注释

编程建议

        字符串拼接,尽量使用join

        单例对象,尽量使用is 、is not,不要使用==

        使用is not  而不是not  is

        使用drf来定义函数,而不是将匿名函数赋值给某个变量

        尽量代码整齐,简洁

        使用isinstance()来判断instance的类型

python的命名规则?

        标识符由字母、下划线和数字组成,且数字不能开头

        严格区分大小写

        不能使用关键字

        采用驼峰法命名:大驼峰:第一个字母以小写字母开头,第二个首字母大写

                                     小驼峰:第一个字母以大写字母开头,第二个首字母小写

简述‘鸭子类型’

        当看到一只鸟走起路来像鸭子,游泳起来像鸭子、叫起来也像鸭子、那么这只鸟就是鸭子,在鸭子类型中,关注的不是对象的类型本身,而是他如何使用

python命名空间

        在python中,所有的名字都存在与一个空间中,他们在该空间中存在和被操作,他就好像一个盒子,每一个变量名字都对应装着一个对象,当查询变量时,会从该盒子里查找相应的对象

在Python中导入模块中的对象有哪几种方式

import 模块名

from 模块名 import 功能名

from 模块名 import *

import 模块名 as 别名

from 模块名 import 功能名 as 别名

如何理解面向对象中的封装 继承 和多态

封装:这是定义类的准则,根据对象的特点,将行为和属性抽象出来,封装到一个类中。

继承:这是设计类的技巧。父类与子类,主要体现在代码的重用,不需要大量的编写重复代码。

多态:不同的子类调用相同的父类方法,产生不同的执行结果,可以增加代码的外部灵活度。多态是以继承和重写父类方法为前提的,它是一种调用方法的技巧,不会影响到类的内部设计。

列举常见的异常以及出现的场景

SystemExit      解释器请求退出

AttributeError           对象没有这个属性

NameError           未声明/初始化对象 (没有属性)

IndexError           序列中没有此索引(index)

KeyError             映射中没有这个键

ImportError           导入模块/对象失败

TypeError             对类型无效的操作

ValueError             传入无效的参数

 什么是闭包?闭包的特性

闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数块+引用环境)。

如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包

python的装饰器是什么?

 它们是修改其他函数的功能的函数。有助于让我们的代码更简短;装饰器传入的参数就是一个函数,然后通过实现各种功能来对这个函数的功能进行增强。     

 面向对象有哪些特性?

1)继承是从已有类得到继承信息创建新类的过程。提供继承信息的类为父类;得到继承信息的类为子类。

2)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。在类中编写的方法就是对实现细节的封装;编写一个类就是对数据和数据操作的封装。

3)多态性是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。方法重载实现的是编译时的多态性,而方法重写实现的是运行时的多态性,实现多态要做两件事:1. 方法重写;2. 对象造型。

4)抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面

    python装饰器的作用

   装饰器的作用就是用一个新函数封装旧函数(是旧函数代码不变的情况下增加功能)然后会返回一个新函数,新函数就叫做装饰器,一般为了简化装饰器会用语法糖@新函数来简化

python生成器是什么

Python 中还有一种函数,用关键字 yield 来返回值,这种函数叫生成器函数,函数被调用时会返回一个生成器对象,生成器本质上还是一个迭代器

 python迭代器是什么?

迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退

如何查看系统都开启了哪些端口

netstat:用来监听网络连接状态。

ps

作用:查看进程信息

使用:

ps -ef

ps aux

说明:经常在查询进程号的时候结合grep进行过滤

pstree

作用:使用树形结构查看进程信息。

kill

作用:杀死进程

示例:kill -9 PID

说明:强制杀死指定进程

 什么是硬链接和软链接

软链接:ln -s 源文件 目标文件
硬链接:ln 源文件 目标文件
源文件:即你要对谁建立链接

区别: 软链接文件的大小和创建时间和源文件不同。软链接文件只是维持了从软链接到源文件的指向关系(从jys.soft->jys可以看出),不是源文件的内容,大小不一样容易理解。
硬链接文件和源文件的大小和创建时间一样。硬链接文件的内容和源文件的内容一模一样,相当于copy了一份。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值