Python研发

Python数组中指定位置插入元素,其他元素位置对应往后移动

yield含义?表层含义,产出

 

Python负数索引切片

序列是可以采用负数的索引来访问的,其范围是 -1 到序列的负长度(-1开始)

[-4:]从后往前取,从-1到-4

[:-4]从前往后取,从0到倒数第4个数的前一个数

zip函数作用?

两列表对应元素配对成元组存储在列表中,以元素少的列表为基准匹配

在钱数转化为对应的汉字时用到

 

Ord()获取字符对应的整数()

计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)

if ord(letter)>0 and ord(letter)<128:

如计算a对应的ACSII值是否在0-128间

Chr()把整数(ASCII码)转化为对应的字符

 

利用断言可以调试代码,断言的语句如果出错就不会继续往下执行

assert len(lis)==3判断列表的长度是否为3,如果是则继续往下执行,否则此句报错

 

简述多线程、多进程

进程:

1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立

2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制

线程:

1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的所有资源

2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃

应用: IO密集的用多线程,在用户输入,sleep 时候,可以切换到其他线程执行,减少等待的时间 CPU密集的用多进程,因为假如IO操作少,用多线程的话,因为线程共享一个全局解释器锁,当前运行的线程会霸占GIL,其他线程没有GIL,就不能充分利用多核CPU的优势

IO多路复用

 

Python里面如何拷贝一个对象,并解析深浅拷贝

赋值b=a,改变一个b,另一个a也会改变,但是打印id相同,说明a,b指向同一个地址

浅复制:copy函数,打印id不同(指向不同的地址,但是共用一套值),但是改变b中元素值,a中元素也会跟着改变

深复制:deepcopy函数,地址id不同,改变b中元素,a中元素不会改变

 

如何在一个函数内部修改全局变量

利用global 修改全局变量函数内定义

Os m dj

os:提供了不少与操作系统相关联的函数

sys:   通常用于命令行参数

json:   json格式文件

math: 数学运算

datetime:处理日期时间重点

  1. 请用datetime模块打印当前时间戳返回系统当前时间),顺便把星期的代码也贴上了

两个datatime

.now().strftime(时间格式,年月日和时分秒用空格隔开)/isoweekday()

月日是小写 每个时间点前有%

 

 

4、字典如何删除键和合并两个字典

del和update方法

除了用del,还可用pop,Pop(name)

del json_data[session_id]['BVP']['single']  删除键,键值都删除

 

 

字典遍历:

只取键

for语句就能循环字典的所有键

= {'name1' 'pythontab''name2' '.''name3' 'com'}

for key in d:(for循环取出的是字典中的键)

    print (key, ' value : ', d[key])

name1 value : pythontab

name2 value : .

name3 value : com

 

取键值

如果想获取键和值d.items方法会将键-值对作为元组返回

for key, value in d.items():

    print (key, ' value : ', value)

name1 value : pythontab

name2 value : .

name3 value : com

 

 

注意A2,i是整数,判断if i in A0,显然i与A0中的键不相符

5、谈下python的GIL(全局)

GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。

多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大

7、fun(*args,**kwargs)中的*args不定个数参数,**kwargs不定长度键值对什么意思?

 

 

 

可能有一个键值对,可能多个

 

  1. python2和python3的range(100)的区别

输入 输出 中文 编码 coding中文显示

python2返回列表,python3返回迭代器,节约内存

迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束。 [注意]:迭代器只能前进不能后退

Python3 使用 print 必须要以小括号包裹打印内容,比如 print('hi')

Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print 'hi'

python2中使用ascii编码,python中使用utf-8编码

python2中是raw_input()函数,python3中是input()函数

python2中为正常显示中文,引入coding声明,python3中不需要

 

 

9、一句话解释什么样的语言能够用装饰器?

函数可以作为参数传递的语言,可以使用装饰器

10、python内建数据类型有哪些

整型--int

字符串--str

列表--list

元组--tuple

字典--dict  布尔型--bool

 

11、简述面向对象中__new__和__init__区别

__init__是初始化方法,创建对象后,就立刻被默认调用了,可接收参数,如图

 

if __name__ == '__main__':
    preprocess()

 

  1. 简述with方法打开处理文件帮我我们做了什么?finally中关闭文件的作用

with open(pathname, 'wt', newline='') as f:
    json.dump(json_data, f,indent=4)                                     #含有单一波形的json文件

 

打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close

 

41、举例说明异常模块中try except else finally的相关意义

try..except..else没有捕获到异常,执行else语句

