Python常見面試知識總結(二):數據結構、類方法及異常處理

【十三】Python中assert的作用?

Python中assert(斷言)用于判斷一個表達式,在表達式條件為 f a l s e false false的時候觸發異常。

斷言可以在條件不滿足程序運行的情況下直接返回錯誤,而不必等待程序運行后出現崩潰的情況。

Rocky直接舉一些例子:

>>> assert True 
>>> assert False
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AssertionError
>>> assert 1 == 1
>>> assert 1 == 2
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AssertionError
>>> assert 1 != 2

【十四】Python中互換變量有不用創建臨時變量的方法嗎?

在Python中,當我們想要互換兩個變量的值或將列表中的兩個值交換時,我們可以使用如下的格式進行,不需要創建臨時變量:

x, y = y, x

這么做的原理是什么呢?

首先一般情況下Python是從左到右解析一個語句的,但在賦值操作的時候,因為是右值具有更高的計算優先級,所以需要從右向左解析。

對于上面的代碼,它的執行順序如下:

先計算右值 y , x y , x y,x(這里是簡單的原值,但可能會有表達式或者函數調用的計算過程), 在內存中創建元組(tuple),存儲 y , x y, x y,x分別對應的值;計算左邊的標識符,元組被分別分配給左值,通過解包(unpacking),元組中第一個標示符對應的值 ( y ) (y) (y),分配給左邊第一個標示符 ( x ) (x) (x),元組中第二個標示符對應的值 ( x ) (x) (x),分配給左邊第二個標示符 ( y ) (y) (y),完成了 x x x y y y的值交換。

【十五】Python中的主要數據結構都有哪些?

  1. 列表(list)
  2. 元組(tuple)
  3. 字典(dict)
  4. 集合(set)

【十六】Python中的可變對象和不可變對象?

可變對象與不可變對象的區別在于對象本身是否可變。

可變對象:list(列表) dict(字典) set(集合)

不可變對象:tuple(元組) string(字符串) int(整型) float(浮點型) bool(布爾型)

【十七】Python中的None代表什么?

None是一個特殊的常量,表示空值,其和False,0以及空字符串不同,它是一個特殊Python對象, None的類型是NoneType。

None和任何其他的數據類型比較返回False。

>>> None == 0
False
>>> None == ' '
False
>>> None == None
True
>>> None == False
False

我們可以將None復制給任何變量,也可以給None賦值。

【十八】Python中 ? a r g s *args ?args ? ? k w a r g s **kwargs ??kwargs的區別?

? a r g s *args ?args ? ? k w a r g s **kwargs ??kwargs主要用于函數定義。我們可以將不定數量的參數傳遞給一個函數。

這里的不定的意思是:預先并不知道函數使用者會傳遞多少個參數, 所以在這個場景下使用這兩個關鍵字。

? a r g s *args ?args

? a r g s *args ?args是用來發送一個非鍵值對的可變數量的參數列表給一個函數。

我們直接看一個例子:

def test_var_args(f_arg, *argv):print("first normal arg:", f_arg)for arg in argv:print("another arg through *argv:", arg)test_var_args('hello', 'python', 'ddd', 'test')-----------------結果如下-----------------------
first normal arg: hello
another arg through *argv: python
another arg through *argv: ddd
another arg through *argv: test

? ? k w a r g s **kwargs ??kwargs

? ? k w a r g s **kwargs ??kwargs允許我們將不定長度的鍵值對, 作為參數傳遞給一個函數。如果我們想要在一個函數里處理帶名字的參數, 我們可以使用 ? ? k w a r g s **kwargs ??kwargs

我們同樣舉一個例子:

def greet_me(**kwargs):for key, value in kwargs.items():print("{0} == {1}".format(key, value))greet_me(name="yasoob")-----------結果如下-------------
name == yasoob

【十九】Python中Numpy的broadcasting機制?

Python的Numpy庫是一個非常實用的數學計算庫,其broadcasting機制給我們的矩陣運算帶來了極大地方便。

我們先看下面的一個例子:

>>> import numpy as np
>>> a = np.array([1,2,3])
>>> a
array([1, 2, 3])
>>> b = np.array([6,6,6])
>>> b
array([6, 6, 6])
>>> c = a + b
>>> c
array([7, 8, 9])

上面的代碼其實就是把數組 a a a和數組 b b b中同樣位置的每對元素相加。這里 a a a b b b是相同長度的數組。

