Python笔试面试题小结


Posted in Python onSeptember 07, 2019

1.字符串处理

将字符串中的数字替换成其两倍的值,例如:

修改前:"AS7G123m (d)F77k"

修改后:"AS14G246m (d)F154k"

  个人思路:先用正则表达式将其中的数字匹配出来进行乘2操作,然后将字符串根据其中的数字进行切割,得到一个字符列表,最终将乘以2后的数字和原有的字符进行拼接得到最后的结果。(我脑子比较笨,想不到别的,如果您有更好更简便的方法,希望可以分享一下!)

import re

text = "AS7G123m (d)F77k"
nums = re.findall(r'(\d+)', text) # 取出字符串中数字
double_nums = [2 * int(i) for i in nums]  # 乘以2
the_str = [] # 字符列表
for i in nums:
  the_str.append(text.split(i, 1)[0])
  text = text.split(i, 1)[1]
result = "" # 结果
for i in range(len(double_nums)):
  result += the_str[i] + str(double_nums[i])
result += text
print(result)

2.Python传参是值传递还是引用传递?

答案是Python中传递参数是引用传递,那么要证明是引用传递呢?可以参考下面这个例子:

def f(x):
   print(id(x))
   
 
 a = 1
 print(id(a))
 f(a)
 # 140716760159264
 # 140716760159264

这里分别打印了两个地址,一个是对象a的地址,一个是传入的参数x的地址,可以看到两个地址是一样的,这也就说明Python中的传参使用的引用传递!需要注意的是:对于不可变类型,在函数中对其操作并不会对原对象产生影响,但对于可变类型,在函数中对其操作则可能会改变其值,如下:

1)传入的参数是不可变类型:

def f(x):
   x += "666" # 这里会创建一个新的对象
   print(x)
 
 
 s = "777" # 字符串不可变
 print(s)
 f(s)
 print(s)
 
 # 777
 # 777666
 # 777

2)传入的参数是可变类型:

def f(x):
   x.append(4) # 修改原对象的值
   print(x)
 
 
 s = [1, 2, 3] # 列表可变
 print(s)
 f(s)
 print(s)

# [1, 2, 3]
# [1, 2, 3, 4]
# [1, 2, 3, 4]

3.浅拷贝与深拷贝的那些事

在Python中,浅拷贝与深拷贝是一定要分清楚的!对于浅拷贝和深拷贝,可以这么理解:

1)浅拷贝:创建一个对象,但其中包含的是原对象中所包含项的引用,如果用引用的方式修改了其中的对象,就会对原对象进行改变。

2)深拷贝:创建一个对象,并且递归复制原对象中所包含的对象,此时修改数据不会对原对象产生影响。

在下面的代码中包含了赋值、浅拷贝和深拷贝,在Python中赋值即引用对象,所以对c操作也就是对原对象a进行操作,对于浅拷贝对象b和d,对其中的引用进行操作会改变对a中的对象,而对深拷贝对象e进行操作就与原对象a无关了。

import copy
 
 a = [1, [2], 3]
 b = a[:] # 使用切片操作,浅拷贝
 c = a # 赋值操作,即引用
 d = a.copy() # 浅拷贝
 e = copy.deepcopy(a) # 深拷贝
 
 b.append(4)
 c.append(5)
 d.append(6)
 d[1].append(2)
 e.append(7)
 e[1].append(3)
 
 print(a) # [1, [2, 2], 3, 5]
 print(b) # [1, [2, 2], 3, 4]
 print(c) # [1, [2, 2], 3, 5]
 print(d) # [1, [2, 2], 3, 6]
 print(e) # [1, [2, 3], 3, 7]

 4.Python一行式能干嘛?

下面是一些Python一行式的示例,从中可以看出Python是非常简洁和强大的!

1)一行代码输出一百以内的奇数:

print([x for x in range(100) if x % 2])

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.下面这段代码的结果是什么?

def mul():
return [lambda x: x * i for i in range(4)]


print([m(2) for m in mul()])

以上这段代码输出的结果是[6, 6, 6, 6],而不是[0, 2, 4, 6]!

产生这个问题的原因在于Python闭包的延迟绑定。这意味着内部函数被调用时,参数的值在闭包内进行查找。所以当mul()返回的函数被调用时,i的值会在返回的函数里查找,而for循环完成后i的值为3,也就是i最终赋值为3。因此,每次返回的函数乘以传入的值就是最后的结果,得到的结果就是[6, 6, 6, 6]。

如果要解决这个问题,可以参考以下方法:

1)使用Python生成器。

def mul():
   for i in range(4):
     yield lambda x: x * i
 
 
 print([m(2) for m in mul()])

2)创造一个闭包,利用默认函数进行绑定。

def mul():
   return [lambda x, i=i: x * i for i in range(4)]
 
 
 print([m(2) for m in mul()])

这篇文章先介绍到这,后期三水点靠木小编会为大家分享更多的文章。

Python 相关文章推荐
python 基础学习第二弹 类属性和实例属性
Aug 27 Python
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
Jun 09 Python
python复制文件的方法实例详解
May 22 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
Sep 26 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
使用OpenCV实现仿射变换—平移功能
Aug 29 Python
解决python中的幂函数、指数函数问题
Nov 25 Python
pytorch: Parameter 的数据结构实例
Dec 31 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
python怎么判断模块安装完成
Jun 19 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 #Python
django创建简单的页面响应实例教程
Sep 06 #Python
如何利用python给图片添加半透明水印
Sep 06 #Python
Python从文件中读取指定的行以及在文件指定位置写入
Sep 06 #Python
Python常用数据类型之间的转换总结
Sep 06 #Python
Python3 JSON编码解码方法详解
Sep 06 #Python
PYTHON EVAL的用法及注意事项解析
Sep 06 #Python
You might like
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
小程序实现tab标签页
2020/11/16 Javascript
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
Python单元测试简单示例
2018/07/03 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
斯福泰克软件测试面试题
2015/02/16 面试题
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
会计职业生涯规划书
2014/01/13 职场文书
医学生自我评价
2014/01/27 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
代理词怎么写
2015/05/25 职场文书
爱护环境建议书
2015/09/14 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android