Tom*_*yer -3 python syntax conditional-statements
我正在使用python,我意识到它有时候不可靠,或者语句无法正常工作
column_exclude_list = []}
column_exclude_edit = ['id']
def get_columns(type='list'):
# exclude_list = column_exclude_list if type=='list' else column_exclude_edit
exclude_list = type=='list' and column_exclude_list or column_exclude_edit
print(type)
print(column_exclude_list)
print(column_exclude_edit)
print(exclude_list)
Run Code Online (Sandbox Code Playgroud)
我测试了这个功能,它打印:
list
[]
['id']
['id']
Run Code Online (Sandbox Code Playgroud)
更改后exclude_list = column_exclude_list if type=='list' else column_exclude_edit,它的工作原理.
list
[]
['id']
[]
Run Code Online (Sandbox Code Playgroud)
这两个短手条件之间有什么不对?
您还没有占到其中的情况下column_exclude_list是空的.空列表是false-y值:
>>> type_ = 'list'
>>> column_exclude_list = []
>>> column_exclude_edit = 'column_exclude_edit' # for demo purposes
>>> type_ == 'list' and column_exclude_list or column_exclude_edit
'column_exclude_edit'
Run Code Online (Sandbox Code Playgroud)
因为column_exclude_list是false值,and运算符会生成一个空列表,or运算符会生成另一个操作数.
这并不意味着and和or破损或在Python的工作不同于他们在其他语言做.你刚才有没有考虑过,在一个<test> and <true expression> or <false expression>结构,即<true expression>是仍然用于确定整个的结果.这适用于所有布尔逻辑,而不仅仅是Python.
不要使用and和or用于条件表达式.使用实际的条件表达式,所以<true expression> if <test> else <false expression>:
column_exclude_list if type_ == 'list' else column_exclude_edit
Run Code Online (Sandbox Code Playgroud)
喜欢and和or,这根据if测试结果懒惰地评估两个操作数表达式中的任何一个.如果column_exclude_list为空,它仍将被返回,因为它的值不用于确定进一步布尔测试的结果.
| 归档时间: |
|
| 查看次数: |
390 次 |
| 最近记录: |