这几天做完了牛客网上的Python试题,下面是对一些错题的分析,并总结了一些python中应该注意的知识点。
字符串比较
解析:
a,b为字符串不可变类型,所以指向相同地址,所以 a is b
is:指地址相同
==: 内容相同
a+b:字符串连接为’123123’
LEGB规则
解析:
Python一切皆对象,所以在Python中变量名是字符串对象。Python的命名空间是一个字典,字典内保存了变量名称与对象之间的映射关系,因此,查找变量名就是在命名空间字典中查找键-值对。LEGB就是用来规定命名空间查找顺序的规则。LEGB规定了查找一个名称的顺序为:
local–>enclosing function locals–>global–>builtin
Local: 即函数内部命名空间;
Enclosing function locals: 外部嵌套函数的名字空间
module(文档本身):Global(module): 函数定义所在模块(文档)的名字空间
Builtin: Python内置模块的名字空间
Set
解析:
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
本题中列表转集合,集合没有重复元素。
转义字符
解析:
python里面%d表数字,%s表示字符串,%%表示一个%;
单引号内嵌套单引号需要转义字符/;单引号内嵌套双引号不需要嵌套;
双引号内嵌套双引号需要转义字符/;双引号内引用单引号不需要转义字符;
类实例关系
解析:
isinstance(object,classinfo): 用于判断object是否是classinfo的一个实例,或者object是否是classinfo类的子类的一个实例,如果是返回True.
issubclass(class,classinfo): 用于判断class是否是classinfo类的子类,如果是返回True.
new和init的区别
解析:
init是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。
new是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。
new在init之前被调用,new的返回值(实例)将传递给init方法的第一个参数,然后init给这个实例设置一些参数。
字典
解析:
字典是python中唯一的映射类型,阐述了键与键值之间的对应关系。字典中键必须是唯一的。列表中的项目包括在方括号中。列表是可变的数据类型(可以增加或删除项目)。所以,列表中的项目不能用来作为字典的键。
浅拷贝和深拷贝
解析见上图中注释
try else finally
解析:
try的语句出现异常才会执行except后的语句,如果正常,则执行完try后执行else。另外,finally语句不管有无异常都会执行。所以上图中答案为4。
name
解析:
name定义在一个模块中,当解释器执行这个py文档时,name的值就为main;
当这个模块被引用即被其他模块import时,name的值就是模块名,也就是运行的py文档名。
闭包
解析:
在函数中可以定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。所以若a=2,b=3,则进程运行值为8。
装饰器
解析见上图
大小比较
类似元组、字符串、列表这类格式,在进行两者之间的比较时,先从第一个元素开始比较 ASCII 码值大小,如果相等,则依次向后比较,如果全部相等,则比较数量大小。
ASCII 码值大小:
数字: 0-9: 48-57
字母:A-Z:65-90.
a-z: 97-122
布尔值
所有标准对象均可以用于布尔测试,下列对象的布尔值是False:
• None
• False
• 所有值为零的数:0(整型),(浮点型),0L(长整型),0.0+0.0j(复数)
• “”(空字符串),[ ] (空列表), ()(空元祖),{} (空字典)
语言类型
语言特性
解释性语言的特性是非独立和效率低。
Python是解释性语言,在此以Python举例。
非独立性: Python代码解释执行结果依赖于IDLE的版本,其中大版本有Python2和Python3之分,Python2最经典的版本为Python2.7,Python3有Python3.4,Python3.6等等。
效率低: 由于Python是解释性语言,动态编译,直到代码执行时,才加以解释,相比于编译型语言,可以生成编译代码,执行效率低。
三元运算符
$max = x > y ? x : y$ Java和 C中正确,
在Python中的三元运算符不是这样的,是$max=x if x>y else y$
标识符
python标识符可以使用下划线 字母 数字组成,但是数字不允许作为标识符的开头出现。
线程协程
线程由操作系统控制,协程由进程自身控制。
编译及解码Python中字符串编译的过程:gbk=>unicode=>utf16=>url 解码
字符串解码顺序为:url解码=>utf16=>unicode=>gbk
map函数
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。例如:
1
2
3
4
5
6
7
8
9
10
11>>>def (x) :
return x ** 2
>>>map(square, [1,2,3,4,5])
[1, 4, 9, 16, 25]
>>>map(lambda x: x ** 2, [1, 2, 3, 4, 5])
[1, 4, 9, 16, 25]
>>>map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
逻辑运算符
数据类型
结束符
C语言中字符串使用‘ ’作为结束符以防止越界,但python中字符串其实是一个固定长度的字符数组,并不需要结束符。
math.floor函数及除法Python3 中math.floor() 函数的返回值应为整型,而Python2 的 math.floor() 函数返回值是浮点型。
Python2 中除法默认向下取整,为整型;Python3 中的除法为正常除法,会保留小数位,为浮点型。
Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值。
变量Python 是弱类型脚本语言,变量就是变量,没有特定类型,因此不需要声明。
但每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
用 del 语句可以释放已创建的变量(已占用的资源)。
切片slice
Python 中 切片(Slice)功能的理解:L[start : stop [ : step]]
start 默认值是 0;stop 默认值为 L 的长度;step 默认值是 1。
命名方式