python小技巧積累--題庫(持續更新)

介紹

作為一名程序員,除了需要具備解決問題的思路以外,代碼的質量和簡潔性也很關鍵。
python內置庫中就有很多簡潔而又優雅的操作,這里的知識都來源于網絡積累,
閑暇時整理下來方便溫故。

目錄

>選擇正確的內置功能

  • 使用enumerate()而不是range()進行迭代
  • 使用遞推式構造列表而不是map()和filter()
  • 使用斷點breakpoint()調試而不是print()
  • 使用f-Strings格式化字符串
  • 使用sorted()對復雜列表進行排序

>有效利用數據結構

  • 使用set存儲唯一值
  • 使用生成器節省內存
  • 使用.get()和.setdefault()在字典中定義默認值

>利用Python的標準庫

  • 使用collections.defaultdict()處理缺少的字典鍵
  • 使用collections.Counter計算Hashable對象
  • 使用字符串常量訪問公共字符串組
  • 使用Itertools生成排列和組合

>選擇正確的內置功能

Python有一個大型標準庫,但只有一個內置函數的小型庫,這些函數總是可用的,不需要導入。

1. 使用enumerate()而不是range()進行迭代

假如你需要遍歷列表,同時訪問索引和值。

有一個名為FizzBuzz的經典編碼面試問題可以通過迭代索引和值來解決。在FizzBuzz中,你將獲得一個整數列表,任務是執行以下操作:

  • 用“fizz”替換所有可被3整除的整數
  • 用“buzz”替換所有可被5整除的整數
  • 將所有可被3和5整除的整數替換為“fizzbuzz” 通常,開發人員將使用range()解決此問題:
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i in range(len(numbers)):
...     if numbers[i] % 3 == 0 and numbers[i] % 5 == 0:
...         numbers[i] = 'fizzbuzz'
...     elif numbers[i] % 3 == 0:
...         numbers[i] = 'fizz'
...     elif numbers[i] % 5 == 0:
...         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']

Range允許你通過索引訪問數字元素,并且對于某些特殊情況也是一個很有用的工具。但在這種情況下,我們希望同時獲取每個元素的索引和值,更優雅的解決方案使用enumerate():

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
...     if num % 3 == 0 and num % 5 == 0:
...         numbers[i] = 'fizzbuzz'
...     elif num % 3 == 0:
...         numbers[i] = 'fizz'
...     elif num % 5 == 0:
...         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']

對于每個元素,enumerate()返回一個計數器和元素值。計數器默認為0,也是元素的索引。不想在0開始你的計數?只需使用可選的start參數來設置偏移量

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
...     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72

通過使用start參數,我們訪問所有相同的元素,從第一個索引開始,但現在我們的計數從指定的整數值開始。

2. 使用遞推式構造列表而不是map()和filter()

一般使用者可能錯誤地認為它沒有爭議,但Guido有充分的理由想要從Python中刪除map()和filter()。一個原因是Python支持遞推式構造列表,它通常更容易閱讀并支持與map()和filter()相同的功能。

讓我們首先看看我們如何構造對map()的調用以及等效的遞推構造列表:

>>> numbers = [4, 2, 1, 6, 9, 7]
>>> def square(x):
...     return x*x
...
>>> list(map(square, numbers))
[16, 4, 1, 36, 81, 49]>>> [square(x) for x in numbers]
[16, 4, 1, 36, 81, 49]

使用map()和列表推導的兩種方法都返回相同的值,但列表推導更容易閱讀和理解。下面我們可以對filter()及其等效的列表推導做同樣的事情:

>>> def is_odd(x):
...    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]

就像我們在map中看到的那樣,filter和列表推導方法返回相同的值,但列表推導更容易理解。

來自其他語言的開發人員可能不同意構造列表比map和filter更容易閱讀,但根據我的經驗,初學者能夠更直觀地寫出列表推導。但無論哪種方式,在編碼面試中使用列表推導很少會出錯,因為它會讓你知道Python中最常見的是什么。

  • 個人認為,無論是使用列表推導還是map和filter,只要熟練應用都可以。

3. 使用斷點breakpoint()調試而不是print()

