🐣

Ruby使いがPythonを触ってみたメモ

2023/08/26に公開

はじめてPythonを触ってみて、「こう書くんだ〜」と思ったことを雑にメモしていきます🐰
Pythonもさくさく書けて楽しい💖

記載しているコードはすべて以下のバージョンにて動作確認済みです🕊️
・Python 3.9.6
・ruby 3.2.2 / Rails 7.0.7

フォーマット

ブロックをコロンとインデントで書く

python
def sum(a, b):
  return a + b

クラスや関数を定義するときは、空行が2つ必要

1行目に定義するときは空行はなくて大丈夫。
空行が足りないと E302 expected 2 blank lines って言われちゃう。

python
def sum(a, b):
  return a + b


def multiply(a, b):
  return a * b

関数の引数と返り値に型を指定できる

python
def sum(a: int, b: int) -> int:
  return a + b

コードの後ろにコメントをつけるときは、空白が2つ必要

空白が足りないと E261 at least two spaces before inline comment って言われちゃう。

python
import time

time.time()  # 秒

コメントの先頭に空白がないとだめ

E265 block comment should start with '# ' って言ってくれる。
Rubyは人によってスペースがなかったりすことがあって少し悲しいから、これは嬉しい💞

python
#これは#の後ろにスペースがなくて怒られちゃうコメントの書き方

コメントの # は1つじゃないとだめ

E266 too many leading '#' for block comment って言われちゃう。

python
## これは#が多いよって怒られちゃうコメントの書き方

文字列内での変数展開

ruby
name = 'Hana'
message = "Hello, #{name}!"
# => "Hello, Hana!"
python
name = 'Hana'
message = f"Hello, {name}!"
# => "Hello, Hana!"

値の型クラスを確認

ruby
1.class # => Integer
'a'.class # => String
true.class # => TrueClass
python
type(1)  # => <class 'int'>
type('a')  # => <class 'str'>
type(True)  # => <class 'bool'>

NULLが None

python
type(None)  # => <class 'NoneType'>

判定

後置ifはないけど似たようなことはできる

ruby
# 250円以上なら100円引き
price = 500
price -= 100 if price >= 250
puts price # => 400
python
# 250円以上なら100円引き
price = 500
price -= 100 if price >= 250 else 0
print(price)  # => 400

elseの後ろが返り値なの、新鮮!

三項演算子がない

ruby
size = num > 100 ? 'large' : 'medium'
python
size = 'large' if num > 100 else 'medium'

配列の空チェック

ruby
[].empty? # => true
[].blank? # => true
python
not []  # => True

unless はない

ruby
unless 1 == 0
  puts 'true'
# => true

if not 1 == 0
  puts 'true'
end
# => true
python
if not 1 == 0:
  print('true')
# => true

include?

ruby
[1, 2, 3].include?(2) # => true
[1, 2, 3].include?(0) # => false
python
2 in [1, 2, 3]  # => True
0 in [1, 2, 3]  # => False

演算

++ -- はPythonもできない

Rubyと同じく代入演算子を使う。

python
num += 1  # num++ とは書けない

// 演算子で切り捨て除算ができる

python
15 // 2  # => 7

RubyはIntegerをIntegerで割ると結果もIntegerなので小数点以下は切り捨てられる。

ruby
15 / 2 # => 7
15 / 2.0 # => 7.5
(15 / 2.0).floor # => 7

配列

リスト内包表記

ruby
nums = (0..9).map { |n| n }
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
python
nums = [n for n in range(10)]
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

要素の追加

ruby
nums = [1, 3]
nums << 5
# => [1, 3, 5]
python
nums = [1, 3]
nums.append(5)
# => [1, 3, 5]

フィルタリング

ruby
even_nums = (0..9).select { |n| n.even? }
# => [0, 2, 4, 6, 8]
python
even_nums = [n for n in range(10) if n % 2 == 0]
# => [0, 2, 4, 6, 8]

ループ

python
for i in range(3):
  print(i)
# => 0
# => 1
# => 2
ruby
3.times do |i|
  puts i
end
# => 0
# => 1
# => 2
python
for _ in range(3):
  print('hello')
# => hello
# => hello
# => hello
ruby
3.times do |_|
  puts 'hello'
end
# => hello
# => hello
# => hello
python
nums = [1, 3, 5]
for n in nums:
  print(n)
# => 1
# => 3
# => 5
ruby
nums = [1, 3, 5]
nums.each do |n|
  puts n
end
# => 1
# => 3
# => 5
python
nums = [1, 3, 5]
for i, n in enumerate(nums):
  print(i, n)
# => 0 1
# => 1 3
# => 2 5
ruby
nums = [1, 3, 5]
nums.each_with_index do |n, i|
  puts "#{i} #{n}"
end
# => 0 1
# => 1 3
# => 2 5

Discussion