程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

python面试题(7)

python杂谈(0)

标签  

python面试题(7)

python电子书(56)

日期归档  

【python面试170题】6. 操作类题目

发布于2019-08-22 16:57     阅读(1023)     评论(0)     点赞(13)     收藏(0)


【面试题目来着微信公众号:GitChat】

操作类题目

  1. Python 交换两个变量的值
a,b = b,a
  • 1
  1. 在读文件操作的时候会使用 read、readline 或者 readlines,简述它们各自的作用
    【read】一次读取文件所有的内容,返回str。如果给一个int参数n,则读n个字节的内容。
    【readline 】读取一行内容,返回str,指针+1;如果给一个int参数n,则读n个字节的内容,最多读一行。
    【readlines】一次读取文件所有的内容,返回list,每一行为一个元素。
    如果给一个int参数n,则读n个字节的内容。
  2. json 序列化时,可以处理的数据类型有哪些?如何定制支持 datetime 类型?
    【json序列化可以处理的数据类型】数字,字符串,元组,列表,字典,布尔值,None(注意集合是不支持的数据类型)
    【支持datetime】
    通过查看json.dumps()方法的函数注释,发现该方法有两个参数cls,defualt可以自定义处理数据类型
    在这里插入图片描述
# 在json的__init__.py文件中,能看到以下自定义数据类型的
Specializing JSON object encoding::

    >>> import json
    >>> def encode_complex(obj):
    ...     if isinstance(obj, complex):
    ...         return [obj.real, obj.imag]
    ...     raise TypeError(f'Object of type {obj.__class__.__name__} '
    ...                     f'is not JSON serializable')
    ...
    >>> json.dumps(2 + 1j, default=encode_complex)
    '[2.0, 1.0]'
    >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
    '[2.0, 1.0]'
    >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
    '[2.0, 1.0]'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
# 根据这个demo,我们自定义一个encode_datetime方法,处理datetime.datetime()类
def test27():
    a = datetime.datetime.now()
    print("%s %s" % (a, type(a)))
    print(json.dumps(a, default=encode_datetime))
    pass


def encode_datetime(obj):
    if isinstance(obj, datetime.datetime):
        return obj.strftime('%Y-%m-%d %H:%M:%S')
    raise TypeError(f'Object of type {obj.__class__.__name__} '
                    f'is not JSON serializable')


test27()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  1. json 序列化时,默认遇到中文会转换成 unicode,如果想要保留中文怎么办?
    通过查看参数说明,发现ensure_ascii如果为false时,可能不会编码,试了一下,果然输出的就是中文了.
def test28():
    a = "诗和远方"
    b = json.dumps(a, ensure_ascii=False)
    print(b)
    c = json.dumps(a)
    print(c)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 有两个磁盘文件 A 和 B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件 C 中。
def test29():
    with open("A", "r") as fa:
        a = fa.read()
    with open("B", "r") as fb:
        b = fb.read()
    c = a + b
    d = sorted(c)
    with open("C", "a") as fc:
        fc.write("".join(d))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

文件A和文件B
文件A文件B
输出的文件C
输出的文件C
54. 如果当前的日期为 20190530,要求写一个函数输出 N 天后的日期,(比如 N 为 2,则输出 20190601)。

import datetime
def test30(t="20190530", format="%Y%m%d"):
    old_time = datetime.datetime.strptime(t, format)
    add_day = datetime.timedelta(days=2)
    new_time = old_time + add_day
    result = new_time.strftime(format)
    print(result)
    return result
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 写一个函数,接收整数参数 n,返回一个函数,函数的功能是把函数的参数和 n 相乘并把结果返回。
def test31(n: int):
	# 参数不是int类型就抛异常
    if not isinstance(n, int):
        raise Exception("param n must be int.")

    def main(*args):
   	 # 题目没有交代清楚,里层函数可能有多个参数,多个或没有参数这返回列表
        if len(args) == 1:
            return args * n
        else:
            result = []
            for i in args:
                result.append(i * n)
            return result

    return main
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  1. 下面代码会存在什么问题,如何改进?
    在这里插入图片描述
    首先参数名str和内置的字符串类str重复了,把变量当做方法访问会抛出异常,
    其次,输入的参数num没有做类型校验,传入其他类型,range()会抛出异常.