你可能通過在代碼中添加print并查看打印出的內容來調試一個小問題。這種方法起初效果很好,但很快變得很麻煩。另外,在編碼面試設置中,你幾乎不希望在整個代碼中調用print()。

相反,你應該使用調試器。對于不是很瑣碎的錯誤,它幾乎總是比使用print()更快,并且鑒于調試是編寫軟件的重要部分,它表明你知道如何使用可以在工作中快速開發的工具。

如果你使用的是Python 3.7,則無需導入任何內容,只需在代碼中要放入調試器的位置調用breakpoint()

# Some complicated code with bugs
breakpoint()

調用breakpoint()會將你帶入pdb,這是默認的Python調試器。在Python 3.6及更早版本中,你可以通過顯式導入pdb來執行相同的操作:

import pdbpdb.set_trace()

像breakpoint()一樣,pdb.set_trace()會將你帶入pdb調試器。它不是那么簡潔,而且需要記住的多一點。你可能想要嘗試其他調試器,但pdb是標準庫的一部分,因此它始終可用。無論你喜歡哪種調試器,在進行編碼面試設置之前,都值得嘗試使用它們來適應工作流程。

  • 關于pdb的用法,如果不清楚,我有一篇blog專門整理過點擊跳轉

4. 使用f-Strings格式化字符串

Python有很多不同的方法來處理字符串格式化,有時候不知道使用哪個。在coding的面試中,如果使用Python 3.6+,建議的格式化方法是Python的f-strings。

f-strings支持使用字符串格式化迷你語言,以及強大的字符串插值。這些功能允許你添加變量甚至有效的Python表達式,并在添加到字符串之前在運行時對它們進行評估:

>>> def get_name_and_decades(name, age):
...     return f"My name is {name} and I'm {age / 10:.5f} decades old."
...
>>> get_name_and_decades("Maria", 31)
My name is Maria and I'm 3.10000 decades old.

f-string允許你將Maria放入字符串中,并在一個簡潔的操作中添加具有所需格式的年齡。需要注意的一個風險是,如果你輸出用戶生成的值,那么可能會帶來安全風險,在這種情況下,模板字符串可能是更安全的選擇。

5. 使用sorted()對復雜列表進行排序

大量的編碼面試問題需要進行某種排序,并且有多種有效的方法可以進行排序。除非面試官希望你實現自己的排序算法,否則通常最好使用sorted()。你可能已經看到了排序的最簡單用法,例如按升序或降序排序數字或字符串列表:

>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]

默認情況下,sorted()已按升序對輸入進行排序,而reverse關鍵字參數則按降序排序。

值得了解的是可選關鍵字key,它允許你在排序之前指定將在每個元素上調用的函數。添加函數允許自定義排序規則,如果要對更復雜的數據類型進行排序,這些規則特別有用:

