python面试之操作类

1.Python 中交换两个变量的值的方式

def exchangeValue(a,b):
    a = a^b
    b = a^b  # b = (a^b)^b = a
    a = a^b  # a = (a^b)^a = b
    print(a,b)

if __name__ == '__main__':
    #第一种(使用临时变量)
    a = 1
    b = 2
    print(a,b)
    temp = a
    a = b
    b = temp
    print(a,b)

	#第二种
    a = 1
    b = 2
    print(a, b)
    a,b = b,a
    print(a,b)

    #第三种
    #如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
    #异或计算法则:
    # 1:a ^ b = b ^ a;
    # 2:a ^ b ^ c = (a ^ b) ^ c = a ^ (b ^ c);
    # 3:d = a ^ b ^ c = > a = d ^ b ^ c;
    # 4:a ^ b ^ a = b;
    exchangeValue(1,2)

2. read、readline、readlines的作用


if __name__ == '__main__':

    #1.从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止
    fo = open("zj.txt", "r", encoding="utf-8")
    print("文件名为:", fo.name)
    line = fo.read()
    print("读取的字符串: %s" % line)
    # 关闭文件
    fo.close()

    #2.从文件每次读出一行内容(占用内存小)
    f = open("zj.txt","r", encoding="utf-8")
    line = f.readline()
    print(type(line)) #<class 'str'>
    while line:
        print(line)
        line = f.readline()
    f.close()

    #3.读取整个文件所有行,保存在一个列表(list)变量中(占用内存大)
    f = open("zj.txt","r", encoding="utf-8")
    lines = f.readlines()
    print(type(lines))
    for line in lines:
        print(line)
    f.close()

3.JSON序列化时,默认遇到中文会转换成 unicode,如何保留中文?

if __name__ == '__main__':
    #ensure_ascii: 可以序列化非ascii码(中文等)
    data = {"广州市": {"番禺区": ["南村镇", "大石镇", "榄核镇"], "天河区": ["广州塔", "中信广场", "天河又一城"]}}
    print(type(data))  # 字典类型
    #dumps成为字符串类型
    #dump将一个对象序列化存入文件(序列化)
    #load/loads(反序列化)
    s = json.dumps(data, sort_keys=True, indent=4, ensure_ascii=False)
    print(type(s))  # 字符串类型
    print(s)

4.要求输出当前日期N 天后的日期按照YYYYmmdd的格式输出

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

if __name__ == '__main__':
    print(datetime_add(2))

5.datetime 类不支持 json 序列化,如何自己定制实现

from json import JSONEncoder
from datetime import datetime
#JSONEncoder不知道怎么去把这个数据转换成 json字符串的时候,
#它就会去调 default()函数,所以都是【重写***】这个函数来处理它本身不支持的数据类型,
class dataOperatorEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        else:
            return super(ComplexEncoder,self).default(obj)

if __name__ == '__main__':
    d = {'name': 'alex', 'data': datetime.now()}
    #dumps序列化成字符串
    print(type(json.dumps(d, cls=ComplexEncoder))) #<class 'str'>
    print(json.dumps(d, cls=dataOperatorEncoder)) #{"name": "alex", "data": "2020-02-27 12:23:00"}

6.什么是闭包,写一段代码

#n=2 val=3
def func(n):
    def func1(val):
        return val * n
    return func1

if __name__ == '__main__':
    num = func(2)
    print(num(3))

7.字符串代码性能问题

def strtest(num):
    str='python'
    for i in range(num):
       str += "hello"
    return str

if __name__ == '__main__':
  print(strtest(5))

如果num非常大,那么内存中有很多str对象,非常占用内存。

8.一句代码输出1-100之间的偶数

if __name__ == '__main__':
    print([i for i in range(1, 101) if i % 2 == 0])

9.with与上下文管理器

任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器,
上下文管理器对象可以使用 with 关键字。目的就是为了不用人为手动去开启
资源和关闭资源,因为人为操作可能有失误导致资源浪费。看如下:

class File():
    def __init__(self, filename, mode,code):
        self.filename = filename
        self.mode = mode
        self.code = code

    def __enter__(self):
        print("开启资源")
        self.f = open(self.filename, self.mode,encoding=self.code)
        return self.f

    def __exit__(self, *args):
        print("关闭资源")
        self.f.close()

def main():
    with File("withtest.txt","w",'utf-8') as f:
         f.write("使用自定义的File类")

if __name__ == '__main__':
    main()

10.计算一个文件中的大写字母数量

if __name__ == '__main__':
    count = 0
    with open('python.txt') as py:
        for i in py.read():
            if i.isupper():
                count += 1
    print(count)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值