🐣
Ruby使いがPythonを触ってみたメモ
はじめて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'>
None
NULLが 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