try..except..finally不管是否捕获到异常,都执行finally语句

 

36、写一段自定义异常代码

自定义异常用raise抛出异常异常抛出是在try中

 

 

  1. 列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]

①列表推到式

②map中平方

 

 

  1. python中生成随机整数、随机小数、0--1之间小数方法

随机整数:random.randint(a,b),生成区间内的整数

随机小数::生成0-100的随机小数。先生成0-1的随机小数,再乘100(0到1000,则可以成10000)

随机多个小数3项:习惯用numpy库,利用np.random.randn(5)生成5个随机小数注意np需要导入重命名

0-1随机小数:random.random(),括号中不传参

 

 

 

 

15、避免转义给字符串加哪个字母表示原始字符串?

Rraw原始字符串 , 表示需要原始字符串,不转义特殊字符(字符串前面加r,表示禁止字符串转义)

17、python中断言方法举例

assert()方法,断言成功,则程序继续执行继续向下执行断言失败,则程序报错

 

 

 

21、列出python中可变数据类型和不可变数据类型,并简述原理

不可变数据类型:数值型、字符串型string和元组tuple

不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址)

变量值改变,新建一个对象(地址会改变);不同变量值相同,不同变量地址也相同

 

a=3
print(id(a))
a=4
print(id(a))
print(a)

输出结果:

140716430578784

140716430578816

4

 

可变数据类型:列表list和字典dict;

允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

 

 

100、python传参数是传值还是传址?

Python中函数参数是引用传递(注意不是值传递)。对于不可变类型(数值型、字符串、元组),因变量不能修改,所以运算不会影响到变量自身;而对于可变类型(列表字典)来说,函数体运算可能会更改传入的参数变量。

 

 

 

  1. 用lambda函数实现两个数相乘

 

Lambda 参数:表达式(中间用冒号隔开)

匿名函数被赋值给一个变量,变量中输入函数参数

 

24、字典根据键从小到大排序

dict={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}

关键字是dict

 

使用Sorted函数

匿名函数,确定是键还是值排序,Lambda后面的参数是i,表达式i[0]/i[1]

Items函数

匿名函数补充:

74、列表嵌套字典的排序,分别根据年龄和姓名排序

foo = [{"name":"zs","age":19},{"name":"ll","age":54},

        {"name":"wa","age":17},{"name":"df","age":23}]

 

 

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],正数从小到大,负数从大到小

(传两个条件,x<0和abs(x))未懂?

 

 

 

  1. 利用collections库的Counter方法统计字符串每个单词出现的次数

与count的区别

"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"

 

尽管输入的是字符串,但是还是会统计出所有的字符个数

 

27、filter方法求出列表所有奇数并构造新列表,a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表

过滤出的元素需要逐一取出

lis=[i for i in lis]必须有这一句

和map用法一样,map返回值就是列表,filter返回内容需要重新取值

 

 

  1. 列表推导式求列表所有奇数并构造新列表,a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

