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)
#
#

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

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

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

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笔试面试题小结的更多相关文章

  1. Python笔试面试题_牛客(待完善)

    中文,免费,零起点,完整示例,基于最新的Python 3版本.https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42 ...

  2. python笔试面试题_视频中(待完善)

    一.选择填空题 1. 用一行代码交换a,b的值 a,b = 1,2 print(a,b) a,b = b,a print(a,b) 2. 元祖中有一个元素,有逗号则类型是元祖,无逗号则是远数据类型 t ...

  3. 『Python题库 - 填空题』151道Python笔试填空题

    『Python题库 - 填空题』Python笔试填空题 part 1. Python语言概述和Python开发环境配置 part 2. Python语言基本语法元素(变量,基本数据类型, 基础运算) ...

  4. Python 笔试集(4):True + True == ?

    目录 目录 前文列表 面试题True Ture 布尔值 布尔类型是特殊的整数类型 前文列表 Python 笔试集:什么时候 i = i + 1 并不等于 i += 1? Python 笔试集(1):关 ...

  5. 整理的最全 python常见面试题(基本必考)

    整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...

  6. 整理的最全 python常见面试题

      整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩ 1.大数据的文件读取: ① 利用生成器generator: ②迭代器进行迭代遍历:for line in file; 2.迭代 ...

  7. Python基础面试题库

    Python基础面试题库   Python是一门学习曲线较为容易的编程语言,随着人工智能时代的到来,Python迎来了新一轮的高潮.目前,国内知乎.网易(游戏).腾讯(某些网站).搜狐(邮箱).金山. ...

  8. STL笔试面试题总结(干货)(转)

    STL笔试面试题总结 一.STL有哪些组件? STL提供六大组件彼此此可以组合套用: 1.容器容器就是各种数据结构,我就不多说,看看下面这张图回忆一下就好了,从实现角度看,STL容器是一种class ...

  9. Python自动化测试面试题-编程篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

随机推荐

  1. Unity AR Foundation 和 CoreML: 实现手部的检测和追踪

    0x00 前言 Unity的AR Foundation通过上层抽象,对ARKit和ARCore这些底层接口进行了封装,从而实现了AR项目的跨平台开发能力. 而苹果的CoreML是一个可以用来将机器学习 ...

  2. Node + js实现大文件分片上传基本原理及实践(一)

    _ 阅读目录 一:什么是分片上传? 二:理解Blob对象中的slice方法对文件进行分割及其他知识点 三. 使用 spark-md5 生成 md5文件 四. 使用koa+js实现大文件分片上传实践 回 ...

  3. HTML页面中的布局问题

    在做网站中,给整个大的框架宽度设置为100%,然后设置body的最小宽度是网站的内容部分的宽度.网站内容的宽度是固定的.

  4. Java--随机数和随机数种子(转)

    在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器. 有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚 ...

  5. linux初学者-正则表达式

      在windows中,是没有办法批量处理文件的,但是在linux系统中,可以通过命令直接处理一系列文件,这些文件的处理就需要用到正则表达式.这同样可以应用与目录. 1.处理多个文件 正则表达式中批量 ...

  6. 【杂谈】Hash表与平衡树

    hash表与平衡树查询数据的时间复杂度是多少? hash表为O(1),平衡树为O(logn) 这个时间复杂度是如何得出的? 时间复杂度是按照最糟糕的情况来的.但即使是最糟糕的情况,hash表也只需要计 ...

  7. Spring源码分析之环境搭建

    写在最前面 最近突然心血来潮,想看看源码,看看大牛都怎么码代码,膜拜下.首选肯定是spring大法,于是说干就干,从GitHub上下载spring-framework源码编译拜读. 环境搭建 安装JD ...

  8. 【Java】Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 1099

    详细信息如下: Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: ...

  9. 【Python-django后端开发】logging日制配置详解!!!

    官方文档请查看:https://docs.djangoproject.com/en/1.11/topics/logging/ 1. 配置工程日志,在setting.py里,如下 LOGGING = { ...

  10. jenkins弱口令漏洞

    jenkins弱口令漏洞 一.漏洞描述 通过暴力破解管理控制台,如果爆破成功,可获得后台管理权限.操作后台,后台可通过脚本命令行功能执行系统命令,如反弹shell等,低权限可以通过创建控制台输出方式执 ...