python text函数的应用题_Python小白的日常练习之函数

题目:摘自Quant面试中的算法\编程\机器学习题讨论帖文兄:Quant面试中的算法\编程\机器学习题讨论帖​zhuanlan.zhihu.comPython中的函数作为一个object的好处是什么?

简要介绍Python的垃圾回收机制

Python中有虚函数么?Python里的类继承与C++有什么不同?

为什么当定义一个函数时将list作为缺省参数(default parameter)是一个不好的做法?

请直接说出下面一段代码的输出结果并解释

def append(number, number_list = []):

number_list.append(number)

return number_list

print(append(1))

print(append(2)

def create_multipliers()

return [lambda x: i * x for i in range(5)]

for multiplier in create_multipliers():

print(multiplier(2))

1、答:Python中万物皆对象。函数也不例外。对象具有的三个通用属性:id、types和value函数均具备。

总结来看,函数作为对象(object)有如下特点。函数可以赋值给一个变量

例如:

def mi(x):

return x*x*x

a = mi

a(3)

输出结果为27。函数可以储存在容器

例如:

def mi(x):

return x*x*x

list = [mi,6,8]

list[0](3)

输出结果也为27。函数可以作为参数传递给另一个函数

例如:

def mi(x):

return x*x*x

def double(func):

return func(2)

double(mi)

输出结果为8。函数可以作为返回值

例如:

def mi(x):

return x*x*x

def double(x):

return mi(x)

double(5)

输出结果为125。函数可以嵌套

例如:

def get_length(text):

def clean(t):

return t[1:]

new_text = clean(text)

return new_text,len(new_text)

get_length('abcd')

输出结果为('bcd', 3)。实现_call__的类也可以作为函数。(这个暂时没搞明白)

2、答:还不理解,需要进一步学习。

3、答:还不理解,需要进一步学习。

4、为什么当定义一个函数时将list作为缺省参数(default parameter)是一个不好的做法?

答:python中缺省参数和函数是绑定的。当一个函数有一个默认参数,并且默认参数是空的可变类型时(dict和list),该可变类型只初始化一次,之后的每次操作,都在前一次的操作基础上操作。但是对于默认参数是不可变的类型时(tuple和字符串和数字),不会有这种情况。

5、第一题的输出结果为

[1]

[1,2]

原因同4。

第二题输出结果为

def create_multipliers()

return [lambda x: i * x for i in range(5)]

for multiplier in create_multipliers():

print(multiplier(2))

8

8

8

8

8

题中def create_multipliers()后少了一个冒号。

原因为由于Python中的“后期绑定”行为——闭包中用到的变量只有在函数被调用的时候才会被赋值。所以,在上面的代码中,任何时候,当返回的函数被调用时,Python会在该函数被调用时的作用域中查找 i 对应的值(这时,循环已经结束,所以 i 被赋上了最终的值——4)。

解决方法。利用默认参数来生成一个匿名的函数以便实现我们想要的结果。

def create_multipliers():

return [lambda x,i = i: i * x for i in range(5)]

for multiplier in create_multipliers():

print(multiplier(2))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值