变量 for循环 带变量的条件判断/for循环

 

 

  1. [[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]

运行过程:for i in a ,每个i是【1,2】,【3,4】,【5,6】,for j in i,每个j就是1,2,3,4,5,6,合并后就是结果

 

 

 

  1. 用python删除文件和用linux命令删除文件方法

删除文件和删除字典里面的键值区别

python:os.remove(文件名)

程序中用到的删除del json_data[session_id]['BVP']['single_waveforms'] 删除字典中的某个键值

 

linux:       rm  文件名

 

 

 

35、请列出你会的任意一种统计图(条形图、折线图等)绘制的开源库

matplotlib  

 

 

  1. 正则表达式匹配中,(.*)和(.*?)匹配区别?

函数格式re.findall(匹配格式,需要操作的字符串)

(.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配

(.*?)是非贪婪匹配,会把满足正则的尽可能少匹配

 

51、正则匹配,匹配日期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'

提取一段特征语句,用(.*?)匹配即可

 

 

82、s="info:xiaoZhang 33 shandong",用正则切分字符串输出['info', 'xiaoZhang', '33', 'shandong']

|表示或,根据冒号或者空格切分

 

94、正则表达式匹配第一个URL

findall结果无需加group(),search需要加group()提取

正则结果为列表,可以进行索引操作

 

 

  1. x="abc",y="def",z=["d","e","f"],分别求出x.join(y)和x.join(z)返回的结果

在相邻的每个y中加入x

 

43、举例说明zip()函数用法

zip()函数在运算时,会以一个或多个序列(可迭代对象)做为参数,返回一个元组的列表。同时将这些序列中并排的元素配对

钱币转化为对应汉字,不用字典,直接用两个列表进行配对

 

48、提高python运行效率的方法

1、使用生成器,因为可以节约大量内存

2、循环代码优化,避免过多重复代码的执行

3、核心模块用Cython  PyPy等,提高效率

4、多进程、多线程、协程

5、多个if elif条件判断,可以把最有可能先发生的条件放到前面写,这样可以减少程序判断的次数,提高效率

 

50、遇到bug如何处理

1、细节上的错误,通过print()打印,能执行到print()说明一般上面的代码没有问题,分段检测程序是否有问题,如果是js的话可以alert或console.log

2、如果涉及一些第三方框架,会去查官方文档或者一些技术博客。

3、自己对bug会进行单独总结分类对于bug的管理与归类总结,一般测试将测试出的bug用teambin等bug管理工具进行记录,然后我们会一条一条进行修改,修改的过程也是理解业务逻辑和提高自己编程逻辑缜密性的方法,我也都会收藏做一些笔记记录。

 

  1. list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]

取最小,删除,递归调用函数

利用min()方法求出最小值,原列表删除最小值,新列表加入最小值,递归调用获取最小值的函数,反复操作

 

  1. 保留两位小数

两种方法:用round函数的方法

In [1]: a = 5.026

In [3]: round(a,2)

Out[3]: 5.03

 

In [7]: float('%.2f' % a)

Out[7]: 5.03

 

55、求三个方法打印结果字典操作

fn("one",1)直接将键值对传给字典;

fn("two",2)因为字典在内存中是可变数据类型,所以指向同一个地址,传了新的额参数后,会相当于给字典增加键值对

fn("three",3,{})因为传了一个新字典,所以不再是原先默认参数的字典

 

64、简述any()和all()方法

any():只要迭代器中有一个元素为真就为真

all():迭代器中所有的判断项返回都是真,结果才为真

 

65、python中什么元素为假?

答案:(0,空字符串,空列表、空字典、空元组、None, False)

65、IOError、AttributeError、ImportError、IndentationError、IndexError、KeyError、SyntaxError、NameError分别代表什么异常

IOError:输入输出异常

AttributeError:试图访问一个对象没有的属性

ImportError:无法引入模块或包,基本是路径问题

IndentationError:语法错误,代码没有正确的对齐

IndexError:下标索引超出序列边界

KeyError:试图访问你字典里不存在的键

SyntaxError:Python代码逻辑语法出错,不能执行

NameError:使用一个还未赋予对象的变量

67、列出几种魔法方法并简要介绍用途

__init__:对象初始化方法

__new__:创建对象时候执行的方法,单列模式会用到

__str__:当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

__del__:删除对象执行的方法

68、C:\Users\ry-wu.junya\Desktop>python 1.py 22 33命令行启动程序并传参,print(sys.argv)会输出什么数据?

文件名和参数构成的列表格式为字符串

[1.py,22,33]

69、请将[i for i in range(3)]改成生成器

生成器是特殊的迭代器,

1、列表表达式的【】改为()即可变成生成器

2、函数在返回值得时候出现yield就变成生成器,而不是函数了;

 

  1. 举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9]

有负数的情况还是按照大小顺序来排序

Sort无返回值,sorted与返回值

 

 

  1. 用两种方法去空格

将空格代替为空,字符串操作

 

93、列举3条以上PEP8编码规范

1、函数或之间空两行

3、三引号进行注释

4、使用Pycharm、Eclipse一般使用4个空格来缩进代码

 

9、以下不能创建一个字典的语句是

A、dict1 = {}                       B、dict2 = { 3 : 5 }         

C、dict3 ={[1,2,3]: “uestc”}         D、dict4 = {(1,2,3): “uestc”}

答案:C(字典的键必须是不变的,而列表是可变的)

1、what getsprinted? Assuming python version 2.x()

print type(1/2)注意1/2结果

A. int 

再次错,注意不是加的i

字符串转列表自己用了str.split(),这是按空格分开,直接对字符串进行list即可

注意大小写

 

 

1, python常见的命令行交互自动化模块有哪些?(2分)

答案:a)Import module

b) Import module1,module2

c) From module import *

d) Frommodule import m1,m2,m3

2,python的底层网络交互模块有哪些?(2分)

       答案:socket, urllib

4,python的测试框架有哪些?试列出常用的3个或更多(6分)

       答案:unittest, nose,unittest2, doctest, pytest

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_20386411/article/details/82724326