# Handle a matched regex
if (match := pattern.search(data)) is not None:
# Do something with match
# A loop that can't be trivially rewritten using 2-arg iter()
while chunk := file.read(8192):
process(chunk)
# Reuse a value that's expensive to compute
[y := f(x), y**2, y**3]
# Share a subexpression between a comprehension filter clause and its output
filtered_data = [y for x in data if (y := f(x)) is not None]
procedure fizzbuzz
For i := 1 to 100 do
set print_number to true;
If i is divisible by 3 then
print "Fizz";
set print_number to false;
If i is divisible by 5 then
print "Buzz";
set print_number to false;
If print_number, print i;
print a newline;
end
型
C风格
void function fizzbuzz
For (i = 1; i <= 100; i++) {
set print_number to true;
If i is divisible by 3
print "Fizz";
set print_number to false;
If i is divisible by 5
print "Buzz";
set print_number to false;
If print_number, print i;
print a newline;
}
if (m := re.search(pat, s)):
print m.span()
else if (m := re.search(pat2, s):
…
while len(bytes := x.read()) > 0:
… do something with `bytes`
[stripped for l in lines if len(stripped := l.strip()) > 0]
字符串 而不是这些:
m = re.search(pat, s)
if m:
print m.span()
else:
m = re.search(pat2, s)
if m:
…
while True:
bytes = x.read()
if len(bytes) <= 0:
return
… do something with `bytes`
[l for l in (l.strip() for l in lines) if len(l) > 0]
6条答案
按热度按时间hgb9j2n61#
更新答案
在问题的上下文中,我们正在处理伪代码,但从Python 3.8开始,
:=
实际上是一个有效的运算符,允许在表达式中分配变量:字符串
更多详细信息请参见PEP 572。
原始应答
您找到的是pseudocode
伪代码是对计算机程序或其他算法的操作原理的非正式高级描述。
:=
实际上是赋值运算符。在Python中,这就是=
。要将此伪代码转换为Python,您需要了解所引用的数据结构,以及更多的算法实现。
关于psuedocode的一些注意事项:
:=
是赋值运算符或Python中的=
=
是Python中的相等运算符或==
Pascal风格
型
C风格
型
注意大括号用法和赋值运算符的区别。
41zrol4v2#
PEP572建议在Python中支持
:=
运算符,以允许在表达式中进行变量赋值。这个语法在Python 3.8中可用。
jchrr9hc3#
这个符号
:=
是Python中的一个 * 赋值运算符 *(通常称为Walrus Operator)。简而言之,*walrus运算符 * 压缩了我们的代码,使其更短。这里有一个非常简单的例子:
字符串
这些代码是相同的(并且输出相同的内容),但是正如您所看到的,使用walrus操作符的版本被压缩为仅两行代码,以使内容更加紧凑。
现在,为什么要使用海象运算符?
首先,不要觉得有义务。
我自己也很少用这个。我只是在使用walrus操作符来稍微压缩我的代码,主要是在处理 * 正则表达式 * 时。
您也可以找到自己的用例。重要的是你对它有一个大致的了解,并且知道当你遇到这样的问题时,它什么时候可能会有帮助。
这是到目前为止我如何在更高的层次上解释海象运算符。希望你学到了一些东西。
ipakzgxi4#
问题中的代码是伪代码;其中
:=
表示分配。对于未来的访问者,以下内容可能更相关:Python的下一个版本(3.8)将获得一个新的运算符
:=
,允许 * 赋值表达式 *(详细信息,激励性示例和讨论可以在PEP 572中找到,该文件于2018年6月底暂时接受)。有了这个新的操作符,你可以写这样的东西:
字符串
而不是这些:
型
oyt4ldly5#
10月14日3.8正式发布!
有一个新的语法
:=
,它将值作为更大表达式的一部分分配给变量。它被亲切地称为“海象经营者”,因为它的眼睛和象牙的海象相似。在本例中,赋值表达式有助于避免两次调用
len()
:字符串
Python 3.8中的新增功能-赋值表达式
ckx4rj1h6#
:=
也被称为海象操作员。我们可以使用这个walrus操作符赋值,同时进行条件检查。例如:
不使用Walrus操作员:
字符串
使用Walrus操作员:
型
因此,我们不仅可以在语句中使用变量
a
,还可以在其后使用。它只会将新值赋给变量并启用条件检查。