要检查变量是否存在,并且如果退出,请使用原始值,否则,使用分配的新值.在红宝石中,它是
var ||= var_new
如何在python中编写它?
PS:我不知道name的||=,我根本无法在Bing搜索.
Oka*_*Oka 24
我认为那些不确定条件赋值运算符(||=)的人是否存在一些混淆,以及对如何在Ruby中生成变量的一些误解.
一个常见的误解是|| = b等于a = a || b,但它的行为类似于|| a = b
在a = a ||中 b,a在每次运行时由语句设置为某个值,而使用|| a = b,a仅在a逻辑上为假(即,如果它为零或假)时才设置,因为|| 是'短路'.也就是说,如果是||的左侧 比较是真的,没有必要检查右侧.
另一个非常重要的说明:
......变量赋值,即使没有运行,也会立即将该变量召唤出来.
# Ruby
x = 10 if 2 == 5
puts x
Run Code Online (Sandbox Code Playgroud)
即使第一行不会运行,x也将存在于第二行,并且不会引发异常.
这意味着Ruby绝对会确保在任何正确的条件发生之前有一个值的变量容器.||=如果不分配a是没有定义,其指定如果a是falsy(再次,false或nil- nil被默认虚无 Ruby中值),而确保a 被定义.
好吧,如果a已定义,则以下内容:
# Ruby
a ||= 10
Run Code Online (Sandbox Code Playgroud)
实际上相当于:
# Python
if not a:
a = 10
Run Code Online (Sandbox Code Playgroud)
而以下内容:
# Either language
a = a or 10
Run Code Online (Sandbox Code Playgroud)
很接近,但它总是分配一个值,而前面的例子没有.
如果a没有定义,整个操作更接近:
# Python
a = None
if not a:
a = 10
Run Code Online (Sandbox Code Playgroud)
因为未定义a ||= 10when 的非常明确的例子a是:
# Ruby
if not defined? a
a = nil
end
if not a
a = 10
end
Run Code Online (Sandbox Code Playgroud)
在一天结束时,||=操作符不能以任何"Pythonic"方式完全转换为Python,因为它依赖于Ruby中的底层变量生成.
在python中没有特别优雅的方式,因为让自己进入一个你不知道变量是否存在的情况并不是特别优雅.但是,这似乎最接近:
try:
var
except NameError:
var = var_new
Run Code Online (Sandbox Code Playgroud)
我不熟悉||=ruby中的运算符,但是根据你所描述的,这个块应该具有正确的行为.也就是说,var如果它是一个已经存在的变量,我们保持绑定,var_new否则我们将其设置为.
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |