持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情
前言
说到函数,我们都不陌生,估计我们开发每天都在写函数。函数使用如何频繁,面试问的频率自然也不低。那么Python函数你了解多少,先来回答下面的题目吧。
1. Python函数的参数传递方式是值传递还是引用传递?
答:Python 的参数传递有:位置参数、默认参数、可变参数、关键字参数。
函数的传值是值传递还是引用传递,需要分2种情况:
- 不可变参数用值传递
像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象 。
- 可变参数是引用传递的
比如像列表、字典这样的容器对象是通过引用传递,可变对象能在函数内部改变。
2. 函数名可作为参数传递吗?
答:函数名可以作为参数传递。因为Python中万物皆对象。
3. 缺省参数的作用是什么?
答:缺省参数指在调用函数的时候没有传入参数的情况下,调用默认的参数,在调用函数的同时赋值时,
所传入的参数会替代默认参数。
*args 是不定长参数,表示输入参数是不确定的,可以是任意多个。
**kwargs 是关键字参数,赋值的时候是以键 = 值的方式,参数是可以任意多对在定义函数的时候
不确定会有多少参数会传入时,就可以使用两个参数。
4. 递归函数什么时候会停止?
答:递归的终止一般定义在递归函数内部,在递归调用前判断,根据判断的结果选择
是继续调用自身,还是返回。
终止的条件多采用下面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函数的高频面试题,涵盖了函数的基础只是及常用函数的使用细节。我们在开发中定要注意细节,熟悉各种场景的函数知识。