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中定义结构体的方法
Mar 04 Python
windows下python模拟鼠标点击和键盘输示例
Feb 28 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
浅析Python中的join()方法的使用
May 19 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
详解Python发送email的三种方式
Oct 18 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
django 模型中的计算字段实例
May 19 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
php 什么是PEAR?
2009/03/19 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
2017/12/21 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书