Python笔试面试题小结
作者:TM0831 发布时间:2022-07-17 12:51:23
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()])
这篇文章先介绍到这,后期脚本之家小编会为大家分享更多的文章。
来源:https://www.cnblogs.com/TM0831/p/11421384.html
猜你喜欢
- 平时制作页面中可对属性list-style在list-item对象中常用,但用的都不深。一般都设为none重置整个页面就差不多OK,可能很多
- PHP程序员玩转Linux系列文章:1.PHP程序员玩转Linux系列-怎么安装使用CentOS2.PHP程序员玩转Linux系列-lnmp
- 需求最近公司干活,收到一个需求,说是让手动将数据库查出来的信息复制粘贴到excel中,在用excel中写好的公式将指定的两列数据用updat
- 研究编码,得知GB2312编码与区位码的关系,尝试之后,得此程序。搜索,似乎没人写,故发此地。1.简述(1)GB2312标准的定义,其实就是
- 使用timer来统计asp页面程序的运行时间。实例代码和说明见下:<%Dim varInitial_TimevarIniti
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 今天在修改 淘宝 宝贝详情页面的时候,发现页面在 Firefox 下遇到这样一个问题:链接用图片做背景,text-indent:-9999p
- 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心, mysql已经为我们提供了这样一个功
- IE8 的测试版发布,ACID 3 测试正式推出,听上去是让人兴奋的技术进步,而对中文互联网站却是极大的威胁:这意味着,超过半数的中文网页在
- 数据库查询优化的实用技巧:本文中,abigale代表查询字符串,ada代表数据表名,alice代表字段名。技巧一:问题类型:ACCESS数据
- 搭建lnmp完lnmp环境后,测试时出现502报错,看到这个问题,我立刻想到是php-fpm没有起来,但是我用 ps -ef | grep
- 在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以
- 相对于 Ajax,服务端 XMLHTTP 就是在服务端使用 XMLHttpRequest 对象了。虽然说,在服务端使用异步请求是比较不方便的
- 【目标需求】查看某一个字符串是否为中文字符串【解决办法】def check_contain_chinese(check_str): for
- SQL Server数据库连接中常见的错误分析:一."SQL Server 不存在或访问被拒绝"这个是最复杂的,错误发生
- 不正确地调用Windows应用程序接口可能会产生一些意想不到的副作用,以及潜在地对一个应用程序的代码及数据段的破坏。正确地使用一个空的32位
- 由于个人能力有限,文章中难免会出现错误或遗漏的地方,敬请谅解!同时欢迎你指出,以便我能及时修改,以免误导下一个看官。最后希望本文能给你带来一
- numpy的np.fromfile会出现如下的问题,只能一次性读取文件的内容,不能追加读取,连续两次的np.fromfile读到的东西一样如
- 和单选框一样,许多新手在用 Javascript 验证表单(form)中多选框(checkbox)的值时,都会遇到问题,原因是 checkb
- 问:怎样才能取得局域网中所有SQL Server的实例?答:请参考以下的具体步骤:SmoApplication.EnumAvailableS