python面試題總結(7)--操作類

1. Python 交換兩個變量的值

答:在 Python 中交換兩個對象的值通過下面的方式即可
a , b = b ,a
但是需要強調的是這并不是元組解包,通過 dis 模塊可以發現,這是交換操作的字節碼是 ROT_TWO,意思是在棧的頂端做兩個值的互換操作。

2. 在讀文件操作的時候會使用 read、readline 或者 readlines,簡述它們各自的作用

答:.read() 每次讀取整個文件,它通常用于將文件內容放到一個字符串變量中。如果希望一行一行的輸出那么就可以使用 readline(),該方法會把文件的內容加載到內存,所以對于大文件的讀取操作來說非常的消耗內存資源,此時就可以通過 readlines 方法,將文件的句柄生成一個生產器,然后去讀就可以了。
可參考: 文獻、菜鳥教程

3. json 序列化時,可以處理的數據類型有哪些?如何定制支持 datetime 類型?

答: 可以處理的數據類型是 str、int、list、tuple、dict、bool、None, 因為 datetime 類不支持 json 序列化,所以我們對它進行拓展。

詳細知識參考:序列化

#自定義時間序列化
import json
from datetime import datetime, date#JSONEncoder 不知道怎么去把這個數據轉換成 json 字符串的時候,它就會去調 default()函數,所以都是重寫這個函數來處理它本身不支持的數據類型,
#default()函數默認是直接拋異常的。
class DateToJson(json.JSONEncoder):def default(self, obj)if isinstance(obj, datetime)return obj.strftime('%Y-%m-%d %H:%M:%S')elif isinstance(obj, date)return obj.strftime('%Y-%m-%d')elsereturn json.JSONEncoder.default(self, obj)d = {'name''cxa', 'data': datetime.now()}
print(json.dumps(d, cls=DateToJson))

4. json 序列化時,默認遇到中文會轉換成 unicode,如果想要保留中文怎么辦?

答:可以通過 json.dumps 的 ensure_ascii 參數解決,代碼示例如下:

import json
a=json.dumps({“name”:“張三”},ensure_ascii=False)
print(a)
可以參考文獻:json 中的ensure_ascii=False

5. 有兩個磁盤文件 A 和 B,各存放一行字母,要求把這兩個文件中的信息合并(按字母順序排列),輸出到一個新文件 C 中。

答:

#文件 A.txt 內容為 ASDCF
#文件 B.txt 內容為 EFGGTG
with open("A.txt") as f1:f1_txt = f1.readline()
with open("B.txt") as f2:f2_txt = f2.readline()
f3_txt = f1_txt + f2_txtf3_list = sorted(f3_txt)with open("C.txt", "a+") as f:f.write("".join(f3_list))

輸出的文件 C 的內容為 ACDEFFGGGST

6. 如果當前的日期為 20190530,要求寫一個函數輸出 N 天后的日期,(比如 N 為 2,則輸出 20190601)。

答:這個題目考察的是 datetime 里的 timedelta 方法的使用,參數可選、默認值都為 0:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 通過這個參數可以指定不同的日期類型進行加減操作,這里我們需要改的是 days,代碼如下

import datetimedef datetime_operate(n: int):now = datetime.datetime.now()  # 獲取當前時間_new_date = now + datetime.timedelta(days=n)  # 獲取指定天數后的新日期new_date = _new_date.strftime("%Y%m%d")  # 轉換為指定的輸出格式return new_dateif __name__ == '__main__'print(datetime_operate(4))

參考文獻:Python timedelta模塊 時間增減用法
參考二

7. 寫一個函數,接收整數參數 n,返回一個函數,函數的功能是把函數的參數和 n 相乘并把結果返回。

答:這個題目考查了閉包的使用。閉包請參考:python中的閉包
偽代碼示例如下:

def 外層函數(參數):def 內層函數():print("內層函數執行", 參數)return 內層函數內層函數的引用 = 外層函數("傳入參數")
內層函數的引用()

代碼示例如下,返回函數之類型是函數對象。

def mul_operate(num):def g(val):return num * valreturn gm = mul_operate(8)
print(m(5))

返回值為:40

8. 下面代碼會存在什么問題,如何改進?

def strappend(num)str='first'for i in range(num)str+=str(i)return str

答: 首先不應該使用 Python 的內置函數 str 作為變量名,將其改為 s,另外在Python中str 是個不可變對象,每次迭代都會生成新的存儲空間,num 越大,創建的 str 對象就會越多,內存消耗越大。
使用 yield 改成生成器即可, 還有一點就是命名規范的位置,函數名添加_分割比較好,完整的代碼如下:

def str_append(num):s = 'first'for i in range(num):s += str(i)yield sif __name__ == '__main__':for i in str_append(3):print(i)

輸出結果:

first0
first01
first012

