[英]Python builtin function as keyword argument default?
Python的內置函數是否不能用作關鍵字默認值,還是我應該使用其他某種方式引用函數?
我想寫一個像這樣的函數:
def isPNGBlock(bytes, blockLen, pngOffset=0, pngErrorLogger=print):
...
try:
r.validate_signature()
width, height, pixels, metadata = r.read(lenient=True)
except png.Error as e:
pngErrorLogger(e)
取而代之的是,我不得不使用默認值None作為標志值來解決此問題。
def isPNGBlock(bytes, blockLen, pngOffset=0, pngErrorLogger=None):
...
try:
r.validate_signature()
width, height, pixels, metadata = r.read(lenient=True)
except png.Error as e:
if pngErrorLogger is None:
print(e)
else:
pngErrorLogger(e)
或使用包裝函數:
def defaultLogger(str):
print(str)
def isPNGBlock(bytes, blockLen, pngOffset=0, pngErrorLogger=defaultLogger ):
...
try:
r.validate_signature()
width, height, pixels, metadata = r.read(lenient=True)
except png.Error as e:
pngErrorLogger(e)
Python的內置函數是否不可用作關鍵字默認值
它們可以像其他功能一樣使用。
但是,在Python 2中print
是一個語句,而不是一個函數。 它成為Python 3中的函數,因此您的代碼將在其中運行。 如果from __future__ import print_function
使用from __future__ import print_function
它也將在Python 2的最新版本中工作。 例如,使用Python 2.7.3:
In [2]: from __future__ import print_function
In [3]: def isPNGBlock(bytes, blockLen, pngOffset=0, pngErrorLogger=print):
...: pngErrorLogger('test')
...:
In [4]: isPNGBlock(0, 0)
test
如果不能使用print
作為函數,則可以編寫包裝器,也可以使用sys.stdout.write
:
In [7]: isPNGBlock(0, 0, 0, sys.stdout.write)
test
在Python 2中, print
不是函數,而是語句。 語句不能用作參數。
在Python 3中, print
是一個函數,可以按您的方式使用。
您可以通過from __future__ import print_function
Python 2中的Python 3行為。
您正在使用python 2,其中print
是一個關鍵字而不是一個函數-當然關鍵字不能作為參數傳遞,也不能被陰影或修改。 在python 3中已對此進行了更改,現在print是一個可以實現所有這些功能的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.