如果兩個數組的長度不一致,這時候broadcasting就可以發揮作用了。

比如下面的代碼:

>>> d = a + 5
>>> d
array([6, 7, 8])

broadcasting會把 5 5 5擴展成 [ 5 , 5 , 5 ] [5,5,5] [5,5,5],然后上面的代碼就變成了對兩個同樣長度的數組相加。示意圖如下(broadcasting不會分配額外的內存來存取被復制的數據,這里只是方面描述):

我們接下來看看多維數組的情況:

>>> e
array([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]])
>>> e + a
array([[2., 3., 4.],[2., 3., 4.],[2., 3., 4.]])

在這里一維數組被擴展成了二維數組,和 e e e的尺寸相同。示意圖如下所示:

我們再來看一個需要對兩個數組都做broadcasting的例子:

>>> b = np.arange(3).reshape((3,1))
>>> b
array([[0],[1],[2]])
>>> b + a
array([[1, 2, 3],[2, 3, 4],[3, 4, 5]])

在這里 a a a b b b都被擴展成相同的尺寸的二維數組。示意圖如下所示:

總結broadcasting的一些規則:

  1. 如果兩個數組維數不相等,維數較低的數組的shape進行填充,直到和高維數組的維數匹配。
  2. 如果兩個數組維數相同,但某些維度的長度不同,那么長度為1的維度會被擴展,和另一數組的同維度的長度匹配。
  3. 如果兩個數組維數相同,但有任一維度的長度不同且不為1,則報錯。
>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> b = np.ones((2,3))
>>> b
array([[1., 1., 1.],[1., 1., 1.]])
>>> a.shape
(3,)
>>> a + b
array([[1., 2., 3.],[1., 2., 3.]])

接下來我們看看報錯的例子:

>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> b = np.ones((3,2))
>>> b
array([[1., 1.],[1., 1.],[1., 1.]])
>>> a + b
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (3,) (3,2)

【二十】Python中的實例方法、靜態方法和類方法三者區別?

不用@classmethod和@staticmethod修飾的方法為實例方法。在類中定義的方法默認都是實例方法。實例方法最大的特點是它至少要包含一個self參數,用于綁定調用此方法的實例對象,實例方法通常可以用類對象直接調用。

采用@classmethod修飾的方法為類方法。類方法和實例方法相似,它至少也要包含一個參數,只不過類方法中通常將其命名為cls,Python會自動將類本身綁定給cls參數。我們在調用類方法時,無需顯式為cls參數傳參。

采用@staticmethod修飾的方法為靜態方法。靜態方法沒有類似self、cls這樣的特殊參數,因此Python的解釋器不會對它包含的參數做任何類或對象的綁定。也正因為如此,類的靜態方法中無法調用任何類屬性和類方法。

【二十一】Python中常見的切片操作

[:n]代表列表中的第一項到第n項。我們看一個例子:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(example[:6])---------結果---------
[1, 2, 3, 4, 5, 6]

[n:]代表列表中第n+1項到最后一項:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(example[6:])---------結果---------
[7, 8, 9, 10]

[-1]代表取列表的最后一個元素:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(example[-1])---------結果---------
10

[:-1]代表取除了最后一個元素的所有元素:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(example[:-1])---------結果---------
[1, 2, 3, 4, 5, 6, 7, 8, 9]

[::-1]代表取整個列表的相反列表:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(example[::-1])---------結果---------
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

[1:]代表從第二個元素意指讀取到最后一個元素:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(example[1:])---------結果---------
[2, 3, 4, 5, 6, 7, 8, 9, 10]

[4::-1]代表取下標為4(即第五個元素)的元素和之前的元素反轉讀取:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(example[4::-1])---------結果---------
[5, 4, 3, 2, 1]

【二十二】Python中如何進行異常處理?

一般情況下,在Python無法正常處理程序時就會發生一個異常。異常在Python中是一個對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。

捕捉異常可以使用try,except和finally語句。

try和except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息并處理。

try:6688 / 0
except:'''異常的父類,可以捕獲所有的異常'''print "0不能被除"
else:'''保護不拋出異常的代碼'''print "沒有異常"
finally:print "最后總是要執行我"

【二十三】Python中remove,del以及pop之間的區別?

remove,del以及pop都可以用于刪除列表、字符串等里面的元素,但是具體用法并不相同。

  1. remove是剔除第一個匹配的值。
  2. del是通過索引來刪除當中的元素。
  3. pop是通過索引來刪除當中的元素,并且返回該元素;若括號內不添加索引值,則默認刪除最后一個元素。
