Python 3.x 这个表达式的术语是什么r=(如果c.values()中的v为1,否则为0)
在计算机科学中,这个表达式Python 3.x 这个表达式的术语是什么r=(如果c.values()中的v为1,否则为0),python-3.x,function,counter,Python 3.x,Function,Counter,在计算机科学中,这个表达式r=(如果c.values()中的v为1,否则为0)是否有特定的术语/名称 def Query(queries): from collections import Counter c=Counter() result=[] for k,v in queries: if k==1: c[v]+=1 elif k==2 and v in c: c[v]-=
r=(如果c.values()中的v为1,否则为0)
是否有特定的术语/名称
def Query(queries):
from collections import Counter
c=Counter()
result=[]
for k,v in queries:
if k==1:
c[v]+=1
elif k==2 and v in c:
c[v]-=1
elif k==3:
r = (1 if v in c.values() else 0)
result+=[r]
return result
Python将计算为值的表达式与不计算为值的语句(指令)区分开来。任何表达式都可以用作Python中的语句(作为表达式语句),在这种情况下,值将被简单地丢弃。其他类型的语句可能包含表达式,而表达式可能包含子表达式
r=(如果c.values()中的v为1,否则为0)
不是表达式,甚至不是表达式语句。这是一个赋值语句
在其右侧,此赋值语句包含一个(如果c.values()中的v为1,则为0)
,包含三个子表达式
- c.values()中的表达式
v
- 整数
,以及1
- 文本整数
0
,并包含两个子表达式
- 原子
v
,以及
- 一个比较器,一个调用:
c.values()
调用表达式包含一个属性引用c.values
。这被视为调用表达式的子表达式
通过使用该模块,您可以确切地看到Python是如何解析它的
三元表达式还是条件表达式?@sacul是-但要清楚,条件表达式是三元表达式的子集(种类)。“三元”只是指技术上有3个操作数,与C的?:
>>> import ast
>>> print(ast.dump(compile('r = (1 if v in c.values() else 0)', '<str>', 'exec', ast.PyCF_ONLY_AST)))
Module(body=[Assign(targets=[Name(id='r', ctx=Store())], value=IfExp(test=Compare(left=Name(id='v', ctx=Load()), ops=[In()], comparators=[Call(func=Attribute(value=Name(id='c', ctx=Load()), attr='values', ctx=Load()), args=[], keywords=[])]), body=Num(n=1), orelse=Num(n=0)))])
Assign(
targets=[Name(id="r", ctx=Store())],
value=IfExp(
test=Compare(
left=Name(id="v", ctx=Load()),
ops=[In()],
comparators=[
Call(
func=Attribute(
value=Name(id="c", ctx=Load()), attr="values", ctx=Load()
),
args=[],
keywords=[],
)
],
),
body=Num(n=1),
orelse=Num(n=0),
),
)