侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python笔试面试题小结

Python  /  管理员 发布于 7年前   212

1.字符串处理

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

修改前:"AS7G123m (d)F77k"

修改后:"AS14G246m (d)F154k"

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

import retext = "AS7G123m (d)F77k"nums = re.findall(r'(\d+)', text) # 取出字符串中数字double_nums = [2 * int(i) for i in nums]  # 乘以2the_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 += textprint(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 中矩阵或者数组相减的法则详解
    下一条:
    弄懂这56个Python使用技巧(轻松掌握Python高效开发)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客