Python面试题(2)
1.一行代码实现1-100的和
1
2
3
|
print ( sum ( range ( 1 , 101 ))) #range中的参数是1<=i<101 #sum是计算参数的和 |
2.在函数内部改变全局变量
1
2
3
4
5
6
|
a = 5 def foo1(): global a a = 4 foo1() print (a) |
3.列出5个python标准库
time,获取时间戳,时间等。
os获取系统信息,如目录,pid。
subprocess,与linux shell交互
re,正则表达式,如match,findall,search
sys,获取程序的参数,路径,退出消息等
psutil,获取系统运行状态,如cpu,mem,disk,net。
4.如何删除字典中的元素,如何更新元素的值,如何合并两个字典
1
2
3
4
5
6
|
dictA = { 'age' : 18 , 'name' : 'jab' } del dictA[ 'age' ] #删除一个键值对 dictA[ 'name' ] = 'eric' #改变一个key的value tel = { 'tel' : '131111111' } dictA.update(tel) #将tel字典合并到dictA字典 print (dictA) |
5 如何删除列表中的元素,如何将删除的元素赋值给变量,如何在列表头部插入元素,如何在列表尾部插入元素
1
2
3
4
5
|
listA = [ 1 , 2 , 3 ] del listA[ 0 ] #删除index=0的元素 num = listA.pop( - 1 ) #将index为-1的元素弹出,赋值给num listA.insert( 0 , 1 ) #在index为0的位置插入元素1 listA.append( 3 ) #在尾部追加元素3 |
6 fun(*args,**kwargs)中的*args,**kwargs什么意思?
*args 传递多个值时使用
**kwargs 传递多组关键字时使用,比如django中的model定义,可能会有多组关键字,后面的函数就会用它作为形参
1
|
appid = models.IntegerField(primary_key = True ) |
7 什么样的语言能使用装饰器?
函数能作为参数传递的语言
8 面向对象中__new__和__init__的区别
init是初始化方法,对象创建后,就被调用,并且可以接受参数。
9 简述with方法打开处理文件帮我我们做了什么?
1
2
3
4
5
6
7
8
9
10
|
f = open ( 'admin.py' , 'r' ) try : str = f.read() print ( str ) except : pass finally : f.close() #这样打开文件,需要处理异常,还要在finally里关闭文件 #with中会自己close,也可以处理异常 |
10.列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]
1
2
3
4
5
6
7
8
9
10
|
listA = [ 1 , 2 , 3 , 4 , 5 ] def fn(i): return i * i listB = map (fn,listA) listC = [i for i in listB if i > 10 ] print (listC) #map()是 python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的object并返回。(python2返回列表,Python3返回迭代对象) #[i for i in listB if i > 10]为列表推导式,把listB中大于10的元素给listC |
11 解释 Python 中的三元表达式
根据一个表达式判断,x的值是什么。
1
2
3
|
a = 1 b = 2 x = a if a > b else b |
12 python如何实现多线程
13 join()和split的区别
join是把一个字符串的字典组成成一个字符串,用确定的分隔符。
split是把一个字符串按特定分隔符转化成一个列表
13 如何删除字符串中的前置空格,或者最后的/字符。
前置 lstrip(' ') 后置 rstrip('/')
14 改字母大小写,查字母大小写
str.lower 改小写
str.upper 改大写
str.islower 判断是否小写,字符串需要全部小写
str.ipupper 判断是否大写,字符串需要全部大写
答:要把bytes类型解码为str类型的时候,ascii码不能解码,因为这个bytes不是由ascii码编码的,可以换一个试试,像utf-8,gbk。
正则表达式
python里match()和search()的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import re sql = 'select * from table' match_sql = re.match( 'from' ,sql) print (match_sql) search_sql = re.search( 'from' ,sql) print (search_sql.span()) - - > None ( 9 , 13 ) #match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配; #span()用于给出匹配字符范围 |
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。
1
2
3
4
5
6
7
|
#输入文件名和匹配字符串,返回出现次数 def countof(file_name, str ): with open (file_name, 'r' ) as file_obj: parse = file_obj.read() count = len (re.findall( str ,parse)) return count |
列表字典字符处理
python如何实现tuple和list的转换
1
2
3
4
|
t = ( 1 , 2 , 3 ) l = [ 2 , 3 , 4 ] print ( list (t)) print ( tuple (l)) |
写一段python代码,删除列表里的重复元素(删除字符串里的重复字符)
1
2
3
4
5
6
7
8
9
10
11
|
list1 = [ 1 , 2 , 3 , 4 , 2 , 3 , 4 ] s1 = set (list1) print (s1) str1 = 'google' s2 = set (str1) print (s2) - - > { 1 , 2 , 3 , 4 } { 'g' , 'l' , 'o' , 'e' } #set函数将list或str里的重复项删除,并返回一个无序字典 |
上下文管理
设计一个类Foo,使其满足以下代码输出
with Foo() as a:
print("2")
输出为:123 (每个整数数字为一行)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
class Foo(): def __enter__( self ): print ( '1' ) def __exit__( self , exc_type, exc_val, exc_tb): print ( '3' ) with Foo() as a: print ( '2' ) #将Foo()这个类赋值给a #在执行with下面的语句之前,会调用__enter__方法 #执行完之后,会执行__exit__方法。 #扩展 class foo(): def __enter__( self ): return self def __exit__( self , exc_type, exc_val, exc_tb): print ( 'type' ,exc_type) print ( 'value' ,exc_val) print ( 'trace' ,exc_tb) def func1( self ): pass with foo() as foo: foo.func1() #将foo()赋值给foo,可知返回一个实例 #然后执行这个实例下的func1函数 #如果with下面的代码有异常,__exit__就被执行 #开发库时,清理资源,关闭文件等等操作,都可以放在__exit__方法当中。 #Python的with语句是提供一个有效的机制,让代码更简练,同时在异常产生时,清理工作更简单。 |
装饰器
设计一个装饰器"addhttp",使其满足以下代码输出
@addhttp
def test():
return www.changyou.com
print(test()) #输出为http://www.changyou.com
1
2
3
4
|
def addhttp(func): def wrapper( * args, * * kwargs): return "http://%s" % func() return wrapper |
设计一个装饰器,在函数执行前先执行附加功能
1
2
3
4
5
|
def add_func(func): def wrapper(): print ( '[DEBUG]:func {}() start' . format (func.__name__)) func() return wrapper() |
迭代器&生成器
1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身。对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数。在没有后续元素时,next()会抛出一个StopIteration异常
2)生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)
区别:生成器能做到迭代器能做的所有事,而且因为自动创建了__iter__()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出StopIteration异常
python语言特性(数据结构、语法结构)
1、range和xrange
python2中,range和xrange有什么区别?
答:两者都用于for循环
range一开始就生成完整的list;xrange返回一个xrange object,且这个对象是iterable,要想返回list,需要类型转换list(xrange(1,4))
由于xrange object是按需生成单个元素,而不是像range那样创建整个list。实际上,xrange由于是在循环中被调用时才会生成元素,因此无论循环多少次,只有当前一个元素占用了内存空间,且每次循环占用的都是相同的单个元素空间。因此,我们可以粗略认为,相同n个元素,range占用的空间是xrange的n倍。因此,在循环很大的情况下,xrange的高效率和快速将表现的很明显:占用的内存空间将更小,速度更快,内存性能更好。测试一下range和xrange的执行时间。
3、列出5个python标准库
os:提供了不少与操作系统相关联的函数
sys: 通常用于命令行参数
re: 正则匹配
math: 数学运算
datetime:处理日期时间
4、字典如何删除键和合并两个字典
del和update方法
5、谈下python的GIL
GIL是python的全局解释器,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器,便该进程内的其他线程无法运行,等该西纳城运行完成后其他的线程才运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其它线程运行,所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。
多进程中因为每个进程都能被系统分配资源,相当于每个进程优良一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大。
7fun(*args,**args)中的*args,**kwargs什么意思?
*args和**kwargs主要用于函数定义,你可以将不定数量的参数传递给一个函数,这里的不定的意思是:余弦并不知道,函数使用者会传递多少个参数给你,所以在这个长江下使用这两个关键字。*args是用来发送一个非键值对的可变数量的参数列表给一个函数。
**kwargs允许你将不定长度的键值对,作为参数传递给一个函数。如果你想要
1. 简述Python代码的运行机制
- 1、把原始代码编译成字节码
- 编译后的字节码是特定于Python的一种表现形式,它不是二进制的机器码,需要进一步编译才能被机器执行。
- 2、把编译好的字节码转发到Python虚拟机(PVM)中进行执行
- PVM是 Python Virtual Machine的简称,它是Python的运行引擎,是Python系统的一部分,它是迭代运行字节码指令的一个大循环、一个接一个地完成操作。
2. 如果我有一段代码“print('hello world')”我可以在哪些地方,通过哪些方式来查看它的运行结果?
- print('hello world')
- 1. 在pycharm的控制台上查看运行结果
- 2. 在cmd命令窗口中输入文件所在的路径和文件名回车(前提要有python3.x的运行环境)
- 3. 在
3. 尽可能多的写出系统关键字,并解释含义
- import keyword
- 双击点keyword会出现另一个文件找到
- kwlist = [
- #--start keywords--
- 'False', 逻辑值为假
- 'None', 为空
- 'True', 为真
- 'and', 并且
- 'as',
- 'assert', 断言,声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。
- 'break', 结束循环
- 'class', 类
- 'continue', 跳出本次循环
- 'def', 定义函数
- 'del', 删除操作
- 'elif', 逻辑语句一般和if连用其它的多种情况
- 'else', 逻辑语句一般和if连用其它的一种情况
- 'except', 异常处理
- 'finally', 出错是的提示体
- 'for', 循环语句关键词
- 'from', 从哪里来
- 'global', 为全局变量,但当单个函数中出现同一变量名时,在单个函数中为局部变量
- 'if', 逻辑语句开始
- 'import', 导入模块关键词
- 'in', 判断在一个列表的里面
- 'is', 所属关系
- 'lambda只是一个表达式,定义了一个匿名函数,起到函数速写的作用
- 'nonlocal',
- 'not', 逻辑语句非
- 'or', 逻辑语句或
- 'pass', 空语句关键词
- 'raise', 触发异常
- 'return', 返回值
- 'try', 异常处理
- 'while', 循环语句关键词
- 'with',
- 'yield', 意思是生产,返回了一个生成器对象,每个生成器只能使用一次
- #--end keywords--
- ]
Python面试题(2)的更多相关文章
- Python面试题 —— 获取列表中位数
中位数是一个可将数值集合划分为相等的上下两部分的一个数值.如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数:如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位 ...
- python公司面试题集锦 python面试题大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
- 【Python】【面试必看】Python笔试题
前言 现在面试测试岗位,一般会要求熟悉一门语言(python/java),为了考验求职者的基本功,一般会出 2 个笔试题,这些题目一般不难,主要考察基本功.要是给你一台电脑,在编辑器里面边写边调试,没 ...
- Python面试题整理-更新中
几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路 ...
- python 面试题4
Python面试题 基础篇 分类: Python2014-08-08 13:15 2071人阅读 评论(0) 收藏 举报 最近,整理了一些python常见的面试题目,语言是一种工具,但是多角度的了解工 ...
- 一道Python面试题
无意间,看到这么一道Python面试题:以下代码将输出什么? def testFun(): temp = [lambda x : i*x for i in range(4)] return ...
- 很全的 Python 面试题
很全的 Python 面试题 Python语言特性 1 Python的函数参数传递 看两个例子: Python 1 2 3 4 5 a = 1 def fun(a): ...
- SQL + Python 面试题:之二(难度:中等)
SQL + Python 面试题:之二(难度:中等)
- Python面试题之一:解密
Python面试题之一: 说明:就是Python工程师面试题 一.字典转换与正则提取值 1:key与Value交换 a = {'a':1,'b':2} print({value:key for key ...
- 震惊!几道Python 理论面试题,Python面试题No18
本面试题题库,由公号:非本科程序员 整理发布 第1题: 简述解释型和编译型编程语言? 解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候 ...
随机推荐
- it's over | 2019 CSP-S 第二轮认证(超长预警)
也许应该从Day -1(2019年11月14日周四)开始说起? 卑微的我们在学长的怂恿下终于...停课了(哇我们太菜了,只停一天半的课有个卵用 早读后我带头去办公室请假,飞哥很大方地答应了,同时免了我 ...
- java循环控制语句loop使用
java中break和continue可以跳出指定循环,break和continue之后不加任何循环名则默认跳出其所在的循环,在其后加指定循环名,则可以跳出该指定循环(指定循环一般为循环嵌套的外循环) ...
- Java连载13-整数型字面值的强制转换
一.注意点 1.大容量不能直接赋值给小容量:大容量转化为小容量需要进行,强制类型转换,强制类型转换需要加上“强制类型转换符”,加上强制类型转换符之后编译通过了但是精度会有有可能损失.所以强制类型转换要 ...
- 如何修改SQL Server 2008 R2数据库的内存
本篇经验将和大家介绍如何修改SQL Server 2008 R2数据库的内存,希望对大家的工作和学习有所帮助! 工具/原料 SQL Sever 2008 R2数据库已安装 方法/步骤 1 打开 ...
- Kelp.Net是一个用c#编写的深度学习库
Kelp.Net是一个用c#编写的深度学习库 基于C#的机器学习--c# .NET中直观的深度学习 在本章中,将会学到: l 如何使用Kelp.Net来执行自己的测试 l 如何编写测试 l ...
- SpringBoot整合mybatis及注意事项
SpringBoot整合mybatis及注意事项 主要步骤 添加依赖 mybatis 在配置文件中配置数据源信息 编写pojo mapper接口 mapeer映射文件 手动配置mybatis的包扫描 ...
- JS修改URL参数,并修改前页面的地址
function changeURLArg(url,arg,arg_val){ var pattern=arg+'=([^&]*)'; var replaceText=arg+'='+arg_ ...
- Java 8——接口中个的默认方法和静态方法
在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性. 但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静 ...
- docker-machine命令安装
$ base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-m ...
- (原创)使用C#开发高性能PLC上位机监控系统服务器应用程序
PLC服务器监控系统的特点: 1·使用微软C#面向对象开发语言开发应用程序.2·使用了健壮性与性能良好的SUPER SOCKET服务器通信框架,实现自定义应用层通信协议,支持多台PC客户端访问服务器, ...