進制的轉換可以采用內置函數的方式進行數據的轉換,也可以使用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)
通過以下簡易的函數可以看出最大遞歸數
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(第一次函數調用也算進去的話)。
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
在python中不存在如下注釋的三元運算符,但是由三目運算符代替,可以將簡單的條件分支語句寫成一行,適用於需要將代碼簡化的場景,且相比較多行分支效率快一點。
a = 10 # print(a > 2 ? a : 0) print(a if a > 2 else 0)
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))
更多待更新中
print(bool(0)) print(bool(None)) print(bool([])) print(bool({})) print(bool("")) print(bool(0j))
字符串
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} {}
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]())
pass主要就是在代碼實現過程中,暫時沒有想好怎麼實現的時候,一般在函數、方法中使用較多,避免因為函數或方法中沒有內容導致報錯
在函數或方法中, *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