9. 一行代碼輸出 1-100 之間的所有偶數。

答:可以通過列表生成式,然后使用與操作如果如 1 與之后結果為 0 則表明為偶數,等于 1 則為奇數。

方法1

print([i for i in range(1, 101) if i & 0x1 == 0])

方法2:測試發現方法二效率更高

print(list(range(2, 101, 2)))

10. with 語句的作用

with 語句適用于對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的“清理”操作,釋放資源,比如文件使用后自動關閉、線程中鎖的自動獲取和釋放等。
Python之with語法原理

#一般訪問文件資源時我們會這樣處理:
f = open('c:\test.txt', 'r')
data = f.read()
f.close()

這樣寫沒有錯,但是容易犯兩個毛病:

  1. 如果在讀寫時出現異常而忘了異常處理。
  2. 忘了關閉文件句柄
#以下的加強版本的寫法:f = open('c:\test.txt', 'r')
try:data = f.read()
finally:f.close()

以上的寫法就可以避免因讀取文件時異常的發生而沒有關閉問題的處理了。代碼長了一些。但使用 with 有更優雅的寫法:

with open(r'c:\test.txt', 'r') as f:data = f.read()

11. Python 字典和 json 字符串相互轉化方法

答:

在 Python 中使用 dumps 方法 將 dict 對象轉為 Json 對象,使用 loads 方法可以將 Json 對象轉為 dict 對象。

import jsondic = {'a': 123, 'b': "456", 'c': "liming"}
# dumps:字典對象轉換成json對象
json_str = json.dumps(dic)
print(json_str)
# loads:json對象轉換成字典對象
dic2 = json.loads(json_str)
print(dic2)

輸出結果:

{"a": 123, "b": "456", "c": "liming"}
{'a': 123, 'b': '456', 'c': 'liming'}

我們再來看一個特殊的例子

import jsondic = {'a':123, 'b':"456", 'c':"liming"}
# 轉換成json格式
dic_ = str(dic).replace("'", "\"")
print(dic_)
# loads:json對象轉換成字典對象
dic_str = json.loads(dic_)
print(dic_str)

輸出結果:

{'a': 123, 'b': '456', 'c': 'liming'}

