求助2道Python选择题

Chrishany 2019-07-18 10:08:24
第一题 假设函数中不包括global保留字,对于改变参数值的方法,以下选项中错误的是:(D)
A. 参数是列表类型时,改变原参数的值
B. 参数是整数类型时,不改变原参数的值
C. 参数是组合类型(可变对象)时,改变原参数的值
D. 参数的值是否改变与函数中对变量的操作有关,与参数类型无关

第二题 下面代码输出的结果是:(A)

MA = lambda x,y: (x>y) * x + (x<y) * y
MI = lambda x,y: (x>y) * y + (x<y) * x
a = 10
b = 20
print(MA(a,b))
print(MI(a,b))


A. 20,10 B.10,20 C.10,10 D20,20

请大神帮忙看看,麻烦帮忙讲解一下第一题。另外,第二题中lambda函数的意思没看明白,也麻烦大神指导一下,感谢!
...全文
1971 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一笑程序猴 2019-07-19
  • 打赏
  • 举报
回复 1
第二题是匿名函数:x和y分别是两个参数,而(x<y)和(x>y)其返回值类型为布尔类型即True或False, 在python中True乘以任何数都是任何数,而False乘以任何数都的0。因此MA = lambda x,y: (x>y) * x + (x<y) * y中当传入x=10,y=20时,x>y的值为False,x<y的值为True,则可以转变为: False*10 + True *20即0+20所以结果为20。
第二个同理。
一笑程序猴 2019-07-19
  • 打赏
  • 举报
回复 3
第一题:选项中所说的原参数应该就是实参。来看两个例子就明白了
A选项:原参数会变

def test(lst=[])
lst[0] = '会改变原参数值'

l = ['我是原参数']
test(l)
print(l)

#结果输出
#['会改变原参数值']


B选项:原参数不变

def test(num):
num = 2

n = 1
test(n)
print(n)

#输出结果
1



C选项:组合类型包括:列表,元组,集合,字典。这个与A选项一样即使传入集合,和字典也是会改变原参数值。但这里注意的是当传入元组时是不会改变原参数值的。因为元组是不可变的。但是C选项中又强调可变长度对象,因此元组除外所以C也是对的。

综上,D的描述肯定是错误的,跟参数类型是有关的。
小羽Jary 2019-07-19
  • 打赏
  • 举报
回复
第二道题呢,lambda是一个匿名函数的写法
MA展开是
def MA(x,y):
return (x>y) * x + (x<y) * y
另一个同理。
python的运算级别是先算括号,再算乘除后算加减
x=10,y=20
第一步运算得出:False*10+True*20
False和True在数学计算中可以看做0和1,所以就是0*10+1*20=20
另一个同理得出答案等于10
小羽Jary 2019-07-19
  • 打赏
  • 举报
回复
首先你要知道,python的可变数据类型有哪些,不可变的数据类型有哪些 可变数据类型,值可以改变:列表list和字典dict; 不可变数据类型,值不可以改变:整型int、浮点型float、字符串型string和元组tuple。 可变的数据类型都是作用域全局的,不可变的数据类型都是局部私有的,当然你可以通过globla关键字将局部变量放到函数里面来进行改变 下面是例子:

def change1(data):
    a=2
def change2(data):
    global a
    a=2

if __name__ == '__main__':
    a = 1
    change1(a)
    print(a)
    change2(a)
    print(a)
而list、dict这些可变类型的变量原本就是全局的,在函数里面也可以随意更改他们的值,而不需要globla关键字

37,744

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