python末尾逗號導致返回結(jié)果是一個元組的問題
python末尾逗號導致返回結(jié)果是一個元組
問題描述
調(diào)用的地方
port = config_manager.get_int('mongo','port'), print(type(port)) # 應該打印int,但是打印成了元組
使用 configparser 解析配置文件,函數(shù)定義,configparser也提供了一些輔助方法,可以在讀取時直接轉(zhuǎn)換,比如:
getint() - 獲取整數(shù)值
def get_int(self, section, key): """獲取整數(shù)類型的配置值""" value = self.config.getint(section, key) print(type(value)) assert isinstance(value, int) return value
問題:調(diào)用的地方應該打印int,但是打印成了元組
問題分析
經(jīng)過網(wǎng)上查詢資料,很多說是 int數(shù)據(jù)再int轉(zhuǎn)換一次就變成了元組,但是這塊明顯不符合我的情況。
最后發(fā)現(xiàn)是:末尾逗號導致port變量綁定到一個元組上~
末尾逗號是一個非常容易被忽視的細節(jié),這次經(jīng)歷也是一個寶貴的學習經(jīng)歷。以后在Python中獲取返回值時,一定要注意是否有這種錯誤。
Python中末尾逗號基礎
在Python中,如果語句或函數(shù)的參數(shù)列表中添加了末尾的逗號,會產(chǎn)生一些副作用需要注意:
1.返回元組
如果函數(shù)返回多個值,加末尾逗號會使其返回一個元組,而不是多個單獨的值。
def foo(): return 1, print(foo()) # (1,)
2.參數(shù)組成元組
調(diào)用函數(shù)時參數(shù)末尾加逗號,會將參數(shù)組裝成一個元組。
def foo(x): print(x) foo(1,) # (1,)
3.元組拆包不正確
帶末尾逗號的元組拆包時,需要處理額外的逗號產(chǎn)生的值。
values = (1,) a, = values # 會報錯 a, _ = values # 正確拆包方式
4.函數(shù)定義參數(shù)
錯誤在函數(shù)定義中參數(shù)帶逗號容易造成參數(shù)數(shù)目錯誤。
def foo(x, ): # 會被識別成接收元組的函數(shù) pass
5.多余語法錯誤
末尾逗號也可能直接導致語法錯誤。
print(1,) print(2) # 錯誤
總結(jié):在Python中,除非特別需要返回或傳參元組,一般不推薦在語句末尾添加逗號。應該注意檢查是否存在末尾逗號導致的這些副作用。
到此這篇關于python末尾逗號導致返回結(jié)果是一個元組的文章就介紹到這了,更多相關python末尾逗號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python迭代器協(xié)議及for循環(huán)工作機制詳解
這篇文章主要介紹了Python迭代器協(xié)議及for循環(huán)工作機制詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07Python opencv實現(xiàn)人眼/人臉識別以及實時打碼處理
這篇文章主要為大家詳細介紹了Python opencv實現(xiàn)人眼、人臉識別,以及實時打碼處理,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解
這篇文章主要介紹了使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解,該示例包括生成數(shù)據(jù)集、為數(shù)據(jù)集選擇合適的機器學習模型、構(gòu)建、配置和訓練它,最后解釋結(jié)果,即混淆矩陣,需要的朋友可以參考下2022-06-06