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-- ]