python末尾逗號導(dǎo)致返回結(jié)果是一個(gè)元組的問題
python末尾逗號導(dǎo)致返回結(jié)果是一個(gè)元組
問題描述
調(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問題:調(diào)用的地方應(yīng)該打印int,但是打印成了元組
問題分析
經(jīng)過網(wǎng)上查詢資料,很多說是 int數(shù)據(jù)再int轉(zhuǎn)換一次就變成了元組,但是這塊明顯不符合我的情況。
最后發(fā)現(xiàn)是:末尾逗號導(dǎo)致port變量綁定到一個(gè)元組上~
末尾逗號是一個(gè)非常容易被忽視的細(xì)節(jié),這次經(jīng)歷也是一個(gè)寶貴的學(xué)習(xí)經(jīng)歷。以后在Python中獲取返回值時(shí),一定要注意是否有這種錯(cuò)誤。
Python中末尾逗號基礎(chǔ)
在Python中,如果語句或函數(shù)的參數(shù)列表中添加了末尾的逗號,會(huì)產(chǎn)生一些副作用需要注意:
1.返回元組
如果函數(shù)返回多個(gè)值,加末尾逗號會(huì)使其返回一個(gè)元組,而不是多個(gè)單獨(dú)的值。
def foo():
return 1,
print(foo()) # (1,) 2.參數(shù)組成元組
調(diào)用函數(shù)時(shí)參數(shù)末尾加逗號,會(huì)將參數(shù)組裝成一個(gè)元組。
def foo(x):
print(x)
foo(1,) # (1,)3.元組拆包不正確
帶末尾逗號的元組拆包時(shí),需要處理額外的逗號產(chǎn)生的值。
values = (1,) a, = values # 會(huì)報(bào)錯(cuò) a, _ = values # 正確拆包方式
4.函數(shù)定義參數(shù)
錯(cuò)誤在函數(shù)定義中參數(shù)帶逗號容易造成參數(shù)數(shù)目錯(cuò)誤。
def foo(x, ): # 會(huì)被識別成接收元組的函數(shù)
pass5.多余語法錯(cuò)誤
末尾逗號也可能直接導(dǎo)致語法錯(cuò)誤。
print(1,) print(2) # 錯(cuò)誤
總結(jié):在Python中,除非特別需要返回或傳參元組,一般不推薦在語句末尾添加逗號。應(yīng)該注意檢查是否存在末尾逗號導(dǎo)致的這些副作用。
到此這篇關(guān)于python末尾逗號導(dǎo)致返回結(jié)果是一個(gè)元組的文章就介紹到這了,更多相關(guān)python末尾逗號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 實(shí)現(xiàn)自動(dòng)遠(yuǎn)程登陸scp文件實(shí)例代碼
這篇文章主要介紹了python 實(shí)現(xiàn)自動(dòng)遠(yuǎn)程登陸scp文件實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
Python argparse 解析命令行參數(shù)模塊詳情
這篇文章主要介紹了Python argparse 解析命令行參數(shù)模塊詳情,argparse是python用于解析命令行參數(shù)和選項(xiàng)的標(biāo)準(zhǔn)模塊,用于代替已經(jīng)過時(shí)的optparse模塊2022-07-07
python設(shè)置環(huán)境變量的幾種方法總結(jié)
這篇文章主要介紹了在Python中設(shè)置環(huán)境變量可以通過多種方式實(shí)現(xiàn),包括使用os.environ、os.putenv、setuptools以及在操作系統(tǒng)級別設(shè)置,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01

