学完python很久了,一直想着写个学习总结,奈何懒癌晚期,现在才开始写。以下是我总结的一小部分python基础知识点的总结:
1、什么是解释型语言?什么是编译型编程语言?
''' 解释型语言:无需编译,运行的时候有解释器转化为机器码,转化一句,执行一句 编译星语言:第一次需要编译,由编译器转化为机器码,之后运行无需再次编译 '''
2、位和字节的关系?
''' 最小的存储单位称为位(bit):只能容纳两个值(0或1)之一,不能在一个位中存储更多的信息。位是计算机存储的基本单位。 字节(byte)是常用的计算机存储单位:字节的标准定义:一个字节均为8位。由于上述所讲每个位或者是0或者是1,所以一个8位 的字节包含256种可能的0,1组合; '''
3、列举几个 PEP8 规范
''' 不要在行尾加分号, 也不要用分号将两条命令放在同一行。 每行不超过80个字符(长的导入模块语句和注释里的URL除外) 用4个空格来缩进代码 顶级定义之间空2行, 方法定义之间空1行,顶级定义之间空两行, 比如函数或者类定义. 方法定义, 类定义与第一个方法之间, 都应该空一行. 函数或方法中, 某些地方要是你觉得合适, 就空一行. 按照标准的排版规范来使用标点两边的空格,括号内不要有空格,按照标准的排版规范来使用标点两边的空格 不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾) '''
4、各种编码的区别?
''' ANSI即为ASCII编码,为一个字节,只用到0~127号字符。 Unicode编码为万国码,包含几乎世界上的所有字符,一般情况下为两个字节。 GBK编码为中国特有编码,但也是在ANSI基础上演变出来的,包含两个字节,其中中文编码与Unicode的中文编码不一样。 UTF-8为Unicode的一种实现编码,Unicode编码可以通过一定的规则进行转变。 '''
5、机器码与字节码的区别?
''' 字节码是一种中间码,字节码通常指的是已经经过编译,但与特定机器码无关,需要直译器转译后才能成为机器码的中间代码 机器码就是计算机可以直接执行,并且执行速度最快的代码。 '''
6、各种进制之间的转换:
''' int(s,base) #将其他进制转换为十进制,base是s的进制 bin(x) #将一个十进制数转化为二进制数(即返回一个二进制数的字符串),x为十进制数(不是字符串) oct(x) #将一个十进制数转化为八进制数(即返回一个八进制数的字符串),x为十进制数(不是字符串) hex(x) #将一个十进制数转化为十六进制数(即返回一个十六进制数的字符串),x为十进制数(不是字符串) chr(x) #将十进制转换为ASCII中相应的字符。 ord(s) #将ASCII中相应的字符转换为十进制数。 '''
7、递归的最大层数?
默认最大次数为1000
8、三元运算规则以及应用场景?
a = 4 b = 3 c= a if a>1 else b #如果a大于1的话,c=a,否则c=b #是条件判断的简写
9、怎样实现数值交换?
a=1 b=2 a,b = b,a
10、列举布尔值为False的常见值?
''' 0(整型) 0.0(浮点型) 0L(长整型) 0.0+0.0j(复数) ""(空字符串) [](空列表) ()(空元组) {}(空字典) '''
11、字符串、列表、元组、字典每个常用的5个方法?
字符串:
''' 1,去掉空格和特殊符号 name.strip() 去掉空格和换行符 name.strip('xx') 去掉某个字符串 name.lstrip() 去掉左边的空格和换行符 name.rstrip() 去掉右边的空格和换行符 2,字符串的搜索和替换 name.count('x') 查找某个字符在字符串里面出现的次数 name.capitalize() 首字母大写 name.center(n,'-') 把字符串放中间,两边用- 补齐 name.find('x') 找到这个字符返回下标,多个时返回第一个;不存在的字符返回-1 name.index('x') 找到这个字符返回下标,多个时返回第一个;不存在的字符报错 name.replace(oldstr, newstr) 字符串替换 name.format() 字符串格式化 '''
列表:
list1 = ['apple','banana','apple'] list2 = [] #list1[a:b:c] 列表的索引 # 列表的增、删、改 list1.append(a) # 在结尾加一个元素 list1.insert(1, a) # 在指定位置增加元素,在a后b前插入y a = list2.extend(list1) # 将list_1和list_2合并 list1[4] = 'o' # 修改第五个元素 list1[2:3] = [a,b] # 修改连续的元素 list1.remove(list1[3]) # 删除下标为3的元素 list1.pop(2) # 直接加下标 del list1[2] 删除列表中的下标为2的元素 del list1 直接删除掉列表 # 列表的一些方法 # count list1.count('apple') # count是计算出现次数的方法 # index list1.index('banana') # 寻找banana在哪个位置 # reverse list1.reverse() # 倒叙 # sort list_5 = [6, 4, 3, 7, 5, 5, 8, 1] list_5.sort() # 排序(从小到大) # clear list_5.clear() # 清空列表
元组:
# 元 组 tuple1 = (1,) # 只有一个元素的话,后面加一个逗号,对之后的学习有所帮助 tuple2 = (1,2,3,4,5) # tuple2[2] = 10 # 元组是不可修改的
字典:
12、lambda表达式格式以及应用场景?
''' lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。 lambda是一个表达式而不是一个语句。它能够出现在Python语法不允许def出现的地方。 作为表达式,lambda返回一个值(即一个新的函数)。lambda用来编写简单的函数,而def用来处理更强大的任务 ''' x,y = 2,3 a = lambda x,y:x + y
13、pass的作用?
''' 空语句 do nothing 保证格式完整 保证语义完整 '''
14、*arg和**kwarg作用
*arg会把多出来的位置参数转化为tuple
**kwarg会把关键字参数转化为dict
15、、is和==的区别
''' ==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等 is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同 '''
16、简述Python的深浅拷贝以及应用场景?
''' 浅拷贝:copy.copy 深拷贝:copy.deepcopy 对于int,str来说,三者(自身,浅拷贝,深拷贝)的id不变,其余的三者id都变了 '''
17、Python垃圾回收机制?
''' c1=ClassA()会创建一个对象,放在内存中,c1变量指向这个内存,这时候这个内存的引用计数是1 del c1后,c1变量不再指向0x237cf58内存,所以这块内存的引用计数减一,等于0,所以就销毁了这个对象,然后释放内存。 导致引用计数+1的情况 对象被创建,例如a=23 对象被引用,例如b=a 对象被作为参数,传入到一个函数中,例如func(a) 对象作为一个元素,存储在容器中,例如list1=[a,a] 导致引用计数-1的情况 对象的别名被显式销毁,例如del a 对象的别名被赋予新的对象,例如a=24 一个对象离开它的作用域,例如f函数执行完毕时,func函数中的局部变量(全局变量不会) 对象所在的容器被销毁,或从容器中删除对象 '''
18、Python的可变类型和不可变类型?
''' Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的。 不可变是相同的内存里值是不可变的 可变是指,同一片内存,值可以发生变化 '''
19、常见内置函数
最常见的内置函数是: print("Hello World!") 数学运算 abs(-5) # 取绝对值,也就是5 round(2.6) # 四舍五入取整,也就是3.0 pow(2, 3) # 相当于2**3,如果是pow(2, 3, 5),相当于2**3 % 5 cmp(2.3, 3.2) # 比较两个数的大小 divmod(9,2) # 返回除法结果和余数 max([1,5,2,9]) # 求最大值 min([9,2,-4,2]) # 求最小值 sum([2,-1,9,12]) # 求和 类型转换 int("5") # 转换为整数 integer float(2) # 转换为浮点数 float long("23") # 转换为长整数 long integer str(2.3) # 转换为字符串 string complex(3, 9) # 返回复数 3 + 9i ord("A") # "A"字符对应的数值 chr(65) # 数值65对应的字符 unichr(65) # 数值65对应的unicode字符 bool(0) # 转换为相应的真假值,在Python中,0相当于False 在Python中,下列对象都相当于False:[], (),{},0, None,0.0,'' bin(56) # 返回一个字符串,表示56的二进制数 hex(56) # 返回一个字符串,表示56的十六进制数 oct(56) # 返回一个字符串,表示56的八进制数 list((1,2,3)) # 转换为表 list tuple([2,3,4]) # 转换为定值表 tuple slice(5,2,-1) # 构建下标对象 slice dict(a=1,b="hello",c=[1,2,3]) # 构建词典 dictionary 序列操作 all([True, 1, "hello!"]) # 是否所有的元素都相当于True值 any(["", 0, False, [], None]) # 是否有任意一个元素相当于True值 sorted([1,5,3]) # 返回正序的序列,也就是[1,3,5] reversed([1,5,3]) # 返回反序的序列,也就是[3,5,1] 类,对象,属性 # define class class Me(object): def test(self): print "Hello!" def new_test(): print "New Hello!" me = Me() hasattr(me, "test") # 检查me对象是否有test属性 getattr(me, "test") # 返回test属性 setattr(me, "test", new_test) # 将test属性设置为new_test delattr(me, "test") # 删除test属性 isinstance(me, Me) # me对象是否为Me类生成的对象 (一个instance) issubclass(Me, object) # Me类是否为object类的子类
20、filter、map、reduce的作用?
''' map: o = map(A,B ) A是映射函数,B是可迭代对象,o是可迭代对象 reduce: from functools import reduce a = reduce( A,(1,2,3)) 按照A函数归并 filter:过滤 a = filter(A, B)把B中数据挨个拿出来,如果满足A函数要求,则放入a中 '''
21、一行代码实现9*9乘法表
print('\n'.join(['\t'.join(["%2s*%2s=%2s"%(j,i,i*j) for j in range(1,i+1)]) for i in range(1,10)]))
22、re的match和search区别?
''' re.match()从开头开始匹配string。 re.search()从anywhere 来匹配string '''
23、如何用一行代码生成[1,4,9,16,25,36,49,64,81,100]
d = [i * i for i in range(11) ]
24、求结果 a: [ i % 2 for i in range(10) ], b: ( i % 2 for i in range(10) )
a是一个列表,b是一个生成器
25、def func(a,b=[]) 这种写法有什么坑?
def func(a,b=[]): b.append(a) print(b) func(1) func(1) func(1) func(1)
看下结果
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储,所以三次执行的结果就是 [1, 1, 1] ,想每次执行只输出[1] ,默认参数应该设置为None。
26、一行代码实现删除列表中重复的值 ?
方法一:转化为集合
a = [1,2,4,5,6,5,4,3,7,8] b = set(a)
方法二:用列表生成式
a = ['a', 'b', 'c', 'd', 'a', 'a'] b = [x for x in a if a.count(x) == 1]
27、如何在函数中设置一个全局变量 ?
关键字:global
28、常用字符串格式化哪几种?
(1).最方便的
print( 'hello %s and %s' % ('df', 'another df'))
但是,有时候,我们有很多的参数要进行格式化,这个时候,一个一个一一对应就有点麻烦了,于是就有了第二种,字典形式的。上面那种是tuple形式的。
(2).最好用的
print ('hello %(first)s and %(second)s' % {'first': 'df', 'second': 'another df'})
这种字典形式的字符串格式化方法,有一个最大的好处就是,字典这个东西可以和json文件相互转换,所以,当配置文件使用字符串设置的时候,就显得相当方便。
3.最先进的
print ('hello {first} and {second}'.format(first='df', second='another df'))