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 = 10 b = 20 c = 30 g = {'a': 6, 'b': 8} t = {'b':100, 'c': 10} print(eval('a+b', g)) 这个有设定了全局变量g print(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 x a=foo(3) #a被调用 print(a) callable(foo()) callable(a)#输出是true,代表foo是可被调用的,注意,这里可不是指a是可以被调用的,因为foo是赋值给a的 2.但是如果是类的话会发生什么情况呢? Python给类提供了名为__call__的特别方法,该方法允许程序员创建可调用的对象(实例)。默认情况下,__call__方法是没有实现的,这意味着大多数情况下实例是不可调用的。 class test(): def method(self): return 1 a = test() callable(a)#false,代表实例a是不可被调用 如何解决这一个问题?这里就用到__call__函数 class test(): def __call__(self): return 1 a = 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 k2
3 k3
-----------------------------
dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'} print(type(dict.items()))
<class 'dict_items'>
------------------------------------
# 遍历字典列表 # Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。 for key, values in dict.items(): print(key, values)
Google www.google.com
Runoob www.runoob.com
taobao www.taobao.com
---------------------------
dic = {"name":"jin","age":18,"sex":"male"} for key in dic: print(key)
name
age
sex
---------------------------------
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 18
sex 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循环生成器对象时,此时生成器对象没有元素可以获取到 近似理解为循环一个空列表,输出为空,不会抛出异常。