>>> animals = [
...     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
...     {'type': 'elephant', 'name': 'Devon', 'age': 3},
...     {'type': 'puma', 'name': 'Moe', 'age': 5},
... ]
>>> sorted(animals, key=lambda animal: animal['age'])
[{'type': 'elephant', 'name': 'Devon', 'age': 3},{'type': 'puma', 'name': 'Moe', 'age': 5},{'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]

通過傳入一個返回每個元素年齡的lambda函數,可以輕松地按每個字典的單個值對字典列表進行排序。在這種情況下,字典現在按年齡按升序排序。

>有效利用數據結構

算法在面試中得到了很多關注,但數據結構可能更為重要。在coding面試環境中,選擇正確的數據結構會對性能產生重大影響。除了理論數據結構之外,Python還在其標準數據結構實現中內置了強大而方便的功能。這些數據結構在面試中非常有用,因為它們默認為你提供了許多功能,讓你可以將時間集中在問題的其他部分。

1. 使用set存儲唯一值

我們通常需要從現有數據集中刪除重復元素。新的開發人員有時會在列表應該使用集合時執行此操作,這會強制執行所有元素的唯一性。

假裝你有一個名為get_random_word()的函數。它將始終從一小組單詞中返回一個隨機選擇:

>>> import random
>>> all_words = "all the words in the world".split()
>>> def get_random_word():
...    return random.choice(all_words)

你應該重復調用get_random_word()以獲取1000個隨機單詞,然后返回包含每個唯一單詞的數據結構。以下是兩種常見的次優方法和一種好的方法。

糟糕的方法

get_unique_words()將值存儲在列表中,然后將列表轉換為集合:

>>> def get_unique_words():
...     words = []
...     for _ in range(1000):
...         words.append(get_random_word())
...     return set(words)
>>> get_unique_words()
{'world', 'all', 'the', 'words'}

這種方法并不可怕,但它不必要地創建了一個列表,然后將其轉換為集合。面試官幾乎總是注意到(并詢問)這種類型的設計選擇。

更糟糕的做法

為避免從列表轉換為集合,你現在可以在不使用任何其他數據結構的情況下將值存儲在列表中。然后,通過將新值與列表中當前的所有元素進行比較來測試唯一性:

>>> def get_unique_words():
...     words = []
...     for _ in range(1000):
...         word = get_random_word()
...         if word not in words:
...             words.append(word)
...     return words
>>> get_unique_words()
['world', 'all', 'the', 'words']

這比第一種方法更糟糕,因為你必須將每個新單詞與列表中已有的每個單詞進行比較。這意味著隨著單詞數量的增加,查找次數呈二次方式增長。換句話說,時間復雜度在O(N^2)的量級上增長。

優秀的方法

現在,你完全跳過使用列表,而是從頭開始使用一組:

>>> def get_unique_words():
...     words = set()
...     for _ in range(1000):
...         words.add(get_random_word())
...     return words
>>> get_unique_words()
{'world', 'all', 'the', 'words'}

除了從頭開始使用集合之外,這可能與其他方法沒有太大的不同。如果你考慮.add()中發生了什么,它甚至聽起來像第二種方法:得到單詞,檢查它是否已經在集合中,如果沒有,則將其添加到數據結構中。

那么為什么使用與第二種方法不同的集合呢?

它們是不同的,因為集合存儲元素的方式允許接近恒定時間檢查值是否在集合中,而不像需要線性時間查找的列表。查找時間的差異意味著添加到集合的時間復雜度以O(N)的速率增長,這在大多數情況下比第二種方法的O(N^2)好得多。

2. 使用生成器節省內存

前面提到,列表推導是方便的工具,但有時會導致不必要的內存使用。想象一下,你被要求找到前1000個完美正方形的總和,從1開始。你知道列表推導,所以你快速編寫一個有效的解決方案:

>>> sum([i * i for i in range(1, 1001)])
333833500

解決方案會列出1到1,000,000之間的每個完美平方,并對值進行求和。你的代碼會返回正確的答案,但隨后您的面試官會開始增加您需要總和的完美正方形的數量。

起初,你的功能不斷彈出正確的答案,但很快就開始放慢速度,直到最后這個過程似乎永遠持續下去。這不是你想要在面試中發生的一件事。

這里發生了什么?

它正在列出你要求的每個完美的方塊,并將它們全部加起來。具有1000個完美正方形的列表在計算機術語中可能不會很大,但是1億或10億是相當多的信息,并且很容易占用計算機的可用內存資源。這就是這里發生的事情。

值得慶幸的是,有一種解決內存問題的快捷方法。你只需用括號替換方括號:

>>> sum((i * i for i in range(1, 1001)))
333833500

換出括號會將列表推導更改為生成器表達式。當你知道要從序列中檢索數據,但不需要同時訪問所有數據的時候,生成器表達式非常適合。

生成器表達式返回生成器對象,而不是創建列表。該對象知道它在當前狀態中的位置(例如,i = 49)并且僅在被要求時計算下一個值。

因此,當sum通過重復調用.__ next __()來迭代生成器對象時,生成器檢查i 等于多少,計算i * i,在內部遞增i,并將正確的值返回到sum。該設計允許生成器用于大量數據序列,因為一次只有一個元素存在于內存中。

3. 使用.get()和.setdefault()在字典中定義默認值

最常見的編程任務之一涉及添加,修改或檢索可能在字典中或可能不在字典中的項。Python字典具有優雅的功能,可以使這些任務簡潔明了,但開發人員通常會在不需要時檢查值。

想象一下,你有一個名為cowboy的字典,你想得到那個cowboy的名字。一種方法是使用條件顯式檢查key:

>>> cowboy = {'age': 32, 'horse': 'mustang', 'hat_size': 'large'}
>>> if 'name' in cowboy:
...     name = cowboy['name']
... else:
...     name = 'The Man with No Name'
...
>>> name
'The Man with No Name'

此方法首先檢查字典中是否存在name鍵,如果存在,則返回相應的值。否則,它返回默認值。

雖然清楚地檢查key確實有效,但如果使用.get(),它可以很容易地用一行代替:

>>> name = cowboy.get('name', 'The Man with No Name')

get()執行與第一種方法相同的操作,但現在它們會自動處理。如果key存在,則返回適當的值。否則,將返回默認值。

但是,如果你想在仍然訪問name的key時使用默認值更新字典呢? .get()在這里沒有真正幫助你,所以你只需要再次顯式檢查這個值:

>>> if 'name' not in cowboy:
...     cowboy['name'] = 'The Man with No Name'
...
>>> name = cowboy['name']

檢查values并設置默認值是一種有效的方法,并且易于閱讀,但Python再次使用.setdefault()提供了更優雅的方法:

>>> name = cowboy.setdefault('name', 'The Man with No Name')

.setdefault()完成與上面代碼片段完全相同的操作。它檢查cowboy中是否存在名稱,如果是,則返回該值。否則,它將cowboy [‘name’]設置為The Man with No Name并返回新值。

>利用Python的標準庫

默認情況下,Python提供了許多功能,這些功能只是一個導入語句。它本身就很強大,但知道如何利用標準庫可以增強你的編碼面試技巧。

從所有可用模塊中挑選最有用的部分很困難,因此本節將僅關注其實用功能的一小部分。希望這些對您在編碼訪談中有用,并且您希望了解更多有關這些和其他模塊的高級功能的信息。

1. 使用collections.defaultdict()處理缺少的字典鍵

當你為單個鍵設置默認值時,.get()和.setdefault()可以正常工作,但通常需要為所有可能的未設置鍵設置默認值,尤其是在面試環境中進行編程時

假裝你有一群學生,你需要記錄他們在家庭作業上的成績。輸入值是具有格式(student_name,grade)的元組列表,但是你希望輕松查找單個學生的所有成績而無需迭代列表。

存儲成績數據的一種方法是使用將學生姓名映射到成績列表的字典:

>>> student_grades = {}
>>> grades = [
...     ('elliot', 91),
...     ('neelam', 98),
...     ('bianca', 81),
...     ('elliot', 88),
... ]
>>> for name, grade in grades:
...     if name not in student_grades:
...         student_grades[name] = []
...     student_grades[name].append(grade)
...
>>> student_grades
{'elliot': [91, 88], 'neelam': [98], 'bianca': [81]}

在這種方法中,你迭代學生并檢查他們的名字是否已經是字典中的屬性。如果沒有,則將它們添加到字典中,并將空列表作為默認值。然后將實際成績附加到該學生的成績列表中。

但是有一個更簡潔的方法,可以使用defaultdict,它擴展了標準的dict功能,允許你設置一個默認值,如果key不存在,它將按默認值操作:

>>> from collections import defaultdict
>>> student_grades = defaultdict(list)
>>> for name, grade in grades:
...     student_grades[name].append(grade)

在這種情況下,你將創建一個defaultdict,它使用不帶參數的list構造函數作為默認方法。沒有參數的list返回一個空列表,因此如果名稱不存在則defaultdict調用list(),然后再把學生成績添加上。如果你想更炫一點,你也可以使用lambda函數作為值來返回任意常量。

利用defaultdict可以使代碼更簡潔,因為你不必擔心key的默認值。相反,你可以在defaultdict里處理它們一次,然后key就終存在了。

2. 使用collections.Counter計算Hashable對象

假如你有一長串沒有標點符號或大寫字母的單詞,你想要計算每個單詞出現的次數。

你可以使用字典或defaultdict增加計數,但collections.Counter提供了一種更清晰,更方便的方法。 Counter是dict的子類,它使用0作為任何缺失元素的默認值,并且更容易計算對象的出現次數:

>>> from collections import Counter
>>> words = "if there was there was but if 
... there was not there was not".split()
>>> counts = Counter(words)
>>> counts
Counter({'if': 2, 'there': 4, 'was': 4, 'not': 2, 'but': 1})

當你將單詞列表傳遞給Counter時,它會存儲每個單詞以及該單詞在列表中出現的次數。

如果你好奇兩個最常見的詞是什么?只需使用.most_common():

>>> counts.most_common(2)
[('there', 4), ('was', 4)]

.most-common()是一個方便的方法,只需按計數返回n個最頻繁的輸入。

3. 使用字符串常量訪問公共字符串組

現在有一個瑣事需要判斷!‘A’>‘a’是真是假? 這是假的,因為A的ASCII代碼是65,但a是97,65不大于97。為什么答案很重要?因為如果你想檢查一個字符是否是英語字母表的一部分,一種流行的方法是看它是否在A和Z之間(在ASCII圖表上是65和122)。

檢查ascii代碼是可行的,但是的卻很笨拙,很容易弄亂,特別是當你記不清是小寫還是大寫的ascii字符排在第一位的時候。這時候,使用定義在字符串模塊中的常量要容易得多。

你可以使用is_upper(),它返回字符串中的所有字符是否都是大寫字母:

>>> import string
>>> def is_upper(word):
...     for letter in word:
...         if letter not in string.ascii_uppercase:
...             return False
...     return True
...
>>> is_upper('Thanks Geir')
False
>>> is_upper('LOL')
True

is_upper()迭代word中的字母,并檢查字母是否為string.ascii_大寫字母的一部分。如果你打印出string.ascii_大寫,你會發現它只是一個字符串,該值設置為文本“ABCDEFGHIJKLMNOPQRSTUVWXYZ”。

所有字符串常量都只是經常引用的字符串值的字符串。其中包括以下內容:

  • string.ascii_letters
  • string.ascii_uppercase
  • string.ascii_lowercase
  • string.digits
  • string.hexdigits
  • string.octdigits
  • string.punctuation
  • string.printable
  • string.whitespace

這些更容易使用,更重要的是,更容易閱讀。

4. 使用Itertools生成排列和組合

例子:你去游樂園,決定找出每一對可能坐在過山車上的朋友。

除非生成這些配對是面試問題的主要目的,否則很可能生成所有可能的配對只是朝著工作算法前進的一個乏味的步驟。你可以自己用嵌套for循環計算它們,也可以使用強大的itertools庫。

itertools有多個工具來生成可重復輸入數據序列,但現在我們只關注兩個常見函數:itertools.permutations()和itertools.combinations()。

itertools.permutations()構建所有排列的列表,這意味著它是輸入值的每個可能分組的列表,其長度與count參數匹配。r關鍵字參數允許我們指定每個分組中有多少值:

>>> import itertools
>>> friends = ['Monique', 'Ashish', 'Devon', 'Bernie']
>>> list(itertools.permutations(friends, r=2))
[('Monique', 'Ashish'), ('Monique', 'Devon'), ('Monique', 'Bernie'),
('Ashish', 'Monique'), ('Ashish', 'Devon'), ('Ashish', 'Bernie'),
('Devon', 'Monique'), ('Devon', 'Ashish'), ('Devon', 'Bernie'),
('Bernie', 'Monique'), ('Bernie', 'Ashish'), ('Bernie', 'Devon')]

對于排列,元素的順序很重要,因此(“sam”、“devon”)表示與(“devon”、“sam”)不同的配對,這意味著它們都將包含在列表中。

itertools.combinations()生成組合。這些也是輸入值的可能分組,但現在值的順序無關緊要。因為(‘sam’、‘devon’)和(‘devon’、‘sam’)代表同一對,所以輸出列表中只會包含它們中的一個:

>>> list(itertools.combinations(friends, r=2))
[('Monique', 'Ashish'), ('Monique', 'Devon'), ('Monique', 'Bernie'),
('Ashish', 'Devon'), ('Ashish', 'Bernie'), ('Devon', 'Bernie')]

由于值的順序與組合有關,因此同一輸入列表的組合比排列少。同樣,因為我們將r設置為2,所以每個分組中都有兩個名稱。

.combinations和.permutations只是強大庫的一個小例子,但是當你試圖快速解決算法問題時,即使這兩個函數也非常有用。

關于原文

鏈接:https://realpython.com/python-coding-interview-tips/點擊跳轉?感謝python中文社區

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

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

相關文章

提高SQL執行性能方案:如何讓你的SQL運行得更快

---- 人們在使用SQL時往往會陷入一個誤區,即太關注于所得的結果是否正確,而忽略了不同的實現方法之間可能存在的性能差異,這種性能差異在大型的或是復雜的數據庫環境中(如聯機事務處理OLTP或決策支持系統DSS)中表現得尤…

休眠后gpio狀態_STM32中GPIO的8種工作模式總結

STM32中GPIO的8種工作模式總結一、推挽輸出:可以輸出高、低電平,連接數字器件;推挽結構一般是指兩個三極管分別受兩個互補信號的控制,總是在一個三極管導通的時候另一個截止。高低電平由IC的電源決定。形象點解釋:推挽&#xff0c…

Ubuntu16.04 下 tensorRT安裝

環境準備 主要是根據工程環境需要,參考trt文檔安裝trt 1.查看trt適配情況 :鏈接跳轉,注意,不同版本的trt有不同版本的文檔,請以最新文檔為準。 2.根據自己系統情況下載相關包 因為我自己拉的docker鏡像是ubuntu16.04…

左右xcode的重構選項的一些理解

Rename(重命名):對標示符進行重命名,以獲得更好的代碼可讀性,這些標示符包含類,方法或者函數的名稱. Extract(抽取):將你在XCode種選擇的代碼抽取到一個新的方法或函數中. Create SuperClass(創建父類):為Xcode中當前所選的類定義父類 Move Up(上移):將所選擇的方法,屬性,或實例…

window 如何查看tomcat 實時日志_如何處理生產環境Tomcat的catalina.out日志?

前語:不要為了讀文章而讀文章,一定要帶著問題來讀文章,勤思考。作者:jmcui 來源:http://1t.click/x4q# 前言隨著每天業務的增長,Tomcat 的catalina.out日志 變得越來越大,占用磁盤空間不說。要…

zabbix的agent端的主動模式關鍵三個參數

如多主機超過300和隊列內容過多,就采用主動模式. [rootweb03 zabbix]# egrep -v "^#|^$" zabbix_agentd.conf PidFile/var/run/zabbix/zabbix_agentd.pid LogFile/var/log/zabbix/zabbix_agentd.log LogFileSize0 StartAgents0 ServerActive172.16.1.8 Hostnameweb03…

opencv 繪制坐標曲線_OpenCV手工實現灰度及RGB直方圖

#include #include#include#include#include#include#include#include#includeusing namespacecv;using namespacestd;//單通道圖片直方圖繪制void drawHist(vectornums){Mat hist Mat::zeros(600, 800, CV_8UC3);auto Max max_element(nums.begin(), nums.end());//max迭代器類…

onnx 測試_用于ONNX的TensorRT后端

用于ONNX的TensorRT后端解析ONNX模型以使用TensorRT執行。另請參閱TensorRT文檔。有關最近更改的列表,請參見changelog。支持的TensorRT版本Master分支上的開發適用于具有完整維度和動態架構shape支持的TensorRT 7.2.1的最新版本。對于TensorRT的早期版本&#xff0…

paddlepaddle測試安裝_百度paddlepaddle深度學習7日入門-CV疫情特輯心得

正值疫情嚴重之日,作為一名研究生被迫待在家里學習,手頭的科研項目也嚴重受挫。。。偶然間,看到微信公眾號發布這門課,馬上報名,入坑!!!瞬間疫情其間有學習的目標了。。該課程學習依…

apache目錄 vscode_VsCode搭建Java開發環境(Spring Boot項目創建、運行、調試)

VsCode搭建Java開發環境(Spring Boot項目創建、運行、調試)安裝如下兩個主要擴展即可,這兩個擴展已關聯java項目開發主要使用的maven、springboot等所需要的擴展。開始步驟:在 Visual Studio Code 中打開擴展視圖(CtrlShiftX)。輸入“java”搜索商店擴展…

android dp轉px的公式_Android特效專輯——自定義不一樣的Toast

大家都知道,Android的控件有時候很難滿足我們的需求,所以我們需要自定義View。自定義的方式很多,有繼承原生控件也有直接自定義View的,今天寫的是自定義的Toast,當然,這個不是復寫Toast,是換一種表達形式&a…

code iban 是有什么組成_深入淺出Zookeeper(四):客戶端的請求在服務器中經歷了什么...

作者 泊浮目 沃趣科技高級研發工程師出品 沃趣科技1. 前言當我們向zk發出一個數據更新請求時,這個請求的處理流程是什么樣的?zk又是使用了什么共識算法來保證一致性呢?帶著這些問題,我們進入今天的正文。2. 設計模式&#xff1…

Centos7: 配置IO調度

今天有同事問我個問題:“CentOS7如何修改IO默認的調度”,我這里簡單整理下如何調整的方法: 1、查看CentOS7下IO支持的調度 1234[rootkvm02 ~]# dmesg | grep -i scheduler [ 16.900459] io scheduler noop registered[ 16.900473] io sch…

啟動activemq_「Java」 - SpringBoot amp; ActiveMQ

一、消息隊列消息隊列中間件是分布式系統中重要的組件,主要解決應用耦合、異步消息、流量削鋒等問題,實現高性能、高可用、可伸縮和最終一致性架構,是大型分布式系統不可缺少的中間件。目前在生產環境中使用較多的消息隊列有ActiveMQ、Rabbit…

永不休眠怎么設置_電腦休眠后應該怎樣喚醒?

可能有朋友會碰到這種情況,電腦屏幕顯示正在休眠,而且不停的轉圈,這是怎么回事,如何喚醒?下面讓堅哥為大家分析一下吧。電腦開機顯示休眠一般根據以下幾種情況進行處理:1、正常電腦休眠:一般的是按一下電源…

配置ssl證書_Mysql配置ssl證書

本環境基于mysql5.6配置,通過openssl生成證書進行配置一、確認環境信息1、查看數據庫版本mysql> select version();-----------| version() |-----------| 5.6.36 |-----------2、查看數據庫是否支持ssl配置mysql> show variables like have%ssl%;-----------…

echarts散點圖中大小_echarts在地圖上繪制散點圖(任意點)

項目需求:在省份地圖上繪制散點圖,散點位置不一定是哪個城市或哪個區縣,即任意點通過查詢官網文檔,找到一個與需求類似的demo:,更改代碼,將中國地圖替換為省份地圖,省份地圖的js代碼…

如何讓圖片充滿excel單元格_如何在Excel單元格建立下拉菜單

對于一些常用的數據我們往往會希望能夠盡量快速的輸入,下拉菜單就是一個最簡單的解決辦法。那么如何實現下拉菜單呢?跟隨以下步驟,建立屬于自己的下拉菜單吧!如何建立下拉菜單?一、確定內容:在單元格中&…

pgsql中float4導致java程序精度丟失_Java基礎系列02

注釋Java中支持三種注釋:1.單行注釋以//開始換行結束。2.多行注釋以/*開始,以*/結束。3.說明注釋以/**開始,以*/結束。關鍵字關鍵字:是指在程序中,Java已經定義好的單詞,具有特殊含義。例如上篇文章中Hello…

python地理位置聚類_python – 用于聚類地理位置數據的DBSCAN

我有一個緯度和經度對的數據幀.這是我的數據幀外觀.order_lat order_long0 19.111841 72.9107291 19.111342 72.9083872 19.111342 72.9083873 19.137815 72.9140854 19.119677 72.9050815 19.119677 72.9050816 19.119677 72.9050817 19.120217 72.9071218 19.120217 72.90712…