Python高频面试题之函数

188 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

前言

说到函数,我们都不陌生,估计我们开发每天都在写函数。函数使用如何频繁,面试问的频率自然也不低。那么Python函数你了解多少,先来回答下面的题目吧。

1. Python函数的参数传递方式是值传递还是引用传递?

答:Python 的参数传递有:位置参数、默认参数、可变参数、关键字参数。

函数的传值是值传递还是引用传递,需要分2种情况:

  • 不可变参数用值传递

像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象 。

  • 可变参数是引用传递的

比如像列表、字典这样的容器对象是通过引用传递,可变对象能在函数内部改变。

2. 函数名可作为参数传递吗?

答:函数名可以作为参数传递。因为Python中万物皆对象。

3. 缺省参数的作用是什么?

答:缺省参数指在调用函数的时候没有传入参数的情况下,调用默认的参数,在调用函数的同时赋值时,

所传入的参数会替代默认参数。

*args 是不定长参数,表示输入参数是不确定的,可以是任意多个。

**kwargs 是关键字参数,赋值的时候是以键 = 值的方式,参数是可以任意多对在定义函数的时候

不确定会有多少参数会传入时,就可以使用两个参数。

4. 递归函数什么时候会停止?

答:递归的终止一般定义在递归函数内部,在递归调用前判断,根据判断的结果选择

是继续调用自身,还是返回。

终止的条件多采用下面2种方法:

  1. 判断递归的次数是否达到某一限定值

  2. 判断运算的结果是否达到某个范围等,根据设计的目的来选择。

5. 下面代码最终会输出什么?为什么?

a = 1
b = 2
c = [a]
a= 3
print(c)

答:会输出[1]。因为a对象是数值,传递时是拷贝的,因此值不能改变。

6. hasattr() getattr() setattr() 函数的作用是什么?

答:hasattr(obj, name)是判断一个对象obj中是否有name属性,返回的是bool值;

getattr(obj, name)是获取对象obj的name属性或方法。存在会打印出来,不存在会报错;

setattr(obj,name,values)是给对象属性赋值的方法。若属性不存在会先创建再赋值。

7. map函数和reduce函数的使用了解吗?

答:

  • map()包含两个参数,第一个参数是一个函数,第二个是序列(列表 或元组)。其中,函数(即 map

的第一个参数位置的函数)可以接收一个或多个参数。

  • reduce()第一个参数是函数,第二个是序列(列表或元组)。但是,其函数必须接收两个参数。

从对传进去的数值作用来讲:

map()是将传入的函数依次作用到序列的每个元素,每个元素都是独自被函数“作用”一次 。

reduce()是将传人的函数作用在序列的第一个元素得到结果后,把这个结果继续与下一个元素作用。

小结

本文总结了Python函数的高频面试题,涵盖了函数的基础只是及常用函数的使用细节。我们在开发中定要注意细节,熟悉各种场景的函数知识。