python的110题
1、一行代码实现1—100之和
m=0;
for i in range(101):
m=i+m
print m
//print sum(range(1,101))
2、如何在一个函数内部修改全局变量
global a
a=20
3、列出5个python标准库
math urllib sys os re random time request
4、字典如何删除键和合并两个字典
del a['key1']
1)方法1:借助dict(a.items()+b.items())的方法
a={'root':‘tree’} b={'user':'wang'}
c=dict(a.items()+b.items()) //a.items()获取字典的键值对的列表;dict(a.items()+b.items())将合并成的列表转变成新的字典.
2)方法2:借助字典的update()方法
c.update(a)
c.update(b)
或者
c=a.copy()
c.update(b)
3)方法3:借助字典的dict(a, **b)方法
c=dict(a,**b)
4)方法4:借助字典的常规处理方法
c={}
for k,v in a.items():
c[k]=v
for k,v in b.items():
c[k]=v
5、谈下python的GIL
GIL:Global Interpreter Lock,。不是python的特性,是在实现Python解析器(CPython)时所引入的一个概念;一个防止多线程并发执行机器码的一个Mutex。
- 因为GIL的存在,只有IO Bound场景下得多线程会得到较好的性能;当有至少有一个CPU密集型线程存在,那么多线程效率会由于GIL而大幅下降。
- 如果对并行计算性能较高的程序可以考虑把核心部分也成C模块,或者索性用其他语言实现;
- GIL在较长一段时间内将会继续存在,但是会不断对其进行改进;
6、python实现列表去重的方法
a=['ab','root',2,1,2]
1)方法1:利用字典的fromkeys()和keys()
d={}
a=d.fromkeys(a) //字典d的value为None;
a=a.keys() //#print(L) #dict_keys([1, 2, 3, 4, 5, 6])
a=list(a) //列表['ab','root',2,1]
#可以用列表的sort()方法排序,默认是升序
a.sort(reverse=True) // print(a.sort())升序。
2)方法2:集合,集合是可迭代的
a=set(a) //print(a) 输出{'ab','root',2,1}
a=list(a) //输出列表
3)方法3:for循环
b=[]
for i in a:
if i not in b:
b.append(i)
7、fun(*args,**kwargs)中的*args,**kwargs什么意思?
*args表示可变长度的序列,是tuple元组类型。可变数量的参数列表,可以传递任意数量的参数。
**args是字典类型
8、python2和python3的range(100)的区别
1)python2中指的是列表
2)python3中range(10)返回的是可迭代对象,可以用对象迭代器list(range(10))将对象转换为列表。
可用type()查看类型。
9、一句话解释什么样的语言能够用装饰器?
函数可以作为参数传递的语言。
Python是面向对象的编程语言。闭包函数:如果内部函数里引用了外部函数里定义的对象(甚至是外层之外,但不是全局变量),那么此时内部函数就被称为闭包函数。闭包函数所引用的外部定义的变量叫做自由变量。
Python装饰器本质上是函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,返回值也是一个函数对象(函数的指针)。参数:是你要做装饰的函数名(并非函数调用)。场景:插入日志,性能测试,事务处理,权限校验等。
例:
# 这是装饰函数
def logger(func):
def wrapper(*args, **kw):
print('我准备开始计算:{} 函数了:'.format(func.__name__))
# 真正执行的是这行。
func(*args, **kw)
print('啊哈,我计算完啦。给自己加个鸡腿!!')
return wrapper
@logger
def add(x, y):
print('{} + {} = {}'.format(x, y, x+y))
#以下函数,输出三行:我准备...200+50=250...啊哈,...
add(200, 50)
10、python内建数据类型有哪些
整型——int
布尔型——bool
字符串——str
列表——list
元组——tuple
字典——dict
11、简述面向对象中__new__和__init__区别
1) _new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是个静态方法。
2) __init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,通常用在初始化一个类实例的时候。是一个实例方法.
3) 继承自object的新式类才有__new__;__new__至少要有一个参数cls,代表当前类;__new__必须要有返回值,返回实例化出来的实例,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例;
通过__new__()方法实现单例
class Singleton(object):
def __new__(cls,*args,**kwargs):
if not hasattr(cls,"_instance"):
cls._instance=super(Singleton,cls).__new__(cls)
return cls._instance
a=Singleton() b=Singleton()
c=Singleton() print (a)
输出结果:
<__main__.Singleton object at 0x000002474C92D550>
<__main__.Singleton object at 0x000002474C92D550>
12、简述with方法打开处理文件帮我我们做了什么?
with是从Python2.5引入的一个新的语法,它是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和资源分配释放相关代码统统去掉,简化try….except….finlally的处理流程。
with通过__enter__方法初始化,然后在__exit__中做善后以及处理异常。
所以使用with处理的对象必须有__enter__()和__exit__()这两个方法。__exit__()方法的3个参数,分别代表异常的类型、值、以及堆栈信息。
With语句的基本语法格式:
with expression [as target]: //expression:是一个需要执行的表达式;target:是一个变量或元组,存储expression表达式执行返回的结果,可选。
with_body
例:
>>> with open('d:\\xxx.txt') as fp:
... print fp.read()
13、列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]
>>> import numpy
>>> num=[1,2,3,4,5]
>>> def f(x):
... return x**2
...
>>> map1=map(f,num)
>>> f1=[i for i in map1 if i>10 ]
>>> f1
[16, 25]
14、python中生成随机整数、随机小数、0--1之间小数方法
>>> import random
>>> import numpy
>>> random.randint(10,20)
13
>>> numpy.random.randn(5)
array([-1.50160888, 1.50559912, -1.63196478, 0.41519156, -1.07224174])
>>> random.random()
0.5747244861439974
>>>
15、避免转义给字符串加哪个字母表示原始字符串?
r
16、<div class="nam">中国</div>,用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的
python3
>>> import re
>>> str='<div class="name">中国</div>'
>>> res=re.findall(r'<div class=".*">(.*?)</div>',str)
>>> print(res)
['中国']
>>>
17、python中断言方法举例
assert()方法,断言成功,则程序继续执行,断言失败,则程序报错;
语法:assert expression [, arguments] 例:assert b>7,"断言出错"
unittest.TestCase 类提供的断言方法:
assertEqual(a,b,[msg='测试失败时打印的信息']): 断言a和b是否相等,相等则测试用例通过。
assertNotEqual(a,b,[msg='测试失败时打印的信息']): 断言a和b是否相等,不相等则测试用例通过。
assertTrue(x,[msg='测试失败时打印的信息']): 断言x是否True,是True则测试用例通过。
assertFalse(x,[msg='测试失败时打印的信息']): 断言x是否False,是False则测试用例通过。
assertIs(a,b,[msg='测试失败时打印的信息']): 断言a是否是b,是则测试用例通过。
assertNotIs(a,b,[msg='测试失败时打印的信息']): 断言a是否是b,不是则测试用例通过。
assertIsNone(x,[msg='测试失败时打印的信息']): 断言x是否None,是None则测试用例通过。
assertIsNotNone(x,[msg='测试失败时打印的信息']): 断言x是否None,不是None则测试用例通过。
assertIn(a,b,[msg='测试失败时打印的信息']): 断言a是否在b中,在b中则测试用例通过。
assertNotIn(a,b,[msg='测试失败时打印的信息']): 断言a是否在b中,不在b中则测试用例通过。
assertIsInstance(a,b,[msg='测试失败时打印的信息']): 断言a是是b的一个实例,是则测试用例通过。
assertNotIsInstance(a,b,[msg='测试失败时打印的信息']): 断言a是是b的一个实例,不是则测试用例通过。
例1:
>>> a=3
>>> assert(a>1)
>>> print("断言成功")
断言成功
>>> b=4
>>> assert(b>7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
>>>
例2:
# unit test case
import unittest
class TestStringMethods(unittest.TestCase):
# test function
def test_negative(self):
testValue = True
# error message in case if test case got failed
message = "Test value is not false."
# assetFalse() to check test value as false
self.assertFalse( testValue, message)
if __name__ == '__main__':
unittest.main()
输出:
F
======================================================================
FAIL:test_negative (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
File "p1.py", line 11, in test_negative
self.assertFalse( testValue, message)
AssertionError:True is not false:Test value is not false.
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (failures=1)
例3:
self.driver.find_element_by_xpath("//android.widget.LinearLayout[1]/android.support.v7.app.ActionBar.e[2]").click()#切到超模25tab
sleep(3)
self.assertEqual(self.driver.find_element_by_id('com.boohee.secret:id/tv_title').text,u'超模25','切到超模25tab失败')
18、数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句
select distinct name from student
19、10个Linux常用命令
ls pwd cd touch rm mkdir tree cp mv cat more grep echo
which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果;查看可执行文件位置。
tree以树状结构查看目录下的内容;只查看当前目录下内容tree -L 1;列出权限属性tree -L 1 -C -p;查看3层目录下内容tree -L 3 -C -p;
20、python2和python3区别?列举5个
1)、Python3 使用 print 必须要以小括号包裹打印内容,比如 print('hi')
Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比 如 print 'hi'
2)、python2 range(1,10)返回列表,python3中返回迭代器,节约内存
3)、python2中使用ascii编码,python3中使用utf-8编码
4)、python2中unicode表示字符串序列,str表示字节序列
python3中str表示字符串序列,byte表示字节序列
5)、python2中为正常显示中文,引入coding声明,python3中不需要
6)、python2中是raw_input()函数,python3中是input()函数
21、列出python中可变数据类型和不可变数据类型,并简述原理
不可变数据类型:数值型、字符串型string和元组;
可变数据类型:列表list和字典dict;
22、s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"
set去重,去重转成list,利用sort方法排序,reeverse=False是从小到大排;
>>> s='ajldjlajfdljfddd'
>>> s=set(s)
>>> s=list(s)
>>> s.sort(reverse=False)
>>> res=''.join(s)
>>> print(res)
adfjl
23、用lambda函数实现两个数相乘
>>> sum=lambda a,b:a*b
>>> print(sum(5,4))
20
24、字典根据键从小到大排序
>>> dic={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
>>> lis=sorted(dic.items(),key=lambda i:i[0],reverse=False)
>>> lis
[('age', 18), ('city', '深圳'), ('name', 'zs'), ('tel', '1362626627')]
>>> dict(lis)
{'age': 18, 'city': '深圳', 'name': 'zs', 'tel': '1362626627'}
>>>
25、利用collections库的Counter方法统计字符串每个单词出现的次数"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
>>> from collections import Counter
>>> a="kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
>>> res=Counter(a)
>>> res
Counter({'l': 9, ';': 6, 'h': 6, 'f': 5, 'a': 4, 'j': 3, 'd': 3, 's': 2, 'k': 1, 'g': 1, 'b': 1})
>>>
26、字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"
>>> import re
>>> a= "not 404 found 张三 99 深圳"
>>> list=a.split(" ")
>>> list
['not', '404', 'found', '张三', '99', '深圳']
>>> res=re.findall('\d+|[a-zA-Z]+',a)
>>> for i in res:
... if i in list:
... list.remove(i)
...
>>> new_str=" ".join(list)
>>> res
['not', '404', 'found', '99']
>>> new_str
'张三 深圳'
>>>
匹配小数:res=re.findall('\d+\.?\d*|[a-zA-Z]+',a)
27、filter方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表;
>>> a=[1,2,3,4,5,6,7,8,9,10]
>>> def fn(a):
... return a%2==1
...
>>> newlist=filter(fn,a)
>>> newlist=[i for i in newlist]
>>> newlist
[1, 3, 5, 7, 9]
>>>
28、列表推导式求列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> res=[i for i in a if i%2==1]
>>> res
[1, 3, 5, 7, 9]
>>>
29、正则re.complie作用
re.compile是将正则表达式编译成一个对象,加快速度,并重复使用
30、a=(1,)b=(1),c=("1") 分别是什么类型的数据?
>>> type((1,))
<class 'tuple'>
>>> type((1))
<class 'int'>
>>> type(("1"))
<class 'str'>
>>>
31、两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,3,6,7,8,9]
extend可以将另一个集合中的元素逐一添加到列表中,区别于append整体添加
>>> list1=[1,5,7,9]
>>> list2=[2,2,6,8]
>>> list1.extend(list2)
>>> list1
[1, 5, 7, 9, 2, 2, 6, 8]
>>> list1.sort(reverse=False)
>>> list1
[1, 2, 2, 5, 6, 7, 8, 9]
>>>
32、用python删除文件和用linux命令删除文件方法
python:os.remove(文件名)
linux: rm 文件名
33、log日志中,我们需要用时间戳记录error,warning等的发生时间,请用datetime模块打印当前时间戳 “2018-04-01 11:38:54”
>>> import datetime
>>> a=str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))+' 星期:'+str(datetime.datetime.now().isoweekday())
>>> a
'2021-06-20 22:25:44 星期:7'
>>>
34、数据库优化查询方法
外键、索引、联合查询、选择特定字段等等。
索引并不是越多越好,索引固然可 以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引;
任何地方都不要使用 select * from t ,用具体的字段列表代替“*”;
尽量避免全表扫描,可以首先考虑在WHERE及ORDER BY涉及的列上建立索引;
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销;
varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间;
避免在 where 子句中对字段进行 null 值判断/使用!=或<>操作符/使用or 来连接条件/对字段进行表达式操作/对字段进行函数操作、in 和 not in 也要慎用、exists 代替 in、
新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert;
临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定;
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、正则匹配,匹配日期2018-03-20
52、list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]
53、写一个单列模式
54、保留两位小数
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],输出结果为
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、正则表达式匹配出<html><h1>www.itcast.cn</h1></html>
100、python传参数是传值还是传址?
101、求两个列表的交集、差集、并集
102、生成0-100的随机数
103、lambda匿名函数好处
104、常见的网络传输协议
105、单引号、双引号、三引号用法
106、python垃圾回收机制
107、HTTP请求中get和post区别
108、python中读取Excel文件的方法
109、简述多线程、多进程
110、python正则中search和match