程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

那些刁鑽的名企面試題你會做嗎——python100面試題

編輯:Python

python 基礎題(文末有驚喜哦,面試題領取)

1.進制間的轉換

進制的轉換可以采用內置函數的方式進行數據的轉換,也可以使用int來轉換,是將所需轉換的數字按照某個進制的規則進行轉換,最後轉換的結果均為int類型

number = 20
# 方式一
# 二進制
print(bin(number))
# 八進制
print(oct(number))
# 十六進制
print(hex(number))
# 十進制
print(int(number))
# 方式二,只能轉換為最後的int類型
# 將數字轉按照八進制轉換為int類型
print(int(str(number), base=8))
# 將數字轉按照十六進制轉換為int類型
print(int(str(number), base=16))
# 將0b二進制字符串按照二進制轉換為int類型數字
print(int(str(bin(number)), base=2))
0b10100
0o24
0x14
20
16
32
20

需要注意的是,在python中,二進制、八進制、十六進制在輸出顯示時都會以十進制進行顯示,但無需過多關注

b_number = 0b10100
print(b_number)
o_number = 0o24
print(o_number)
h_number = 0x14
print(h_number)

2.最大遞歸數

通過以下簡易的函數可以看出最大遞歸數

def recursion(n):
print(n)
n += 1
recursion(n)
recursion(1)

受python版本不同,最大遞歸數也存在不同

python2.7: 1000, 在第1000次調用此函數時會出現異常
python3.6: 998, 在998次調用此函數時會出現異常

可以手動設置最大遞歸數的數量

import sys
sys.setrecursionlimit(1200)

目前發現,當全部設置最大遞歸數為1200時,python2.7會在1200次報錯,但python3.6會在1198次報錯,相較少2次,依次可推出,默認的最大遞歸數應該是1000(第一次函數調用也算進去的話)。

3.and、not、or運算符優先級

對象返回結果優先順序not xif x is false,then True,else False1x and yif x is false,then x,else y2x or yif x is false,then y,else x3
v1 = 1 or 3 # 1
v2 = 1 and 3 # 3
v3 = 0 and 2 and 1 # 0
v4 = 0 and 2 or 1 # 1
v5 = 0 and 2 or 1 or 4 # 1
v6 = 0 or False and 1 # False
1
3
0
1
1
False

需要注意的是在python中,0也是代表False

4.三元運算符,三目運算符

在python中不存在如下注釋的三元運算符,但是由三目運算符代替,可以將簡單的條件分支語句寫成一行,適用於需要將代碼簡化的場景,且相比較多行分支效率快一點。

a = 10
# print(a > 2 ? a : 0)
print(a if a > 2 else 0)

5.python2與python3區別

1.python2 True、False可以作為一個變量,可以對其進行賦值及取值,python3則不可以, True、False作為關鍵字無法修改

True = 1
print(True)
False = 0
print(False)

python2

python3

True = 1
^
SyntaxError: can't assign to keyword

2.python2默認使用ASCII編碼,對中文需要手動添加文檔頭注釋, python3則不需要

print('你好')

python2

File "/home/ts/flask_study/interview/05python2和python3的區別.py", line 12
SyntaxError: Non-ASCII character '\xe4' in file /home/ts/flask_study/interview/05python2和python3的區別.py on line 12, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

需在py文件最上方添加如下注釋

# -*- coding:utf-8 -*-

python3:則沒有影響

你好

3.python2的range返回一個list,資源消耗較大,python3返回一個可迭代對象,資源消耗較小,可使用for循環進行結果的迭代輸出,python3的range取代了xrange。

data = range(10)
print(data)
print(type(data))
from typing import Iterable, Iterator, Generator
print(isinstance(data, Iterable))
print(isinstance(data, Iterator))
print(isinstance(data, Generator))

python2

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
<type 'list'>

python3

range(0, 10)
<class 'range'>
True
False
False

4.python3引入nonlocal關鍵字,方便內部函數讀取和修改外部函數的值,當內部函數讀取和修改外部函數的值時,則外部函數和內部函數形成了閉包

def outter():
number = 10
def inner():
nonlocal number
number += 1
print(number)
return inner
outter()()

python2

UnboundLocalError: local variable 'number' referenced before assignment

python3

5.xreadlines、readlines讀取文件,python2存在xreadlines,返回的是文件對象,資源消耗少,python3無xreadlines, python2、python3返回的readlines都是一個list, 建議可以直接迭代遍歷open獲得的對象

import os
file_path = os.path.join(os.path.dirname(__file__), "01進制轉換.py")
print(file_path)
with open(str(file_path), mode="r") as f:
print(f)
print(type(f))
# print(isinstance(f, Iterable))
for line in f:
print(line)
# lines = f.xreadlines()
lines = f.readlines()
print(lines)
print(type(lines))

更多待更新中

6.布爾值為False的值

print(bool(0))
print(bool(None))
print(bool([]))
print(bool({}))
print(bool(""))
print(bool(0j))

7.字符串、列表、元組、字典每個常用的5個方法?

字符串

