python 面试基础篇

1. 简单介绍一下Python这门语言

Python是一门解释性语言,运行的时候一行一行解释并运行,方便调试,开发效率高;有丰富的第三方库,几乎涵盖所有领域; 运行速度相较于c/c++ 会慢一些;Python是一门脚本语言,可以很方便的调用第三方接口,当然也包括其他语言的接口

2. python 解释器种类以及相关特点
  • CPython:c语言开发的,使用最广的解释器
  • IPython: 基于cpython之上的一个交互式计时器 交互方式增强 功能和cpython一样
  • JPython: 运行在Java上的解释器 直接把python代码编译成Java字节码执行
3. pep8编码规范

csdn

4. python 中的基本数据类型

数字,布尔,字符,列表,元祖,字典,集合

5. 可变类型与不可变类型

可变类型:list dict set
不可变:number string tuple

6. 将"hello world"转换为首字母大写"Hello World"

在这里插入图片描述

7. 如何检测字符串中只含有数字
s = '1233sasd33'

# 只含有数字返回True,否则返回false
s.isdigit()
8. 反转字符串
s = 'hello'

print(s[::-1])
9. 如何将gbk编码转为utf-8编码

先通过gbk解码,然后通过utf-8编码即可

s = '你好'

print(s.encode('gbk').decode('gbk').encode('utf-8'))
10. 正则切分字符串

s="name:python java" ==> ['name', 'python', 'java']

import re

s="name:python java"

resp = re.split('[:| ]', s)
print(resp)
11. 找出两个列表的相同元素和不同元素
li1 = [1,2,3]
li2 = [3,4,5]

# 交集(相同元素)
print(set(li1) & set(li2))

# 对称差(不同元素)
print(set(li1) ^ set(li2))
12. 字典排序
d1 = [
    {'name':'alice', 'age':38},
    {'name':'bob', 'age':18},
    {'name':'Carl', 'age':28},
]

d2 = sorted(d1, key=lambda x:x['age'])

print(d2)

>>> [{'name': 'bob', 'age': 18}, {'name': 'Carl', 'age': 28}, {'name': 'alice', 'age': 38}]
13. 读取文件的3个方法read()、readline()、readlines()区别

read():读取整个文件,返回一个字符串对象
readline(): 一行一行读取,返回字符类型
readlines():读取整个文件,返回一个列表

14. 如果当前的日期为 20190530,要求写一个函数输出 N 天后的日期,(比如 N 为 2,则输出 20190601)
# 先转为时间对象,然后加上天数,最后再转为字符类型
import datetime

def get_date(N):

    detester = '20190530'
    # 转日期
    date = datetime.datetime.strptime(detester,'%Y%m%d')
    # 日期相加
    date = date + datetime.timedelta(days=N)
    # 转字符
    date = date.strftime('%Y%m%d')
    print('当前日期为{}, {}天后的日期是{}'.format(detester, N, date))

get_date(3)
15. 一行代码输出 1-100 之间的所有偶数。
[i for i in range(1,101) if i % 2 == 0]
16. 魔法函数 call

使得类的实例可调用


class Spider(object):

    def __init__(self):
        pass

    def get_data(self):
        print('spider is running...')

    def __call__(self, *args, **kwargs):
        self.get_data()


if __name__ == '__main__':
    Spider()()

17. @classmethod 和@staticmethod 用法和区别

使用@classmethod 和@staticmethod 后,类可以不需要实例化,直接通过类名.方法名()来调用

  • @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
  • @classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
  • 如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。
  • 而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。

class Spider(object):

    num = 1

    def __init__(self):
        pass

    @staticmethod
    def get_data():
        print(Spider.num,'========================')
        print('spider is running...')

    @classmethod
    def download(cls):
        print(cls.num, '======================')
        print('downloading is running.......')


if __name__ == '__main__':
    Spider.get_data()
    Spider.download()

18. Python里的反射

用于操作未知的方法或变量,这种机制称为反射

  • hasattr:判断对象中是否有这个方法或变量
  • getattr:获取对象或方法中的内存地址
  • setattr:为对象添加方法或变量
  • delattr:删除对象中的变量,不能用于删除方法

class Spider(object):

    def __init__(self):
        self.url = 'http://www.baidu.com'

    def get_data(self):
        print('Spider is running.......')


if __name__ == '__main__':
    s = Spider()
    # 判断对象中是否有这个方法或变量,有返回True,没有返回false
    print(hasattr(s, 'get_data'))  # true

    # 获取对象中的变量或方法的内存地址, 三个参数,第三个为默认值,如果变量名不存在就返回第三个,存在就返回存在的
    print(getattr(s, 'url', 'not found'))

    # 添加一个name,赋值为gkl
    setattr(s, 'name', 'gkl')
    print(s.name)

    # 删除name属性
    delattr(s, 'name')
    print(s.name)

未完待续。。。。。

发布了288 篇原创文章 · 获赞 50 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/gklcsdn/article/details/104069321
今日推荐