>>> a = [0, 1, 2, 1, 3] 
>>> a.remove(1) 
>>> a 
[0, 2, 1, 3] >>> a = [0, 1, 2, 1, 3] 
>>> del a[1] 
[0, 2, 1, 3] >>> a = [0, 1, 2, 1, 3] 
>>> a.pop(1) 
1 
>>> a 
[0, 2, 1, 3] 

文末推薦

在這里插入圖片描述
內容介紹:
《機器學習平臺架構實戰》詳細闡述了與機器學習平臺架構相關的基本解決方案,主要包括機器學習和機器學習解決方案架構,機器學習的業務用例,機器學習算法,機器學習的數據管理,開源機器學習庫,Kubernetes容器編排基礎設施管理,開源機器學習平臺,使用AWS機器學習服務構建數據科學環境,使用AWS機器學習服務構建企業機器學習架構,高級機器學習工程,機器學習治理、偏差、可解釋性和隱私,使用人工智能服務和機器學習平臺構建機器學習解決方案等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。
當當: https://product.dangdang.com/29625469.html
京東: https://item.jd.com/13855627.html

在這里插入圖片描述

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

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

相關文章

光伏設計方案:實現清潔能源的未來

隨著全球氣候變化和能源需求日益增長的問題日益嚴重&#xff0c;光伏發電作為一種清潔、可再生的能源形式&#xff0c;正逐漸成為全球能源轉型的主力軍。而在光伏發電技術的廣泛應用中&#xff0c;一個優秀的光伏設計方案對于實現高效、穩定和安全的發電目標至關重要。 光伏設…

【項目管理】如何用思維導圖做計劃?

思維導圖是一種可視化的思維工具&#xff0c;它可以讓我們的思考過程變得很直觀。它可以幫助我們考慮到計劃的各個方方面面&#xff0c;確定各要素之間的關系。 思維導圖總結功能很強&#xff0c;完成計劃后&#xff0c;可以用思維導圖進行總結&#xff0c;為下一次做計劃積累…

Linux中tar命令詳解

具體用法 tar命令是Linux中用于打包和壓縮文件或目錄的命令&#xff0c;常用于備份和歸檔。它可以將多個文件或目錄打包成一個單一的文件&#xff0c;并可以選擇是否壓縮打包文件。 打包文件或目錄 tar -cvf archive.tar file1 file2 directory1上面的命令將file1、file2和dir…

使用【ShardingSphere】分庫分表

前言 ShardingSphere可以支撐分庫分表&#xff0c;剛果商城采用了垂直分庫&#xff08;根據不同業務拆分數據庫&#xff09;&#xff0c;因此此文章只演示水平分表。 垂直分庫 不同業務拆分為不同的數據庫&#xff08;例如商城業務&#xff09; 水平分表 分表可以通過將大表拆…

2024年軟考高項還是機考嗎?附常見問題答疑

2024年軟考高項實行機考&#xff08;三科均為機考&#xff0c;綜合知識考試時間為上午8:30-11:00&#xff0c;案例論文聯考&#xff0c;考試時間為下午14:30-18:00&#xff09;&#xff0c;本文為大家整理了一些機考常見問題&#xff0c;希望對大家有所幫助。 一、軟考高項機考…

React Hooks學習指北

一、前言 在當今的前端開發環境中&#xff0c;越來越多的開發者認可了 Hooks 的強大能力&#xff0c;并紛紛加入到 Hooks 的使用大軍中&#xff1a; 2019 年 2 月&#xff0c;React 正式發布 v16.8 版本&#xff0c;引入 Hooks 能力&#xff08;最新的 v18 中&#xff0c;還新…

移液器吸頭材質選擇——PFA吸頭在半導體化工行業的應用

PFA吸頭是一種高性能移液器配件&#xff0c;這種材料具有優異的耐化學品、耐熱和電絕緣性能&#xff0c;使得PFA吸頭在應用中表現出色。那么它有哪些特點呢&#xff1f; 首先&#xff0c;PFA吸頭具有卓越的耐化學腐蝕性能。無論是酸性溶液、堿性溶液還是有機溶劑&#xff0c;P…

如何用CHAT幫你提高工作效率?

