文章图片
1.字符串处理
将字符串中的数字替换成其两倍的值 , 例如:
- 修改前:“AS7G123m (d)F77k”
- 修改后:“AS14G246m (d)F154k”
文章图片
2.Python传参是值传递还是引用传递?
答案是Python中传递参数是引用传递 , 那么要证明是引用传递呢?可以参考下面这个例子:
文章图片
这里分别打印了两个地址 , 一个是对象a的地址 , 一个是传入的参数x的地址 , 可以看到两个地址是一样的 , 这也就说明Python中的传参使用的引用传递!需要注意的是:对于不可变类型 , 在函数中对其操作并不会对原对象产生影响 , 但对于可变类型 , 在函数中对其操作则可能会改变其值 , 如下:
1)传入的参数是不可变类型:
文章图片
2)传入的参数是可变类型:
文章图片
3.浅拷贝与深拷贝的那些事
在Python中 , 浅拷贝与深拷贝是一定要分清楚的!对于浅拷贝和深拷贝 , 可以这么理解:
1)浅拷贝:创建一个对象 , 但其中包含的是原对象中所包含项的引用 , 如果用引用的方式修改了其中的对象 , 就会对原对象进行改变 。
2)深拷贝:创建一个对象 , 并且递归复制原对象中所包含的对象 , 此时修改数据不会对原对象产生影响 。
在下面的代码中包含了赋值、浅拷贝和深拷贝 , 在Python中赋值即引用对象 , 所以对c操作也就是对原对象a进行操作 , 对于浅拷贝对象b和d , 对其中的引用进行操作会改变对a中的对象 , 而对深拷贝对象e进行操作就与原对象a无关了 。
文章图片
4.Python一行式能干嘛?
下面是一些Python一行式的示例 , 从中可以看出Python是非常简洁和强大的!
1)一行代码输出一百以内的奇数:
print([x for x in range(100) if x % 2])
【一行|5道Python笔试面试题】2)一行代码求水仙花数:
print([x for x in range(100, 1000) if int(str(x)[0])**3 + int(str(x)[1])**3 + int(str(x)[2])**3 == x])
3)一行代码打印九九乘法表:
print("".join(["{} * {} = {}\t".format(x, y, x * y) if x != y else "{} * {} = {}\n".format(x, y, x * y) for x in range(1, 10) for y in range(1, x + 1)]))
4)一行代码实现IP地址转换 , 如将192.168.12.1转换成0b11000000 10101000 00001100 00000001:
print("0b"+" ".join(("00000000" + bin(int(i)).replace("0b", ""))[-8:] for i in ip.split(".")))
5)一行代码求1到10的和:
from functools import reduce; print(reduce(lambda x, y: x + y, [i for i in range(1, 11)]))
5.下面这段代码的结果是什么?
文章图片
以上这段代码输出的结果是[6, 6, 6, 6] , 而不是[0, 2, 4, 6]!
产生这个问题的原因在于Python闭包的延迟绑定 。 这意味着内部函数被调用时 , 参数的值在闭包内进行查找 。 所以当mul()返回的函数被调用时 , i的值会在返回的函数里查找 , 而for循环完成后i的值为3 , 也就是i最终赋值为3 。 因此 , 每次返回的函数乘以传入的值就是最后的结果 , 得到的结果就是[6, 6, 6, 6] 。
如果要解决这个问题 , 可以参考以下方法:
1)使用Python生成器 。
文章图片
2)创造一个闭包 , 利用默认函数进行绑定 。
文章图片
推荐阅读
- 浦峰|冬奥纪实8k超高清试验频道开播,冬奥结束后转入常态化运转
- 技术|“2”类医械有重大进展:神经介入产品井喷、基因测序弯道超车
- 重大进展|“2”类医械有重大进展:神经介入产品井喷、基因测序弯道超车
- 测试|图森未来完成全球首次无人驾驶重卡在公开道路的全无人化测试
- 数据|数智安防时代 东芝硬盘助力智慧安防新赛道
- IT|国内最长湖底隧道正式通车运营
- IT|报道称Polestar 4电动SUV将跟保时捷Macan电动版对标
- 王者|布局手术机器人赛道,谁是王者? | A股2022投资策略⑩
- 柯腾|争做细分赛道冠军——探寻厦门“小巨人”企业成长密码
- Disney|光明日报评迪士尼凌晨数千人排队抢购玩偶:道理何在?