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