博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二模块:函数编程(学位课程):(第1章)函数、装饰器、迭代器、内置方法
阅读量:5091 次
发布时间:2019-06-13

本文共 5407 字,大约阅读时间需要 18 分钟。

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 k2
3 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.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循环生成器对象时,此时生成器对象没有元素可以获取到 近似理解为循环一个空列表,输出为空,不会抛出异常。

 

转载于:https://www.cnblogs.com/foremostxl/p/9860549.html

你可能感兴趣的文章
正在学习或准备学习 Web 应用开发的初学者
查看>>
各大公司架构实践聚合
查看>>
西安前端交流会 - 【前端求职、就业、面试技巧】- 第5期-2015.3.29 报名了
查看>>
Linux-进程间通信(四): 域套接字
查看>>
jq check 复选变单选。
查看>>
C#父类子类对象关系
查看>>
(转)RACI模型(RACI Model)
查看>>
关于&&和||
查看>>
HTML5 学习笔记(一)——HTML5概要与新增标签
查看>>
浅谈MySQL之@1
查看>>
Jenkins使用
查看>>
三层VS控制器
查看>>
函数传递参数的本质
查看>>
Python学习第二篇
查看>>
Python学习第三篇——逻辑判定
查看>>
c++入门之函数指针和函数对象
查看>>
一个数组中同时找到最大/最小值
查看>>
python终端下打印颜色
查看>>
《从Paxos到ZooKeeper 分布式一致性原理与实践》阅读【Leader选举】
查看>>
RPC框架基础概念理解以及使用初体验
查看>>