Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 这个表达式的术语是什么r=(如果c.values()中的v为1,否则为0)_Python 3.x_Function_Counter - Fatal编程技术网

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),
    ),
)