python面试题总结(7)--操作类

1. Python 交换两个变量的值

答:在 Python 中交换两个对象的值通过下面的方式即可
a , b = b ,a
但是需要强调的是这并不是元组解包,通过 dis 模块可以发现,这是交换操作的字节码是 ROT_TWO,意思是在栈的顶端做两个值的互换操作。

2. 在读文件操作的时候会使用 read、readline 或者 readlines,简述它们各自的作用

答:.read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果希望一行一行的输出那么就可以使用 readline(),该方法会把文件的内容加载到内存,所以对于大文件的读取操作来说非常的消耗内存资源,此时就可以通过 readlines 方法,将文件的句柄生成一个生产器,然后去读就可以了。
可参考: 文献、菜鸟教程

3. json 序列化时,可以处理的数据类型有哪些?如何定制支持 datetime 类型?

答: 可以处理的数据类型是 str、int、list、tuple、dict、bool、None, 因为 datetime 类不支持 json 序列化,所以我们对它进行拓展。

详细知识参考:序列化

#自定义时间序列化
import json
from datetime import datetime, date#JSONEncoder 不知道怎么去把这个数据转换成 json 字符串的时候,它就会去调 default()函数,所以都是重写这个函数来处理它本身不支持的数据类型,
#default()函数默认是直接抛异常的。
class DateToJson(json.JSONEncoder):def default(self, obj)if isinstance(obj, datetime)return obj.strftime('%Y-%m-%d %H:%M:%S')elif isinstance(obj, date)return obj.strftime('%Y-%m-%d')elsereturn json.JSONEncoder.default(self, obj)d = {'name''cxa', 'data': datetime.now()}
print(json.dumps(d, cls=DateToJson))

4. json 序列化时,默认遇到中文会转换成 unicode,如果想要保留中文怎么办?

答:可以通过 json.dumps 的 ensure_ascii 参数解决,代码示例如下:

import json
a=json.dumps({“name”:“张三”},ensure_ascii=False)
print(a)
可以参考文献:json 中的ensure_ascii=False

5. 有两个磁盘文件 A 和 B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件 C 中。

答:

#文件 A.txt 内容为 ASDCF
#文件 B.txt 内容为 EFGGTG
with open("A.txt") as f1:f1_txt = f1.readline()
with open("B.txt") as f2:f2_txt = f2.readline()
f3_txt = f1_txt + f2_txtf3_list = sorted(f3_txt)with open("C.txt", "a+") as f:f.write("".join(f3_list))

输出的文件 C 的内容为 ACDEFFGGGST

6. 如果当前的日期为 20190530,要求写一个函数输出 N 天后的日期,(比如 N 为 2,则输出 20190601)。

答:这个题目考察的是 datetime 里的 timedelta 方法的使用,参数可选、默认值都为 0:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 通过这个参数可以指定不同的日期类型进行加减操作,这里我们需要改的是 days,代码如下

import datetimedef datetime_operate(n: int):now = datetime.datetime.now()  # 获取当前时间_new_date = now + datetime.timedelta(days=n)  # 获取指定天数后的新日期new_date = _new_date.strftime("%Y%m%d")  # 转换为指定的输出格式return new_dateif __name__ == '__main__'print(datetime_operate(4))

参考文献:Python timedelta模块 时间增减用法
参考二

7. 写一个函数,接收整数参数 n,返回一个函数,函数的功能是把函数的参数和 n 相乘并把结果返回。

答:这个题目考查了闭包的使用。闭包请参考:python中的闭包
伪代码示例如下:

def 外层函数(参数):def 内层函数():print("内层函数执行", 参数)return 内层函数内层函数的引用 = 外层函数("传入参数")
内层函数的引用()

代码示例如下,返回函数之类型是函数对象。

def mul_operate(num):def g(val):return num * valreturn gm = mul_operate(8)
print(m(5))

返回值为:40

8. 下面代码会存在什么问题,如何改进?

def strappend(num)str='first'for i in range(num)str+=str(i)return str

答: 首先不应该使用 Python 的内置函数 str 作为变量名,将其改为 s,另外在Python中str 是个不可变对象,每次迭代都会生成新的存储空间,num 越大,创建的 str 对象就会越多,内存消耗越大。
使用 yield 改成生成器即可, 还有一点就是命名规范的位置,函数名添加_分割比较好,完整的代码如下:

def str_append(num):s = 'first'for i in range(num):s += str(i)yield sif __name__ == '__main__':for i in str_append(3):print(i)

输出结果:

first0
first01
first012

9. 一行代码输出 1-100 之间的所有偶数。

