合併字典:請合併下面兩個字典 a = {"A":1,"B":2},b = {"C":3,"D":4}python
dict1 = {"A": 1, "B": 2} dict2 = {"C": 3, "D": 4} # 方式一 **表示打散 print({**dict1, **dict2}) # * ** 都表示打散可迭代對象 # 方式二 update方法 dict1.update(dict2) # 合併字典
元組操做:如何把元組 ("a","b") 和元組 (1,2),變爲字典 {"a":1,"b":2}正則表達式
# zip的使用 a = ("a", "b") b = (1, 2) print(dict(zip(a, b)))
交換字典的鍵和值算法
dict1 = {"A": 1, "B": 2} res = {k: v for v, k in dict1.items()} print(res)
咱們知道對於列表可使用切片操做進行部分元素的選擇,那麼如何對生成器類型的對象實現相同的功能呢?數據庫
Python交換兩個變量的值編程
a,b=b,a
這個不是元組解包,在棧的頂端作兩個值的交換。json
read()/readline()/readlines()緩存
with open('test.txt', 'r', encoding='utf-8') as f: text = f.read() print(text)
with open('test.txt', 'r', encoding='utf-8') as f: try: line = f.readline() if line: print(line) except: pass
with open('test.txt', 'r', encoding='utf-8') as f: try: lines = f.readlines() # 所有加載到內存 for line in lines: print(line) except: pass
json序列化,能夠支持的數據類型是str/int/tuple/dict/bool/None,而datetime不支持json序列化。網絡
json序列化遇到中文會轉換成Unicode,想要保留中文怎麼辦?數據結構
import json a = json.dumps({"name": "張三"}) print(a) """ {"name": "\u5f20\u4e09"} """
import json a = json.dumps({"name": "張三"}, ensure_ascii=False) print(a) """ {"name": "張三"} """
AB兩個文件裏面都是字母,讀出來排序好後,寫在C文件裏面app
with open('test1.txt', 'r') as f1: line1 = f1.readline() with open('test2.txt', 'r') as f2: line2 = f2.readline() line = line1 + line2 line = sorted(line) print(line) with open("test3.txt", "a+") as f: f.write("".join(line))
求在當前時間的基礎上加N天后的日期
import datetime def datetime_operate(num:int): now = datetime.datetime.now() _new_date=now+datetime.timedelta(days=num) # 再將這個數字轉換爲標準的時間 new_date = _new_date.strftime("%Y%m%d") return new_date if __name__=="__main__": res = datetime_operate(10) print(res)
下面代碼會存在什麼問題
def strappend(num): str='first' for i in range(num): str+=str(i) return str
問題以下:
def str_append(num): s = 'first' for i in range(num): s += str(i) yield s if __name__ == '__main__': for i in str_append(3): print(i)
with語句的做用,寫一段代碼?
with語句,即上下文管理協議,這裏麪包含__enter__
和__exit__
兩個方法。with語句適用於對資源進行訪問的場合,確保無論使用過程當中是否發生異常都會執行必要的清理操做,釋放資源,好比文件使用後自動關閉、線程中的鎖自動獲取和釋放。
class Test: def __enter__(self): print('__enter__() is called!') return self def dosomething(self): print('do something!') def __exit__(self,*args,**kwargs): print('__exit__() is called!') with Test() as sample: sample.dosomething()
統計文件中大寫字母的數量
with open('A.txt') as f: count=0 for word in f.read(): if word.isupper(): count+=1 print(count)
Redis基本類型
Python 鏈接MySQL/MongoDB/Redis
數據庫三範式
分佈式鎖
Redis事務
裝飾器有什麼做用?舉例說明?
裝飾器就是一個函數,在不改變任何代碼變更的前提下給一個函數增長額外功能,起到裝飾效果。
應用場景:
插入日誌
性能測試
事務處理
緩存
權限校驗
from functools import wraps def log(label): def decorate(func): @wraps(func) def _wrap(*args,**kwargs): try: func(*args,**kwargs) print("name",func.__name__) except Exception as e: print(e.args) return _wrap return decorate @log("info") def foo(a,b,c): print(a+b+c) print("in foo") if __name__=="__main__": foo(1,2,3) # mark一下,這個還須要認真琢磨琢磨。
Python垃圾回收機制
對於Python語言來說,對象的類型和內存都是在運行時肯定的,這也是咱們稱Python語言爲動態類型的緣由。
垃圾回收機制:
魔法函數__call__
怎麼使用?
class Bar: def __call__(self,*args,**kwargs): print("in call") if __name__=="__main__": b=Bar() b()
判斷一個對象是函數仍是方法?
from types import MethodType, FunctionType class Bar: def foo(self): pass def foo1(): pass print("foo是函數", isinstance(Bar().foo, FunctionType)) print("foo是方法", isinstance(Bar().foo, MethodType))
python的傳參是傳值仍是傳址?
Python中傳參既不是傳值也不是傳地址,傳的是對象的應用。
Python中的元類(metaclass)使用舉例。
什麼是猴子補丁?
內存管理
正則表達式
enumerate
enumerate能夠在迭代一個對象的時候,同時獲取當前對象的索引和值
from string import ascii_lowercase from string import ascii_uppercase s = ascii_uppercase for index, value in enumerate(s): print(index, value)
列舉五個標準模塊
Python異常處理
try: 1 / 0 except Exception as e: print(e) ''' division by zero '''
python中遞歸的最大次數
答:最大次數默認爲1000,通常電腦只能達到998。
import sys sys.setrecursionlimit(1500) # 這個只是修改的Python解釋器容許的最大遞歸次數,此外限制還和OS有關。
面向對象的mro
調用類對象的mro()方法獲取其繼承關係。
斷言:
Python中是斷言語句實現此功能的,通常表達式爲true的狀況下,程序才能經過。
# assert() 斷言成功,程序繼續執行,斷言失敗,程序報錯。 # 斷言可以幫助別人活着將來的你理解代碼 # 找出程序中邏輯不對的地方 # 一方面,斷言會提醒你某個對象應該處於何種狀態 # 另外一方面 ,若是某個時候斷言爲假,會拋出異常 def foo(a): assert a==2,Exception('不等於2') print('ok',a) if __name__=='__main__': foo(1)
lambda表達式是一個匿名函數,在函數編程中常常做爲參數使用。
列舉5個Python中的異常類型以及其含義
列舉sort和sorted的區別:
相同之處 sort 和 sorted 均可以對列表元素排序,sort() 與 sorted() 的不一樣在於,sort 是在原位從新排列列表,而 sorted() 是產生一個新的列表。 sort 是應用在 list 上的方法,sorted 能夠對全部可迭代的對象進行排序操做。list 的 sort 方法返回的是對已經存在的列表進行操做,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操做。
進制問題
print(int(0b1010)) print(bin(0xf)) print(oct(8)) print(hex(16)) ''' 10 0b1111 0o10 0x10 '''
算法和數據結構:
用Python實現一個二分查找的函數
def binary_search(arr, num): n = len(arr) left = 0 right = n - 1 # 最右邊的index while left <= right: mid = (left + right) // 2 if num == arr[mid]: return "index:" + str(mid) elif num < arr[mid]: right = mid - 1 # 比中間的小 else: left = mid + 1 # 比中間的大 return False # 從這個循環裏面跳出來講明木有找到,返回False if __name__ == "__main__": lst = [1, 3, 4, 5, 7, 100] res = binary_search(lst, 7) print(res)