首先 json.loads(jsonstr) 這里面的參數只能是 jsonstr 格式的字符串。
當我們使用 str 將字典 dic 轉化為字符串以后,得到的結果為:"{‘a’: 123, ‘b’: ‘456’, ‘c’: ‘liming’}"。
如果直接使用 json.loads(str(dic)) 你會發現出現錯誤,原因是單引號的字符串不符合Json的標準格式。
所以再次使用了 replace("’", “”")從而得到字典,其實這個例子主要目的是告訴大家 Json 的標準格式是不支持單引號型字符串的,否則會出現以下錯誤:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452655.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452655.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452655.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

選擇讓孩子練習羽毛球的家長好好看看!

一、初級階段 主要要練習小孩的各項身體素質指標、基礎的發球和高遠球、最基礎的步伐訓練。根據小孩年齡的不同以及練習頻率的不同,大概需要100-300小時的訓練量(訓練間隔天數越多,時間需要越長)。 二、初級提高階段 高遠球對抗能…

LOJ#6281. 數列分塊入門 5

內存限制:256 MiB時間限制:500 ms標準輸入輸出題目類型:傳統評測方式:文本比較上傳者: hzwer提交提交記錄統計討論 1測試數據題目描述 給出一個長為 nnn 的數列,以及 nnn 個操作,操作涉及區間開…

版本控制工具歷史的10個里程碑

導讀:作者Eric Raymond在flourish上發表的一篇《Astonishments, ten, in the history of version control》,文中總結了版本控制工具的重要10個里程碑,一起與開發者分享下。 如果你想要了解真正的歷史,你需要回到在打孔卡上進行人…

php把語音轉成幀,[轉載]用TCP/IP實現自己簡單的應用程序協議:成幀器部分

在前面《字節和字符,對信息進行編碼》,《Socket>流,TCP連接,TCP可靠性概述》一系列的隨筆中我們已經表述了相應的理論知識,現在可以動手實現一個自己的應用程序協議。將 數據轉換成在線路上傳輸的字節序列只完成了一半的工作,在…

實體聯系圖簡介

通常,使用實體聯系圖(entity relationship diagram)來建立數據模型。可以把實體聯系圖簡稱為ER圖,相應地可把用ER圖描繪的數據模型稱為ER模型。 ER圖中包含了實體(即數據對象)、關系和屬性3種基本成分,通常用矩形框代表實體,用連…

Flask愛家租房--城區信息

0.效果展示 城市列表使用緩存的過程 1.后端代碼 # coding:utf-8from . import api from flask import g, current_app, jsonify, request, session from ihome.utils.response_code import RET from ihome.models import Area, House, Facility, HouseImage, User, Order from …

數值計算算法-多項式插值算法的實現與分析

數值計算是指在數值分析領域中的算法。數值分析是專門研究和數字以及近似值相關的數據問題,數值計算在數值分析的研究中發揮了特別重要的作用。 多項式插值是計算函數近似值的一種方法。其中函數值僅在幾個點上已知。 該算法的基礎是建立級數小于等于n的一個插值多項…

HIVE ORC 報錯ClassCastException

HIVE ORC格式的表查詢報錯 Failed with exception java.io.IOException:java.lang.ClassCastException: org.apache.hadoop.hive.ql.io.orc.OrcStruct cannot be cast to org.apache.hadoop.io.BinaryComparable 建表語句如下: CREATE EXTERNAL TABLE test_orc( te…

程序型語言VS.編譯型語言

導讀:每日[快訊精選]是由CSDN研發頻道推出的特色欄目,每一天我們將從國外技術媒體(例如Hacker News、Reddit...等等)中挑選出有價值的新聞簡訊,讓您在第一時間掌握業界主流的技術文摘,每天清晨為您獻上第一份技術早餐。 [1]程序型…

ancestral 箭頭符號,譯林版《牛津高中英語》模塊五 高二上學期

《牛津英語》由譯林出版社和牛津大學出版社聯合編寫出版。通過在南京和蘇州開始的試用,取得了非常良好的效果,己在省內全面推廣。有人認為新教材在教育觀念和編排體系上的改革力度是八十年代以來最大的一次。它帶給我們一線教師的沖擊無疑是巨大的。二、…

[NOI2012]騎行川藏

題解: 我發現拉格朗日乘數法真是個好東西。。 我是不會說我數學競賽求最值都是用這個東西的 由于我不太會打那個符號就用li代表通常偏導數中的lanmuda 。。。 這題里化簡一下就可以得到 2 li * ki * ?(vi??vi′?)* vi^2?1 然后一旦li確定 我們會發現這個三次函…

MAC地址和IP地址的關系

簡單地說:ip地址是服務商給你的,mac地址是你的網卡物理地址。 一、IP地址 對于IP地址,相信大家都很熟悉,即指使用TCP/IP協議指定給主機的32位地址。IP地址由用點分隔開的4個8八位組構成,如192.168.0.1就是一個IP地址…

Linux中斷 - tasklet

一、前言 對于中斷處理而言,linux將其分成了兩個部分,一個叫做中斷handler(top half),屬于不那么緊急需要處理的事情被推遲執行,我們稱之deferable task,或者叫做bottom half,。具體…

數字電視制播設備間的文件交換格式

在現今的數字電視演播室中,設備之間基本上采用信號流連接方式,如SDI、STDI、模擬YUV、VBS等信號流。在非線性編輯系統和播出系統與服務器之間的連接,還有基于MPEG-2傳輸流等的信號連接方式。基于信號流連接方式的主要特點是,傳送時…

oracle 位移運算符,Oracle“(+)”運算符

在Oracle中,()表示JOIN中的“可選”表。 所以在你的查詢中,select a.id, b.id, a.col_2, b.col_2, ... from a,b where a.idb.id()這是一個左外加B表與一個表。 就像現代的左連接查詢一樣。 (它將返回a表的所有數據,而不會丟失在另一邊的數據…

JAVA-數據類型-復習

JAVA-數據類型-復習 Java中,一共有8種數據類型,4種整型,2種浮點型,1種用于表示Unicode編碼的字符單元的字符類型char,1種布爾類型。 整型 類型存儲需求(字節)一個字節包含8個位取值范圍byte1-12…

什么是實體-聯系圖(ER圖)

實體-聯系圖(ER圖)數據模型中包含3種相互關聯的信息:數據對象、數據對象的屬性及數據對象彼此間相互連接的關系。 1.數據對象 數據對象是對軟件必須理解的復合信息的抽象。所謂符合信息是指具有一系列不同性質或屬性的事物,僅有單…

記錄的習慣

記錄的習慣 書籍是人類進步的階梯,承載了人類文明進步的歷程。大多數人都寫過日記,但不知道有多少人重視過日記。常常我們會用相機記錄一些生活中的場景,然后收藏起來,等到若干年后再拿出來看,總能感覺到很溫馨很美好。…

php 去掉實體,用PHP刪除除5個預定義HTML實體之外的所有實體的最佳方法-用于XHTML5輸出...

我目前正在嘗試提供XHTML5.目前,我在正在處理的頁面上提供XHTML 1.1 Strict.那就是我為有能力的瀏覽器所做的.對于那些不接受XML編碼數據的人,我會嚴格遵循HTML4.1.在嘗試使用HTML5進行試驗時,以HTML5格式交付時,所有功能或多或少都可以按預期工作.但是,作為XHTML5交付時,我遇到…