Ruby で書くとき、非常によく使う syntax の一つ。
str = open('/etc/hosts').read if m = str.match(/local/) puts m[0] end
❯ ruby if-assignment-in-conditional.rb local
正式名称がわからず、検索に苦労したが、assignment in a conditional clause などと呼ぶらしい。
Python で同じ書き方をすると syntax error になる。
import re with open('/etc/hosts') as f: if m = re.search(r'local', f.read()): print(m[0])
❯ python3 if-assignment-in-conditional.py File "if-assignment-in-conditional.py", line 3 if m = re.search(r'local', f.read()): ^ SyntaxError: invalid syntax
Python 3.8 からは、似てるけどちょっと違う syntax で同様のことができるようになったらしい。こちらは正式(公式)な呼び名があって、Assignment Expression と呼ぶらしい。
python - Can we have assignment in a condition? - Stack Overflow
PEP 572 -- Assignment Expressions | Python.org
import re with open('/etc/hosts') as f: if m := re.search(r'local', f.read()): print(m[0])
❯ python3 if-assignment-in-conditional-3.8.py local