1、请至少列举5个 PEP8 规范
1、缩进:每一级4个缩进。连续跨行应该使用圆括号或大括号或者使用悬挂缩进。
2、代码长度约束
一行列数:PEP8 规定最大为79列,如果拼接url很容易超限
一个函数:不可以超过30行;直观来讲就是完整显示一个函数一个屏幕就够了,不需要上下拖动
一个类:不要超过200行代码,不要超过10个方法
一个模块:不要超过500行
3、import
不要在一句import中引用多个库
4、命名规范:数字字母下划线组成、不能用数字开头,更不能是纯数字、区分大小写、不要用中文、不能用关键字、推荐使用驼峰、不要太长
5、注释 # """
总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!
2、各种进制之间的转换:
答案: 二进制转换成十进制:v = “0b1111011”
print(int('0b1111011',2))
十进制转换成二进制:v = 18
print(bin(18))
八进制转换成十进制:v = “011”
print(int('011',8))
十进制转换成八进制:v = 30
print(oct(30))
十六进制转换成十进制:v = “0x12”
print(int('0x12',16))
十进制转换成十六进制:v = 87
print(hex(87))
3、请编写一个函数实现将IP地址转换成一个整数
如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
答案:
def func(x):
lis = x.strip().split('.')
li = [bin(int(i)) for i in lis]
li2 = [i.replace('0b',(10-len(i))*'0') for i in li]
return int(''.join(li2),2)
ret = func('10.3.9.12')
print(ret)
4、python递归的最大层数?
一般计算机默认的最大递归深度在1000左右,python最大递归深度一般在4000左右,跟计算
机的性能有关系,这个数不是一个定数,可通过一下方式测试
import sys
print(sys.getrecursionlimit())
print(sys.setrecursionlimit(10000))
5、not、and、or
求结果:
v1 = 1 or 3 -------------->1
v2 = 1 and 3-------------->3
v3 = 0 and 2 and 1-------->0
v4 = 0 and 2 or 1--------->1
v5 = 0 and 2 or 1 or 4---->1
v6 = 0 or Flase and 1----->False
6、ascii、unicode、utf-8、gbk 区别?
ASCII码:使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符。
Unicode:能够表示全世界所有的字节
GBK:是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码。
UTF-8:是一种针对Unicode的可变长度字符编码,又称万国码。
7、字节码和机器码的区别?
机器码:是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂
字节码:是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。
8、三元运算规则以及应用场景?
规则:为真时的结果 if 判定条件 else 为假时的结果
```应用场景:在赋值变量的时候,可以直接加判断,然后赋值`
9、列举 Python2和Python3的区别?
1、默认编码:2-->ascii,3-->utf-8
2、print的区别:python2中print是一个语句,不论想输出什么,直接放到print关键字后面即可。python3里,print()是一个函数,
像其他函数一样,print()需要你将要输出的东西作为参数传给它。
3、input的区别:
python2有两个全局函数,用在命令行请求用户输入。第一个叫input(),它等待用户输入一个python表达式(然后返回结果)。
第二个叫做raw_input(),用户输入什么他就返回什么。python3 通过input替代了他们。
4、字符串:python2中有两种字符串类型:Unicode字符串和非Unicode字符串。Python3中只有一种类型:Unicode字符串。
5、xrange()
python2里,有两种方法获得一定范围内的数字:range(),返回一个列表,还有xrange(),返回一个迭代器。
python3 里,range()返回迭代器,xrange()不再存在。
文件操作时:xreadlines和readlines的区别?
readlines返回一个list,xreadlines方法返回一个生成器
10、列举布尔值为False的常见值?
0, [] , () , {} , '' , False , None
11、字符串、列表、元组、字典每个常用的5个方法?
字符串:repleace,strip,split,reverse,upper,lower,join,isdisgit.....
列表:append,pop,insert,remove,sort,count,index,find.....
元组:index,count,__len__(),__dir__()
字典:get,keys,values,pop,popitems,clear,update,items.....
12、lambda表达式格式以及应用场景?
表达式格式:lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。冒号前是参数,冒号后是返回值。例如:lambda x : 2x
应用场景:经常与一些内置函数相结合使用,比如说map(),filter(),sorted(),reduce()等
13、pass的作用?
1、空语句 do nothing
2、保证格式完整
3、保证语义完整
14、Python垃圾回收机制?
python采用的是引用计数机制为主,标记-清除和分代收集(隔代回收、分代回收)两种机制为辅的策略
计数机制
Python的GC模块主要运用了引用计数来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”
解决容器对象可能产生的循环引用的问题。通过分代回收以空间换取时间进一步提高垃圾回收的效率。
标记-清除:
标记-清除的出现打破了循环引用,也就是它只关注那些可能会产生循环引用的对象
缺点:该机制所带来的额外操作和需要回收的内存块成正比。
隔代回收
原理:将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,
垃圾收集的频率随着“代”的存活时间的增大而减小。也就是说,活得越长的对象,就越不可能是垃圾,
就应该减少对它的垃圾收集频率。那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,
如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。
15、python的可变类型和不可变类型?
不可变类型(数字、字符串、元组、不可变集合)
可变类型(列表、字典、可变集合)
16、简述Python的深浅拷贝以及应用场景?
copy():浅copy,浅拷贝指仅仅拷贝数据集合的第一层数据
deepcopy():深copy,深拷贝指拷贝数据集合的所有层
17、求结果:
v = dict.fromkeys(['k1','k2'],[])
v['k1'].append(666)
print(v)
v['k1'] = 777
print(v)
答案:{'k1':[666],'k2':[666]}
{'k1':777,'k2':[666]}
解析:formkeys()默认参数为可变数据类型时有坑
18、求结果:
def num():
return [lambda x: i*x for i in range(4)]
print([m(2) for m in num()])
答案:[6, 6, 6, 6]
解析: 问题的本质在与python中的属性查找规则,LEGB(local,enclousing,global,bulitin),
在上面的例子中,i就是在闭包作用域(enclousing),而Python的闭包是 迟绑定 ,
这意味着闭包中用到的变量的值,是在内部函数被调用时查询得到的
所以:[lambda x: i*x for i in range(4)]打印出来是含有四个内存地址的列表,每个内存地址中的i
在在本内存中都没有被定义,而是通过闭包作用域中的i值,当for循环执行结束后,i的值等于3,所以
再执行[m(2) for m in num()]时,每个内存地址中的i值等于3,当x等于2时,打印出来的结果都是6,
从而得到结果[6, 6, 6, 6]。
19、列举常见的内置函数?
map,filter,zip,len,bin,oct,hex,int,float,bool,sum,min,max,str,list,tuple,dict,range,next,hash,help,id.....
20、filter、map、reduce的作用?
filter(function,iterable)过滤函数
map(function,iterable)循环函数
reduce(function, iterable)累积函数
21、一行代码实现9*9乘法表。
lis = '\n'.join('\t'.join(['%s*%s=%s' % (i,j,i*j) for j in range(1,i+1)]) for i in range(1,10))
22、如何安装第三方模块?以及用过哪些第三方模块?
pip3 imstall 模块名
django,Matplotlib,Tornado,PyGame
23、至少列举8个常用模块都有那些?
os,sys,time,random,re,hashlib,logging,json,pickle....
24、re的match和search区别?
match:从字符串的开头位置匹配,必须以此为开头
search:从开头开始查,找到符合的就返回结果
25、什么是正则的贪婪匹配?
正则表达式一般趋向于最大长度匹配
26、求结果:
a. [ i % 2 for i in range(10) ] ===>[0,1,0,1,0,1,0,1,0,1]
b. ( i % 2 for i in range(10) )===>返回一个生成器的内存地址
27、求结果:
a. 1 or 2 =========>1
b. 1 and 2 ========>2
c. 1 < (2==2)======>false
d. 1 < 2 == 2======>ture
28、def func(a,b=[]) 这种写法有什么坑?
def func(a,b=[]):
b.append(a)
print(b)
函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,
第二次执行还是用第一次执行的时候实例化的地址存储,以后每次实例化都是
29、如何实现 "1,2,3" 变成 ['1','2','3'] ?
a = "1,2,3"
li = a.split(',')
30、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?
li = ['1','2','3']
lis = list(map(lambda x:int(x),li))
31、比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?
a = [1,2,3]正常的列表
b = [(1),(2),(3)] 虽然列表的每个元素加上了括号,但是当括号内只有一个元素并且没有逗号时,其数据类型是元素本身的数据类型
b = [(1,),(2,),(3,)]列表中的元素类型都是元组类型
32、一行代码实现删除列表中重复的值 ?
li = [1, 1, 1, 23, 3, 4, 4]
new_li = list(set(li))
new_li.sort(key=li.index)
33、logging模块的作用?以及应用场景?
logging模块的作用:
1、程序调试
2、了解软件程序运行情况,是否正常
3、软件程序运行故障分析与问题定位
应用场景:网站的运维工作,程序实时监控
34、请用代码简答实现stack 。
def Stack(object):
def __init__(self):
self.stack = []
def push(self,value):
# 进栈
self.stack.append(value)
def pop(self):
# 出栈
if self.stack:
self.stack.pop()
else:
raise LookupError('stack is empty!')
def is_empty(self):
# 查看stack是否为空
reture bool(self.stack)
def top(self):
# 取出stack中最新的值
return self.stack[-1]
35、常用字符串格式化哪几种?
1、%s %d
2、format格式化输出
3、print(f'内容{变量名}')
36、简述 生成器、迭代器、可迭代对象 以及应用场景?
生成器:在 Python 中,一边循环一边计算的机制,称为 生成器(generator),
通过next()取值,两种表现形式1、将列表生成式的[]改为()2、含有yield关键字的函数
应用场景:优化代码,节省内存
迭代器:是访问集合元素的一种方式。迭代器同时实现了__iter__和__next__方法
可迭代对象:只要实现了__iter__方法的对象就是可迭代对象
37、用Python实现一个二分查找的函数。
lis = [0, 1, 3, 4, 5, 6, 7, 9, 10, 11,12,16,17]
def bin_search(lst, value):
low = 0
high = len(lst) - 1
while low <= high:
mid = (low + high) // 2
if lst[mid] == value:
return mid
elif lst[mid] > value:
high = mid - 1
else:
low = mid + 1
print(bin_search(lst, 17))
38、谈谈你对闭包的理解?
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。
但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,会存储到内存中。
39、os和sys模块的作用?
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;
sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
40、如何使用python删除一个文件?
import os
os.remove(r'path')
41、面向对象中super的作用?
1、super在面向对象继承类中代指父类,书写方法super(类名,self).属性或者方法或super().属性或者方法
2、super方法可以增加类之间调用的灵活性,当父类名发生变化时不必修改
3、super方法在类的多继承时可以简化代码,避免代码冗余
4、super机制里可以保证公共父类仅被执行一次,执行的顺序遵循MRO,广度优先查询方法
42、是否使用过functools中的函数?其作用是什么?
functools用于高阶函数:指那些作用于函数或者返回其他函数的函数。通常情况下,只要是
可以被当做函数调用的对象就是这个模块的目标。
43、列举面向对象中带双下划线的特殊方法,如: new 、 init
__new__:构造方法,创建一个对象,实例化时第一个被执行,返回一个创建好的对象及__init__(self)的self,
只有继承了object的类才会有这个方法
__init__:初始化方法,__init__在__new__的基础上完成一些其它初始化的动作,__init__没有返回值
44、列举面向对象中的特殊成员以及应用场景?
__call__:对象的构造方法,对象加上(),可以触发这个类的__call__方法。
__len__:内置函数的len函数是依赖类中的__len__方法
__eq__:判断值是否相等的时候依赖__eq__方法
__hash__:判断hash值是否相等的时候依赖__hash__方法(拓展:set的去重机制其实就是根据__hash__和__eq__方法实现的)
__str__:和str() print() %s 都是息息相关的,返回值一定是字符串类型
__repr__:和 repr() %r都是息息相关的,在没有__str__方法时,__repr__可以完全取代__str__。
__del__ 析构方法,对应着一个对象的删除之前执行的内容
45、1、2、3、4、5 能组成多少个互不相同且无重复的三位数
count = 0
for x in range(1, 6):
for y in range(1, 6):
for z in range(1, 6):
if (x != y) and (y != z) and (z != x):
count += 1
if count % 4:
print("%d%d%d" % (x, y, z), end=" | ")
else:
print("%d%d%d" % (x, y, z))
print(count)
46、什么是反射?以及应用场景?
定义:通过用字符串数据类型的变量名来访问这个变量的值,在python面向对象中的反射,通过字符串的形式操作对象相关的属性或方法.
应用场景:用于处理通过用户输入,文件读取,或者网络传输所得到的字符串形式的指令来完成对应的操作
47、metaclass作用?以及应用场景?
metaclass,直译为元类,简单的解释就是:当我们定义了类以后,就可以根据这个类创建出实例,
所以:先定义类,然后创建实例。但是如果我们想创建出类呢?那就必须根据metaclass创建出类,
所以:先定义metaclass,然后创建类。换句话说,你可以把类看成是metaclass创建出来的“实例”
48、用尽量多的方法实现单例模式。
1、基于__new__()方法
class Person:
def __new__(cls, *args, **kwargs):
if not hasattr(cls,cls._instance):
# cls._instance = object.__new__(cls)
cls._instance = super().__new__(cls)
return cls._instance
2、基于模块导入方式,现在一个py文件中写好一个类,实例化一个对象。以后用这个类直接导入这个模块就是单例模式。
3、基于装饰器方法实现
def singleton(cls, *args, **kwargs):
instance_dic = {}
def inner(*args, **kwargs):
if cls not in instance_dic:
instance_dic['cls'] = cls(*args, **kwargs)
return instance_dic['cls']
return inner
@singleton
class Person:
pass
49、装饰器的写法以及应用场景。
装饰器的写法:
def wrapper(func):
def inner(*args,**kwargs):
'被装饰之前的操作'
ret = func(*args,**kwargs)
'被装饰之后的操作'
return ret
return inner
装饰器的应用场景:
比如注册登录、插入日志,性能测试,事务处理,缓存等等场景
class Foo(): ... def __init__(self, func): # 初始化函数中传入函数对象的参数 ... self._func = func ... def __call__(self): # 定义__call__方法,直接实现装饰功能 ... start_time = time.time() ... self._func() ... end_time = time.time() ... print('花费了 %.2f' % (end_time - start_time)) ... >>> @Foo # bar=Foo(bar) ... def bar(): ... print('bar函数的执行时间为:') ... time.sleep(2.5) ... >>> bar() # bar=Foo(bar)(),没有嵌套关系了,直接执行Foo的 __call__方法,实现装饰功能
50、什么是Python的单元测试?
Python中的单元测试框架被称为unittest。它支持共享设置,自动化测试,测试关机代码,测试集合等。
51、在Python中unittest是什么?
从列表,元组,字符串等序列类型中选择一系列项目的机制被称为unittest。
52、__new__和__init__的区别
在Python中,模块是构造程序的方式。每个Python程序文件都是一个模块,它导入其他模块,如对象和属性。
Python程序的文件夹是一个模块包,包可以有模块或子文件夹。
54、怎样才能跨模块共享全局变量?
要在单个程序的模块之间共享全局变量,请创建一个配置模块。在应用程序的所有模块中导入配置模块,该模块将作为跨模块的全局变量提供。
55、解释如何在Unix上创建一个Python脚本可执行文件?
要在Unix上创建Python脚本可执行文件需要做两件事情:
Script文件的模式必须是可执行的
第一行必须以#(#!/ usr / local / bin / python)开头
56、Python垃圾回收机制
Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。
这将返回范围[0,1)中的随机浮点数
57、解释如何访问用C语言编写的Python模块?
你可以通过下面的方法访问一个用C写成的模块,
Module = = PyImport_ImportModule(“”);
58、提到使用Python的五个好处?
Python包含了大多数互联网平台(如电子邮件,HTML等)的巨大标准库。
Python不需要显式的内存管理,因为解释器本身将内存分配给新变量并自动释放它们
由于使用方括号而提供易读性
易于初学者学习
具有内置的数据类型,可以节省编程时间和工作量,从而声明变量。
59、解释什么是Flask及其好处?
Flask是一个基于“Werkzeug,Jinja 2和良好意图”BSD许可的web微型框架,Werkzeug和jingja是它的两个依赖项。
Flask是微观框架的一部分。这意味着它将很少或不依赖于外部库,它使框架轻而易举,更新和安全漏洞更少。
60、Django,Pyramid和Flask有什么区别?
Flask是一个“微框架”,主要用于需求更简单的小型应用程序。在Flask中,你必须使用外部库。
Pyramid是为更大的应用程序建立的。它提供了灵活性,并让开发人员为他们的项目使用正确的工具。开发人员可以选择数据库,URL结构,模板样式等等。Pyramid可重新配置。
像Pyramid一样,Django也可以用于更大的应用程序。 它包括一个ORM。
61、Flask-WTF是什么,有什么特点?
Flask-WTF提供了与WTForms的简单集成,功能包括
与wtforms集成
使用csrf令牌安全形式
全球csrf保护
Reptcha支持
与Flask Uploads一起使用的文件上传
62、给定字典进行排序
给定dict = {'a':3,'bc':5,'c':3,'asd':4,'33':56,'d':0}
根据其键值进行排序
sorted(dict.items(),key = lambda i:i[0],reverse = True)
list2 = [[1,2],[4,6],[3,1]]
list2.sort(key = lambda x:x[0],reverse = False)
print list2
63、列出5个python标准库
os:提供了不少与操作系统相关联的函数
sys: 通常用于命令行参数
re: 正则匹配
math: 数学运算
datetime:处理日期时间
64、谈下python的GIL
GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。
多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大
65、两个栈实现一个队列&两个队列实现一个栈
# 两个栈实现队列
# 入队:元素进栈A
# 出队:先判断栈B是否为空,为空则将栈A中的元素 pop 出来并 push 进栈B,再栈B出栈,如不为空则栈B直接出栈
class QueueWithTwoStacks(object):
def __init__(self):
self._stack1 = []
self._stack2 = []
def appendTail(self,x):
self._stack1.append(x)
def deleteHead(self):
if self._stack2:
return self._stack2.pop()
else:
if self._stack1:
while self._stack1:
self._stack2.append(self._stack1.pop())
return self._stack2.pop()
else:
return None
# 两个队列实现一个栈
# 进栈:元素入队列A
# 出栈:判断如果队列A只有一个元素,则直接出队。否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队。为了下一次继续操作,互换队A和队B。
class Stock:
def __init__(self):
self.queueA=[]
self.queueB=[]
def push(self, node):
self.queueA.append(node)
def pop(self):
if len(self.queueA)==0:
return None
while len(self.queueA)!=1:
self.queueB.append(self.queueA.pop(0))
self.queueA,self.queueB=self.queueB,self.queueA #交换是为了下一次的pop
return self.queueB.pop()
66、10个Linux常用命令
ls pwd cd touch rm mkdir tree cp mv cat more grep echo
31、两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,3,6,7,8,9]
32、用python删除文件和用linux命令删除文件方法
33、log日志中,我们需要用时间戳记录error,warning等的发生时间,请用datetime模块打印当前时间戳 “2018-04-01 11:38:54”
34、数据库优化查询方法
35、请列出你会的任意一种统计图(条形图、折线图等)绘制的开源库,第三方也行
36、写一段自定义异常代码
37、正则表达式匹配中,(.*)和(.*?)匹配区别?
38、简述Django的orm
39、[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
40、x="abc",y="def",z=["d","e","f"],分别求出x.join(y)和x.join(z)返回的结果
41、举例说明异常模块中try except else finally的相关意义
42、python中交换两个数值
43、举例说明zip()函数用法
44、a="张明 98分",用re.sub,将98替换为100
45、写5条常用sql语句
46、a="hello"和b="你好"编码成bytes类型
47、[1,2,3]+[4,5,6]的结果是多少?
48、提高python运行效率的方法
49、简述mysql和redis区别
50、遇到bug如何处理
51、1、正则匹配,匹配日期2018-03-20
url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20%7C2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462'
52、list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]
53、写一个单列模式
54、保留两位小数
题目本身只有a="%.03f"%1.3335,让计算a的结果,为了扩充保留小数的思路,提供round方法(数值,保留位数)
55、求三个方法打印结果
56、列出常见的状态码和意义
57、分别从前端、后端、数据库阐述web项目的性能优化
58、使用pop和del删除字典中的"name"字段,dic={"name":"zs","age":18}
59、列出常见MYSQL数据存储引擎
60、计算代码运行结果,zip函数历史文章已经说了,得出[("a",1),("b",2),("c",3),("d",4),("e",5)]
61、简述同源策略
62、简述cookie和session的区别
63、简述多线程、多进程
64、简述any()和all()方法
65、IOError、AttributeError、ImportError、IndentationError、IndexError、KeyError、SyntaxError、NameError分别代表什么异常
66、python中copy和deepcopy区别
67、列出几种魔法方法并简要介绍用途
68、C:\Users\ry-wu.junya\Desktop>python 1.py 22 33命令行启动程序并传参,print(sys.argv)会输出什么数据?
69、请将[i for i in range(3)]改成生成器
70、a = " hehheh ",去除收尾空格
71、举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9]
72、对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使用lambda函数从小到大排序
73、使用lambda函数对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],输出结果为
[0,2,4,8,8,9,-2,-4,-4,-5,-20],正数从小到大,负数从大到小
74、列表嵌套字典的排序,分别根据年龄和姓名排序
75、列表嵌套元组,分别按字母和数字排序
76、列表嵌套列表排序,年龄数字相同怎么办?
77、根据键对字典排序(方法一,zip函数)
78、根据键对字典排序(方法二,不用zip)
79、列表推导式、字典推导式、生成器
80、最后出一道检验题目,根据字符串长度排序,看排序是否灵活运用
81、举例说明SQL注入和解决办法
82、s="info:xiaoZhang 33 shandong",用正则切分字符串输出['info', 'xiaoZhang', '33', 'shandong']
83、正则匹配以163.com结尾的邮箱
84、递归求和
85、python字典和json字符串相互转化方法
86、MyISAM 与 InnoDB 区别:
87、统计字符串中某字符出现次数
88、字符串转化大小写
89、用两种方法去空格
90、正则匹配不是以4和7结尾的手机号
91、简述python引用计数机制
92、int("1.4"),int(1.4)输出结果?
93、列举3条以上PEP8编码规范
94、正则表达式匹配第一个URL
95、正则匹配中文
96、简述乐观锁和悲观锁
97、r、r+、rb、rb+文件打开模式区别
98、Linux命令重定向 > 和 >>
99、正则表达式匹配出
www.itcast.cn