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)

未完待續。。。。。

發佈了303 篇原創文章 · 獲贊 57 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章