相关疑难解决方法(0)

分配表达式如何`:=`在Python中工作?

我已经阅读了关于赋值表达式的PEP 572,我发现这个代码是一个明确的例子,我可以使用它:

while line := fp.readline():
    do_stuff(line)
Run Code Online (Sandbox Code Playgroud)

但我很困惑,从我读到的,它应该像正常的赋值一样工作,但返回值.但它看起来不像那样:

>>> w:=1
  File "<stdin>", line 1
    w:=1
     ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

在修补它之后,我意识到以下工作:

>>> (w:=1)
1
Run Code Online (Sandbox Code Playgroud)

但它感觉如此不熟悉.它是唯一需要括号的运算符:

>>> w = 1
>>> w + w
2
>>> w == w
True
>>> w is w
True
>>> w < w
False
Run Code Online (Sandbox Code Playgroud)

它是否有理由被解析器与Python中的其他任何东西区别对待?我觉得我错过了什么.这不仅仅是一个运营商.

:=在REPL中使用以指定变量将非常有用,因为将显示该值.


(更新:我不鼓励对这个敏感话题进行固执讨论.请避免发表评论或答案,而不是有用的评论.)

python python-3.8

13
推荐指数
1
解决办法
712
查看次数

难以理解如何正确地将 Perl 匹配转换为 Python

我有一个 Perl 示例,当我在 Python 中尝试相同的任务时,它看起来异常混乱且效率低下。可以更好地掌握 Python 工作的人评论如何简化 python 片段,使其在简单性和编码绒毛方面更类似于 Perl 示例吗?这两个片段(Perl 和 Python)产生相同的结果。重点是测试然后提取括号内的正则表达式。Python 案例似乎需要对正则表达式进行两次处理。


#Perl Example:
   elsif ($teststring =~ m/^([0-9\.]+)[Xx]$/)
   {
      $ExtractedVa = $1;
   }
Run Code Online (Sandbox Code Playgroud)
#Python Example of how to implement the perl functionality above:
    elif (re.search(r"^([0-9\.]+)[Xx]$",teststring)):  
        parts=re.search(r"^([0-9\.]+)[Xx]$",teststring)
        ExtractedVa=float(parts.group(1)) # Convert from string to numeric
Run Code Online (Sandbox Code Playgroud)

python perl

3
推荐指数
1
解决办法
98
查看次数

标签 统计

python ×2

perl ×1

python-3.8 ×1