查看原文
其他

python面试最常见的一个知识点

sssyyy 咪哥杂谈 2019-07-11
咪哥杂谈

python面试题

python面试最常见的一个知识点


本篇文字约为800字,阅读时间约为3分钟。


1

前言


一周没见,哈哈哈.....最近晚上有些微忙,昨天跟朋友去滑雪场逛了一圈,好久没运动了,滑的过程中滚了一圈,结果现在腰酸背痛的,原本昨天更的文章拖到了今天。本想着今年能把python基础写完,照这节奏怕是得明年2月份才能完成这个目标了,不过不要紧,一步一个脚印慢慢来吧。。


喔喔对了,这里顺便说一句关于微信的改版,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小课堂19 - 面向对象篇(二)

● python小课堂18 - 面向对象篇(一)

● python小课堂17 - 30行代码破解加密ZIP文件

● python小课堂16 - 函数篇



长按关注


公众号名称:咪哥杂谈

一个咪咪怪的公众号

长按二维码关注哦!


来呀!来呀!关注我吧!!




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存