什么是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了一份。