問CHAT&#xff1a;從規范項目管理流程交付&#xff0c;分別對項目信息安全管理&#xff0c;項目預算管理和項目采購管理三個方面提建議 CHAT回復&#xff1a; 項目信息安全管理: 1. 制定詳細的信息安全政策&#xff0c;所有參與項目的員工必須遵守&#xff0c;對其中涉及敏感…

wpf TelerikUI使用DragDropManager

首先&#xff0c;我先創建事務對象ApplicationInfo&#xff0c;當暴露出一對屬性當例子集合對于構成ListBoxes。這個類在例子中顯示如下代碼&#xff1a; public class ApplicationInfo { public Double Price { get; set; } public String IconPath { get; set; } public …

亞馬遜S3V4驗簽與MINIO驗簽區別

1、先看下官方文檔 AWS S3V4 DEMO 2、實際調用試試 1&#xff09;代碼 // 計算auth// for a simple GET, we have no body so supply the precomputed empty hashMap<String, String> headers new HashMap<String, String>();headers.put("x-amz-content…

0013Java安卓程序設計-ssm酒品移動電商平臺app

文章目錄 **摘要**目錄系統實現5.1 APP端5.2管理員功能模塊開發環境 編程技術交流、源碼分享、模板分享、網課分享 企鵝&#x1f427;裙&#xff1a;776871563 摘要 首先,論文一開始便是清楚的論述了系統的研究內容。其次,剖析系統需求分析,弄明白“做什么”,分析包括業務分析…

Firewalld 防火墻配置

文章目錄 Firewalld 防火墻配置1. Firewalld 概述2. 區域名稱及策略規則3. Firewalld 配置方法4. Firewalld 參數和命令5. Firewalld 兩種模式6. Firewalld 使用 Firewalld 防火墻配置 1. Firewalld 概述 firewalld 是一個動態防火墻管理器&#xff0c;作為 Systemd 管理的防…

【docker】常用命令

啟動docker服務 systemctl start docker 停止docker服務 systemctl stop docker 重啟docker服務 systemctl restart docker 查看docker服務狀態 systemctl status docker 設置開機啟動docker服務 systemctl enable docker 設置關閉開機啟動docker服務 systemctl disable …

數據在內存中的存儲(浮點型篇)

1.例子&#xff1a;5.5&#xff1a;內存存儲為101.1&#xff0c;十分位百分位依次為2的-1次方&#xff0c;2的-2次方&#xff0c;而使用科學計數法可以改寫為1.011*2的2次方 2.國際標準公式&#xff1a;-1的D次方*M*2的E次方&#xff0c;x1負0正 3.M在存儲時默認整數部分為1&…

使用Spring Boot和領域驅動設計實現模塊化整體

用模塊化整體架構編寫的代碼實際上是什么樣的&#xff1f;借助 Spring Boot 和 DDD&#xff0c;我們踏上了編寫可維護和可演化代碼的旅程。 當談論模塊化整體代碼時&#xff0c;我們的目標是以下幾點&#xff1a; 應用程序被組織成模塊。每個模塊解決業務問題的不同部分。模塊…

springcloud微服務篇--1.認識微服務

一、服務架構演變。 單體架構&#xff1a; 將業務的所有功能集中在一個項目中開發&#xff0c;打成一個包部署。 優點&#xff1a;架構簡單 &#xff0c;部署成本低。 缺點&#xff1a;耦合度高 分布式架構 根據業務功能對系統進行拆分&#xff0c;每個業務模塊作為獨立項…

[idea]idea連接clickhouse23.6.2.18

一、安裝驅動 直接在pom.xml加上那個lz4也是必要的不然會報錯 <dependency><groupId>com.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.4.2</version></dependency><dependency><group…

歌唱比賽計分 (8 分)設有10名歌手(編號為1-10)參加歌詠比賽

未采用結構體的解法&#xff0c;通過二維數組解題 #include <stdio.h> void rank(int arr[10][6] ) { int str[4] { 0 }; int a1[6] { 0 }; int k 0; int i 0; int z 0; int j 0; int temp 0; double s1[10][2] { 0 }; dou…

(1)mysql容器化部署

mysql容器化部署&#xff1a; 數據持久化&#xff08;方便數據保存及遷移&#xff09;: 需要持久化兩個目錄: 創建/mysql (1)mysql配置文件: /mysql/mysql-cnf/my.cnf vim my.cnf [mysqld] pid-file /var/run/mysqld/mysqld.pid socket /var/run/mysqld/…