1、(单选题) 在函数定义时某个形参有值,我们称这个参数为()。
A位置参数B关键字参数C形参D默认参数D: 如果参数有值,我们称该参数为默认参数关键参数,关键参数是实参,传参用的正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可(指定了参数名的参数就叫关键参数), 但记住一个要求就是,关键参数必须放在位置参数(以位置顺序确定对应关系的参数)之后
2、请问python中的变量查找作用域的顺序是什么___?
答案为LEGB LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__locals 是函数内的名字空间,包括局部变量和形参enclosing 外部嵌套函数的名字空间globals 全局变量,函数定义所在模块的名字空间builtins 内置模块的名字空间
3、递归的概念
如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归函数 数据结构为 栈 ----先进后出
1必须有一个明确的结束条件 2每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的, 每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的, 所以,递归调用的次数过多,会导致栈溢出)
--------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4、请使用列表生成式将列表li = [1, 2, 3, 4, 5, 6, 7, 8, 9]中大于5的元素乘以2组成新的列表___。
li = [1, 2, 3, 4, 5, 6, 7, 8, 9]print([item*2 for item in li if item>5])
5、(单选题) 基于你对eval函数的了解,请从下面四个选项中选出你认为描述不正确的一项是():
A eval函数用来执行一个字符串表达式,并返回表达式的值 B eval函数可以实现字符串、列表和元组的相互转换 C eval函数可以指定表达式中的参数的作用域 D eval函数不可以把字典形式的字符串当作参数 --------------------------------------- A和B都是eval函数最基本的用法,C选项考察的是对eval函数中的参数的理解,globals和 locals都可以指定作用域,D选项是很明显的错误。
6、eval函数表达式参数作用域的理解
eval(expression[, globals[, locals]])expression -- 表达式。globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。功能1:可以把list,tuple,dict和string相互转化。功能2:执行字符串表达式看例题:a = 10b = 20c = 30g = { 'a': 6, 'b': 8}t = { 'b':100, 'c': 10}print(eval('a+b', g)) 这个有设定了全局变量gprint(eval('a+b+c', g, t)) 这个设定了全局变量g 和局部变量l b,c从t中取 --------------------------------------------------------- 本题考察对eval函数表达式参数作用域的理解, 第一个位置参数是字符串表达式source, 第二 个位置参数是全局作用域globals, 第三个位置参数是局部作用域locals,locals优先于globals, 第一 次打印没有指定locals,所以a和b的值都从globals中去,故结果为14; 第二次打印指定了locals,所以 对于b就要从locals中取值,故相加结果为116,所以选D。
------------------------------------------------------------------------------------------------------------------------------------------
7、Python callable() 函数
callable() 函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。 对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True。
----------------------------------------
实现了__call__
方法的对象,相当于重载了()
,可以实现调用功能。__call__
方法的参数就是调用实例时需要的参数。
对象后面加括号,触发执行。
obj = Foo() # 执行 __init__ 实例初始化自动执行__init__obj() # 执行 __call__一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。python中所有的东西都被称为对象,对象分为可以被调用和不可以被调用可调用对象:许多Python对象都是我们所说的可调用的,即是任何通过函数操作符()来调用的对象1.例如函数函数是对象,可以被调用def foo(x): retuen xa=foo(3) #a被调用print(a)callable(foo())callable(a)#输出是true,代表foo是可被调用的,注意,这里可不是指a是可以被调用的,因为foo是赋值给a的2.但是如果是类的话会发生什么情况呢?Python给类提供了名为__call__的特别方法,该方法允许程序员创建可调用的对象(实例)。默认情况下,__call__方法是没有实现的,这意味着大多数情况下实例是不可调用的。class test(): def method(self): return 1a = test()callable(a)#false,代表实例a是不可被调用如何解决这一个问题?这里就用到__call__函数class test(): def __call__(self): return 1a = test()callable(a)#true,代表实例a是可被调用
8、(多选题) 基于你对callable方法的理解,以下说法正确的是():
A callable方法就是用来检测对象是否可被调用B 返回结果是False则代表对象一定不可被调用C callable方法的参数不可以是整数D callable方法的参数可以是类对象、函数、lambda表达式C选项错在callable方法参数可以是整数,只是结果是False
9、(填空题) round函数的应用跟python的版本有很大关系,请写出round(0.5)这句代码在python2.7中的执行结果____。
python2.7中保留值将保留到四舍五入,所以round(0.5)会近似到1.0,而round(-0.5)会近似到-1.0;python3.5比如round(0.5)和round(-0.5)都会保留到0,而round(1.5)会保留到2。
10、 (多选题) 关于命名空间的内置函数locals和globals,下列说法你觉得错误的是():
A locals 和globals都是是只读的B locals 实际上没有返回局部名字空间,返回_x0008_的是一个拷贝C globals 返回的是全局命名空间的拷贝D 对globals返回的字典中的值进行修改都会直接影响到全局变量A选项错在globals不是只读的;C选项错在globals返回的就是实际的全局命名空间,所以 对globals返回值进行修改都会影响全局变量;B选项是正确的,所以对locals返回值进行修改 并不会影响局部变量
11、>>> f = open('file',mode, encoding='utf-8'),看此代码,mode为什么模式的时候,会报错()。
Amode='r'Bmode='w'Cmode='a'Dmode='rb'二进制模式的时候,不能指定字符编码,故,此题选D
-----------------------------
dic = { 'k1': 'a', 'k2': 'b', 'k3': 'c'}# 枚举for index, value in enumerate(dic, start=1): print(index,value)
1 k1
2 k23 k3----------------------------- dict = { 'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}print(type(dict.items()))------------------------------------ # 遍历字典列表# Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。for key, values in dict.items(): print(key, values)
Google www.google.com
Runoob www.runoob.comtaobao www.taobao.com---------------------------
dic = { "name":"jin","age":18,"sex":"male"}for key in dic: print(key)
name
agesex---------------------------------
for value in dic.items(): print(value)
('name', 'jin')
('age', 18)('sex', 'male')---------------------------------
for key ,value in dic.items(): print(key, value)
name jin
age 18sex male-------------------------------------for item in dic.items(): print(item)
('name', 'jin')
('age', 18)('sex', 'male')------------------------------------
闭包三要素: 1、嵌套函数 2、变量的引用 3、返回内部函数 -----------------------------------------
四、装饰器
1、什么是装饰器(decorator)?
装饰器其实就是一个闭包,把一个函数当作参数然后返回一个替代版函数。
装饰器有2个特性: 1、可以把被装饰的函数替换成其他函数
2、可以在加载模块时候立即执行
12、 (多选题) 请仔细阅读下面这段代码,关于代码的执行结果以下四个选项中你认为描述准确的是():
g = (i for i in range(5))for j in g: print(j) for k in g: print(k)----------------------------A 这段代码会报错B 输出结果就是0到4共五个数字C 执行结果是打印两次0到4共十个数字D 以上说法都是不正确的---------------------------for循环是遍历循环,支持迭代器协议,会自动检测生成器的边界,当生成器中的元素被获取 完时会跳出循环,不会抛出异常; 当再次for循环生成器对象时,此时生成器对象没有元素可以获取到 近似理解为循环一个空列表,输出为空,不会抛出异常。