str_data = 'adminasdasd asdasd'
# 計算字符串中的元素出現次數
print(str_data.count('a'))
# 全部轉為大寫
print(str_data.upper())
# 以什麼開頭,可以指定開始的位置
print(str_data.startswith('a'))
# 截取字符串,使用較多
print(str_data.split('a'))
# 只在字符串首部將首字母大寫
print(str_data.capitalize())
# 在字符串中的每個單詞首字母大寫
print(str_data.title())
# 字符串居中 前後補空格
print(str_data.center(22))
# 字符串前面補0
print(str_data.zfill(22))
5
ADMINASDASD ASDASD
True
['', 'dmin', 'sd', 'sd ', 'sd', 'sd']
Adminasdasd asdasd
Adminasdasd Asdasd
adminasdasd asdasd
0000adminasdasd asdasd

列表

list_data = [1,2,3,4, [5,6]]
# 添加元素
list_data.append(11)
print(list_data)
# 淺拷貝列表數據, 當修改其中的可變對象時,原有對象會發生改變
copy_list_data = list_data.copy()
print(copy_list_data)
copy_list_data[4].append(4)
print(list_data)
print(copy_list_data)
# 刪除對應值的元素
list_data.remove(3)
print(list_data)
# 統計某個元素出現的次數
print(list_data.count(1))
# 兩個列表合並
list_data.extend(copy_list_data)
print(list_data)
# 列表排序,元素需要是同類型, 默認是升序
# list_data.sort()
print(list_data)
# 在指定下標插入元素
list_data.insert(0, -1)
print(list_data)
# 刪除對應下標的元素
list_data.pop(4)
print(list_data)
[1, 2, 3, 4, [5, 6], 11]
[1, 2, 3, 4, [5, 6], 11]
[1, 2, 3, 4, [5, 6, 4], 11]
[1, 2, 3, 4, [5, 6, 4], 11]
[1, 2, 4, [5, 6, 4], 11]
1
[1, 2, 4, [5, 6, 4], 11, 1, 2, 3, 4, [5, 6, 4], 11]
[1, 2, 4, [5, 6, 4], 11, 1, 2, 3, 4, [5, 6, 4], 11]
[-1, 1, 2, 4, [5, 6, 4], 11, 1, 2, 3, 4, [5, 6, 4], 11]
[-1, 1, 2, 4, 11, 1, 2, 3, 4, [5, 6, 4], 11]

元組

tuple_data = (1,2,3,4,5,1,5)
# 統計元素出現的次數
print(tuple_data.count(1))
# 獲取某個下標的元素
print(tuple_data.index(1))

字典

dict_data = {"name":"tom", "age":10, "gender":"man"}
dict_data2 = {"city":"nanjing"}
# 獲取字典的所有keys
print(dict_data.keys())
# 獲取字典的所有values
print(dict_data.values())
# 獲取字典的所有鍵值對,元組形式展示
print(dict_data.items())
# 合並兩個字典
dict_data.update(dict_data2)
print(dict_data)
# 獲取字典中的元素,可以設置默認值
print(dict_data.get('name', None))
# 刪除字典中的元素
dict_data.pop('age')
print(dict_data)
# 生成新字典,取出字典的key, 設置默認的value值,默認value為None
print(dict_data.fromkeys(dict_data.copy(), "no data"))
# 刪除字典中的元素,默認刪除最後一個元素
dict_data.popitem()
print(dict_data)
# 獲取字典中元素的值,當對應key不存在時會主動設置對應的key及返回設置的值, 當key存在時,此函數與get使用一致
print(dict_data.setdefault('age', 10))
print(dict_data)
# 清空字典
dict_data.clear()
print(dict_data)
dict_keys(['name', 'age', 'gender'])
dict_values(['tom', 10, 'man'])
dict_items([('name', 'tom'), ('age', 10), ('gender', 'man')])
{'name': 'tom', 'age': 10, 'gender': 'man', 'city': 'nanjing'}
tom
{'name': 'tom', 'gender': 'man', 'city': 'nanjing'}
{'name': 'no data', 'gender': 'no data', 'city': 'no data'}
{'name': 'tom', 'gender': 'man'}
10
{'name': 'tom', 'gender': 'man', 'age': 10}
{}

8.lambda使用方法及使用場景

def sum(m,n):
return m+n
print(sum(1,2))
sum2 = lambda m,n:m+n
print(sum2(1,2))

lambda主要是針對於函數進行簡化代碼操作,但只能進行簡單代碼的簡化,復雜代碼不建議使用lambda,

使用場景

1.map、reduce、filter等進行序列處理時使用

l = list(range(1, 10))
data = map(lambda n:n*n, l)
print(list(data))
from functools import reduce
data = reduce(lambda m,n:m*n, l)
print(data)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
362880

2.lambda與list相結合, 注意lambda只會記錄最後一次的狀態,不會記錄中間過程的狀態

l2 = [lambda:i for i in range(10)]
print(l2[0]())
print(l2[3]())

9.pass的作用

pass主要就是在代碼實現過程中,暫時沒有想好怎麼實現的時候,一般在函數、方法中使用較多,避免因為函數或方法中沒有內容導致報錯

10.*arg和**kwarg作用

在函數或方法中, *args會將元素轉換為元組, **kwargs會將x=y類似的元素轉換為字典

def run(*args, **kwargs):
print(args)
print(kwargs)
run(1,2,a=1,b=2)
(1, 2)
{'a': 1, 'b': 2}

點擊 面試題 領取騰訊文檔-在線文檔https://docs.qq.com/doc/DT09DZ1hSYkJORURY


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved