python面试最常见的一个知识点
python面试题
python面试最常见的一个知识点
本篇文字约为800字,阅读时间约为3分钟。
1
前言
一周没见,哈哈哈.....最近晚上有些微忙,昨天跟朋友去滑雪场逛了一圈,好久没运动了,滑的过程中滚了一圈
喔喔对了,这里顺便说一句关于微信的改版,ios的同学们估计已经看到新版微信的界面了,安卓应该还需要一阵,在stormzhang(张哥)的知识星球倒是看到分享了安卓的内测版,新版微信有了看一看的功能,是时候期待一波原创作者流量时代的爆发了。之前我在写文章中有几篇莫名的爆文,去后台看数据显示多数流量来源于看一看,也就是说,微信公众号将原来的“赞”改成了“好看”,好看数目越多,被推荐到“看一看”上的概率就会越大,这意味着个人订阅号的曝光率会明显增大,所以现在踏入公号平台还不算晚,这样一来,对于个人坚持下去的动力又有了一个理由...O(∩_∩)O哈哈~
今天呢分享一个在python中面试最常见到的一个知识点,非常基础,对于刚学习的人来说也会经常弄错 ---- python语言特性的函数参数传递,实际上在早期的小课堂中,有分享过,这里用例子说明下,相信实践出真理。
2
示例
例子1:
a = 1
""" 例子1:问 a 的值最终是多少? """
def fun_a(a):
a = 2
fun_a(a)
例子2:
b = []
""" 例子2:b是一个列表,问,b的值是多少?"""
def fun_b(b):
b.append(1)
fun_b(b)
3
根据id对比以及打印得出结论
对于上面的两个小例子,我们可以通过下面的方式来亲手验证下:
例1:
a = 1
""" 例子1:函数a,a为int """
def fun_a(a):
print(f'函数中形参a的id:{id(a)}')
a = 2
print(f'a=2之后a的id:{id(a)}')
print(f'数字2的id:{id(2)}')
fun_a(a)
print(f'函数外面a的id:{id(a)}')
print(f'a的值:{a}')
结果输出:
>>> 函数中形参a的id:1467051488
>>> a=2之后a的id:1467051520
>>> 数字2的id:1467051520
>>> 函数外面a的id:1467051488
>>> a的值:1
例2:
b = []
""" 例子2:函数b,b为list """
def fun_b(b):
print(f'函数中形参b的id:{id(b)}')
b.append(1)
print(f'b.append之后b的id:{id(b)}')
fun_b(b)
print(f'函数外面b的id:{id(b)}')
print(f'b的值:{b}')
输出结果:
>>> 函数中形参b的id:1989582375944
>>> b.append之后b的id:1989582375944
>>> 函数外面b的id:1989582375944
>>> b的值:[1]
4
原理及总结
str为不可变对象,list为可变对象。在python中,str、 tuples、和numbers是不可更改的对象,而 list, dict, set 等则是可以修改的对象。(这就是这个问题的重点)
这么说可能还是不太明白,用白话解释一下:
例子1:
当一个引用a传递给函数fun_a的时候,函数会自动复制一份引用a(可以参考打印输出的id内存地址),这个函数里的引用a和外边的引用a没有半毛关系,内存地址就不一样!也就是说函数fun_a把引用指向了一个不可变对象nums、str,所以不会影响到函数外面的同名变量。
例子2:
函数内的引用指向的是可变对象list,对它的操作就和定位了指针地址一样,在内存里进行修改。可以看到对list进行append操作内存地址无论是在函数内还是函数外都是不变的!
至此完!
● python小课堂20 - 5分钟教你用图片定位具体地址!
● python小课堂17 - 30行代码破解加密ZIP文件
长按关注
公众号名称:咪哥杂谈
一个咪咪怪的公众号
长按二维码关注哦!
来呀!来呀!关注我吧!!