def strappend(num):
	# 可以考虑兼容字符串类型的数字等
    if not isinstance(num, int):
        raise Exception("param num must be int.")
    st = 'first'
    for i in range(num):
        st += str(i)
    return st
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 一行代码输出 1-100 之间的所有偶数。
[i for i in range(1,101) if not i%2]
  • 1
  1. with 语句的作用,写一段代码?
    只有内建了“上下文管理”的对象可以和with一起工作,目前支持上下文管理协议(context management protocol)的对象有:

file
decimal.Context
thread.LockType
threading.Lock
threading.RLock
threading.Condition
threading.Semaphore
threading.BoundedSemaphore

当with语句开始执行时,获取上下文管理对象,自动调用魔术方法__enter__(),当with语句结束时,会自动调用魔术方法__exit__().自定义这两个方法,生成新的类,也可以用with语句.
比如open对文件的操作,with语句结束时,会自动调用open().close()方法,关闭文件.
在这里插入图片描述

with open("a", "r") as fp:
	print(fp.read())
  • 1
  • 2
  1. python 字典和 json 字符串相互转化方法
def test33():
    a = {"a": 1, "b": 2}
    b = json.dumps(a)
    print(b, type(b))
    c = json.loads(b)
    print(c, type(c))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 请写一个 Python 逻辑,计算一个文件中的大写字母数量
def test34(filename):
    res_sum = 0
    with open(filename, "r") as fp:
        con = fp.read(10)
        while con:
            for i in con:
                if i.isupper():
                    res_sum += 1
            con = fp.read(10)
    print(res_sum)
    return res_sum
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. 请写一段 Python连接 Mongo 数据库,然后的查询代码。
import pymongo
cli = pymongo.MongoClient("localhost",27017)
db = cli.mydatabase
data = db.user.find()
for d in data:
    print(d)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 说一说 Redis 的基本类型。
    【基本类型】字符串,哈希(字典),列表,集合,有序集合
    在这里插入图片描述

  2. 请写一段 Python连接 Redis 数据库的代码。

import redis

r = redis.Redis(
    host='hostname',
    port=port, 
    password='password')
   
value = r.get("key")
r.set("k1", "v1")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. 请写一段 Python 连接 MySQL 数据库的代码。
import pymysql

db = pymysql.connect(host='127.0.0.1', user='root', password='123456', charset='utf8', database='student')
link = db.cursor()
link.execute('show tables')
db.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 了解 Redis 的事务么?

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
1.批量操作在发送 EXEC 命令前被放入队列缓存。
2.收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
3.在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
1.开始事务。
2.命令入队。
3.执行事务。
摘自菜鸟教程

  1. 了解数据库的三范式么?
    范式是关系型数据库的设计规范.
    目前有六种,数据库设计满足三范式即可.

第一范式1NF:原子性,每一列都只记录一种数据项,不可再拆分。
第二范式2NF:依赖于1NF,且每个非主属性完全函数依赖于候选键.一行只做一件事,消除非主属性对主码的部分函数依赖,减少冗余。
第三范式3NF:依赖于2NF,数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。

  1. 了解分布式锁么?
    【作用】控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性。
    【举例】比如商城的秒杀功能。代码实现是查询数据库,检查剩余秒杀数量,如果大于零,则可以秒杀,并更新数据库商品数量-1。当秒杀时,我们会收到无数条请求,如果没有锁,可能会出现,A查询数量为1,同时B也查询数量为1;然后A确认可以购买,商品数量-1,B也确认可以购买,商品数量也-1,这种1件商品多人购买成功的情况。所以我们需要锁,保证同一个数据,只有一个用户在操作。
  2. 用 Python 实现一个 Reids 的分布式锁的功能。
# 使用RedLock模块创建锁
import RedLock
rlock = RedLock([{"host": "localhost", "port": 6379, "db": 0}, ])
 
def run_with_redis_lock(name):
  while True:
    with rlock:
      run()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 写一段 Python 使用 Mongo 数据库创建索引的代码。
import pymongo
mongo = pymongo.Connection('localhost')
collection = mongo['database']['user']
collection.ensure_index('user_name', unique=True)
  • 1
  • 2
  • 3
  • 4

面试题目来着微信公众号:GitChat
Python 爬虫面试题 170 道
以上答案皆为鄙人回答,如有问题,敬请诸君指出.
【python面试170题】系列
1. 语言特性
2. 编码规范
3. 数据类型-字符串
4. 数据类型-列表、字典
5. 数据类型-综合
6. 操作类题目



所属网站分类: 技术文章 > 博客

作者:熊猫烧香

链接:https://www.pythonheidong.com/blog/article/53106/2524d61e297f357bca33/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

13 0
收藏该文
已收藏

评论内容:(最多支持255个字符)