为了编写 pythonic 代码,我想知道是否有一个样式指南,涵盖了使用安静或冗长的函数选项。
例如,在我的Python包中,我有一系列相互调用的函数,因此用户最好能够有时请求打印输出。
例如:
Private _textExtractor As TextExtractor
Private _attachmentTextFilepath As String = "c:\temp\EmailAttachmentText.txt"
Private Shared Sub IterateMessages(folder As Outlook.Folder)
Dim fi = folder.Items
If fi IsNot Nothing Then
For Each item As [Object] In fi
Dim mi As Outlook.MailItem = DirectCast(item, Outlook.MailItem)
Dim attachments = mi.Attachments
If attachments.Count <> 0 Then
For i As Integer = 1 To mi.Attachments.Count
'Save email attachments
mi.Attachments(i).SaveAsFile("C:\temp\" + mi.Attachments(i).FileName)
'Use TIKA to read the contents of the file
Dim textExtractionResult As TextExtractionResult = _textExtractor.Extract("C:\temp\" + mi.Attachments(i).FileName)
'Save attachment text to a txt file
File.AppendAllText(_attachmentTextFilepath, textExtractionResult.Text)
Next
End If
Next
End If
End Sub
这里是否有标准的arg名称。例如 应该使用“安静”/“静音”来抑制所有打印输出。 或者,如果为真,应该使用“详细”来要求这个吗?
答案 0 :(得分:7)
基本上你可以使用logging
module来设置所需的日志记录级别,记录器将保存/打印/导出(根据你的配置)记录的值。
import logging
logging.warning('Watch out!') # will print a message to the console
logging.info('I told you so') # will not print anything
您可以使用以下方式设置记录器的级别:
logging.basicConfig(level=logging.INFO)
还有很多more options there。
答案 1 :(得分:2)
如果您不想依赖日志库,我认为您的解决方案已经足够 pythonic 。写作可能有点pythonic:
def simple_addition(a, b, silent=True):
res = a + b
if not silent:
print('The answer is %i' % res)
return res
如PEP 8, Other Recommendations所述,单行if语句可以,但不鼓励。
还有其他可能性。
or
使用or
运算符对条件进行编码可能不是pythonic
但就个人而言,我觉得它很好看:“沉默或......”,“安静或......”。见下文:
def simple_addition(a, b, silent=True):
res = a + b
silent or print('The answer is %i' % res)
return res
or
运算符会发生短路,所以print
及其参数仅在静默为False
时评估,就像使用if
语句时一样。
缺点是如果mypy
绑定到布尔类型,silent
类型检查将失败:
$ cat > add.py
def simple_addition(a, b, silent: bool = True):
res = a + b
silent or print('The answer is %i' % res)
return res
^D
$ mypy add.py
add.py:3: error: "print" does not return a value
noop
三元我们也可以这样做:
def noop(*args, **kwargs):
pass
def simple_addition(a, b, silent=True):
_print = noop if silent else print
res = a + b
_print('The answer is %i' % res)
return res
......但感觉相当不熟悉。