答:可以通过列表生成式,然后使用与操作如果如 1 与之后结果为 0 则表明为偶数,等于 1 则为奇数。

方法1

print([i for i in range(1, 101) if i & 0x1 == 0])

方法2:测试发现方法二效率更高

print(list(range(2, 101, 2)))

10. with 语句的作用

with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。
Python之with语法原理

#一般访问文件资源时我们会这样处理:
f = open('c:\test.txt', 'r')
data = f.read()
f.close()

这样写没有错,但是容易犯两个毛病:

  1. 如果在读写时出现异常而忘了异常处理。
  2. 忘了关闭文件句柄
#以下的加强版本的写法:f = open('c:\test.txt', 'r')
try:data = f.read()
finally:f.close()

以上的写法就可以避免因读取文件时异常的发生而没有关闭问题的处理了。代码长了一些。但使用 with 有更优雅的写法:

with open(r'c:\test.txt', 'r') as f:data = f.read()

11. Python 字典和 json 字符串相互转化方法

答:

在 Python 中使用 dumps 方法 将 dict 对象转为 Json 对象,使用 loads 方法可以将 Json 对象转为 dict 对象。

import jsondic = {'a': 123, 'b': "456", 'c': "liming"}
# dumps:字典对象转换成json对象
json_str = json.dumps(dic)
print(json_str)
# loads:json对象转换成字典对象
dic2 = json.loads(json_str)
print(dic2)

输出结果:

{"a": 123, "b": "456", "c": "liming"}
{'a': 123, 'b': '456', 'c': 'liming'}

我们再来看一个特殊的例子

import jsondic = {'a':123, 'b':"456", 'c':"liming"}
# 转换成json格式
dic_ = str(dic).replace("'", "\"")
print(dic_)
# loads:json对象转换成字典对象
dic_str = json.loads(dic_)
print(dic_str)

输出结果:

{'a': 123, 'b': '456', 'c': 'liming'}

