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语言翻译成机器语言,每个语句都是执行的时候 ...
随机推荐
- 算法&设计模式
这里更新Python 算法&设计模式部分的博客(或目录链接)
- 修改Windows中文用户名为英文(更全面的方法)
网上方法很多,但是大多不全面. 我的建议是 1,新建/切换管理员账号 net user administrator /active:yes 然后点击桌面,使用Alt+F4组合键 注销中文用户名账号,并 ...
- Oracle 11g的一些常用语句记录
一.表空间 1.创建临时表空间: create temporary tablespace project_temp tempfile 'D:\Oracle\dataspace\project_temp ...
- 在 Vue 中使用 装饰器 Decorator
Decorator 的语法还没有通过提案,所以项目中很少用.不过最近刚好有一个需求用到了. 装饰器的语法 http://es6.ruanyifeng.com/#docs/decorator 需求是,有 ...
- linux重定向 null和zero
文件描述符 linux下一切皆文件 文件描述符,是内核为了高效管理已经被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符; 文件描述符是一个简单的非负整数,用 ...
- Ansible15:文件管理模块及Jinja2过滤器
目录 常用文件管理模块 1. file 2. synchronize 3. copy 4. fetch 5. lineinfile 6. stat 7. blockinfile Jinja2模板管理 ...
- Nginx php上传文件大小的设置
- 自动化部署Ruby on Rails应用(docker + jenkins)
docker安装参考链接docker官网jenkins中文官网 我的博客网站已经迁移到了https://johnnyting.github.io/,如果有兴趣的可以关注下.下面文章格式可能有点乱,可以 ...
- 【spring boot】加载同名Bean解决方法
原文地址:https://blog.csdn.net/liuyueyi25/article/details/83280239 @SpringBootApplication @ComponentScan ...
- 一段简单的顶部JS广告
一段简单的顶部JS广告 <SCRIPT LANGUAGE="JavaScript"> ; ; images = new Array; images[] = new Im ...