首先 json.loads(jsonstr) 这里面的参数只能是 jsonstr 格式的字符串。
当我们使用 str 将字典 dic 转化为字符串以后,得到的结果为:"{‘a’: 123, ‘b’: ‘456’, ‘c’: ‘liming’}"。
如果直接使用 json.loads(str(dic)) 你会发现出现错误,原因是单引号的字符串不符合Json的标准格式。
所以再次使用了 replace("’", “”")从而得到字典,其实这个例子主要目的是告诉大家 Json 的标准格式是不支持单引号型字符串的,否则会出现以下错误:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

选择让孩子练习羽毛球的家长好好看看!

一、初级阶段 主要要练习小孩的各项身体素质指标、基础的发球和高远球、最基础的步伐训练。根据小孩年龄的不同以及练习频率的不同,大概需要100-300小时的训练量(训练间隔天数越多,时间需要越长)。 二、初级提高阶段 高远球对抗能…

LOJ#6281. 数列分块入门 5

内存限制:256 MiB时间限制:500 ms标准输入输出题目类型:传统评测方式:文本比较上传者: hzwer提交提交记录统计讨论 1测试数据题目描述 给出一个长为 nnn 的数列,以及 nnn 个操作,操作涉及区间开…

版本控制工具历史的10个里程碑

导读:作者Eric Raymond在flourish上发表的一篇《Astonishments, ten, in the history of version control》,文中总结了版本控制工具的重要10个里程碑,一起与开发者分享下。 如果你想要了解真正的历史,你需要回到在打孔卡上进行人…

php把语音转成帧,[转载]用TCP/IP实现自己简单的应用程序协议:成帧器部分

在前面《字节和字符,对信息进行编码》,《Socket>流,TCP连接,TCP可靠性概述》一系列的随笔中我们已经表述了相应的理论知识,现在可以动手实现一个自己的应用程序协议。将 数据转换成在线路上传输的字节序列只完成了一半的工作,在…

实体联系图简介

通常,使用实体联系图(entity relationship diagram)来建立数据模型。可以把实体联系图简称为ER图,相应地可把用ER图描绘的数据模型称为ER模型。 ER图中包含了实体(即数据对象)、关系和属性3种基本成分,通常用矩形框代表实体,用连…

Flask爱家租房--城区信息

0.效果展示 城市列表使用缓存的过程 1.后端代码 # coding:utf-8from . import api from flask import g, current_app, jsonify, request, session from ihome.utils.response_code import RET from ihome.models import Area, House, Facility, HouseImage, User, Order from …

数值计算算法-多项式插值算法的实现与分析

数值计算是指在数值分析领域中的算法。数值分析是专门研究和数字以及近似值相关的数据问题,数值计算在数值分析的研究中发挥了特别重要的作用。 多项式插值是计算函数近似值的一种方法。其中函数值仅在几个点上已知。 该算法的基础是建立级数小于等于n的一个插值多项…

HIVE ORC 报错ClassCastException

HIVE ORC格式的表查询报错 Failed with exception java.io.IOException:java.lang.ClassCastException: org.apache.hadoop.hive.ql.io.orc.OrcStruct cannot be cast to org.apache.hadoop.io.BinaryComparable 建表语句如下: CREATE EXTERNAL TABLE test_orc( te…

程序型语言VS.编译型语言

导读:每日[快讯精选]是由CSDN研发频道推出的特色栏目,每一天我们将从国外技术媒体(例如Hacker News、Reddit...等等)中挑选出有价值的新闻简讯,让您在第一时间掌握业界主流的技术文摘,每天清晨为您献上第一份技术早餐。 [1]程序型…

ancestral 箭头符号,译林版《牛津高中英语》模块五 高二上学期

《牛津英语》由译林出版社和牛津大学出版社联合编写出版。通过在南京和苏州开始的试用,取得了非常良好的效果,己在省内全面推广。有人认为新教材在教育观念和编排体系上的改革力度是八十年代以来最大的一次。它带给我们一线教师的冲击无疑是巨大的。二、…

[NOI2012]骑行川藏

题解: 我发现拉格朗日乘数法真是个好东西。。 我是不会说我数学竞赛求最值都是用这个东西的 由于我不太会打那个符号就用li代表通常偏导数中的lanmuda 。。。 这题里化简一下就可以得到 2 li * ki * ​(vi​−vi′​)* vi^2​1 然后一旦li确定 我们会发现这个三次函…

MAC地址和IP地址的关系

简单地说:ip地址是服务商给你的,mac地址是你的网卡物理地址。 一、IP地址 对于IP地址,相信大家都很熟悉,即指使用TCP/IP协议指定给主机的32位地址。IP地址由用点分隔开的4个8八位组构成,如192.168.0.1就是一个IP地址…

Linux中断 - tasklet

一、前言 对于中断处理而言,linux将其分成了两个部分,一个叫做中断handler(top half),属于不那么紧急需要处理的事情被推迟执行,我们称之deferable task,或者叫做bottom half,。具体…

数字电视制播设备间的文件交换格式

在现今的数字电视演播室中,设备之间基本上采用信号流连接方式,如SDI、STDI、模拟YUV、VBS等信号流。在非线性编辑系统和播出系统与服务器之间的连接,还有基于MPEG-2传输流等的信号连接方式。基于信号流连接方式的主要特点是,传送时…

oracle 位移运算符,Oracle“(+)”运算符

在Oracle中,()表示JOIN中的“可选”表。 所以在你的查询中,select a.id, b.id, a.col_2, b.col_2, ... from a,b where a.idb.id()这是一个左外加B表与一个表。 就像现代的左连接查询一样。 (它将返回a表的所有数据,而不会丢失在另一边的数据…

JAVA-数据类型-复习

JAVA-数据类型-复习 Java中,一共有8种数据类型,4种整型,2种浮点型,1种用于表示Unicode编码的字符单元的字符类型char,1种布尔类型。 整型 类型存储需求(字节)一个字节包含8个位取值范围byte1-12…

什么是实体-联系图(ER图)

实体-联系图(ER图)数据模型中包含3种相互关联的信息:数据对象、数据对象的属性及数据对象彼此间相互连接的关系。 1.数据对象 数据对象是对软件必须理解的复合信息的抽象。所谓符合信息是指具有一系列不同性质或属性的事物,仅有单…

记录的习惯

记录的习惯 书籍是人类进步的阶梯,承载了人类文明进步的历程。大多数人都写过日记,但不知道有多少人重视过日记。常常我们会用相机记录一些生活中的场景,然后收藏起来,等到若干年后再拿出来看,总能感觉到很温馨很美好。…

php 去掉实体,用PHP删除除5个预定义HTML实体之外的所有实体的最佳方法-用于XHTML5输出...

我目前正在尝试提供XHTML5.目前,我在正在处理的页面上提供XHTML 1.1 Strict.那就是我为有能力的浏览器所做的.对于那些不接受XML编码数据的人,我会严格遵循HTML4.1.在尝试使用HTML5进行试验时,以HTML5格式交付时,所有功能或多或少都可以按预期工作.但是,作为XHTML5交付时,我遇到…