Help us understand the problem. What is going on with this article?

PythonistaのためのJulia入門

More than 5 years have passed since last update.

何番煎じって感じのネタですけど...
Pythonよりも速く、書き方がPythonに近く、最近私の中で注目度No.1の言語です。

今回は、PythonistaがJuliaを使うにあたって覚える必要のある構文の違いを、PythonとJuliaで比較して紹介します。

Juliaの環境構築はこちらからどうぞ

基礎知識

コードには見やすいようにインデントを付けていますが、インデントは動作に関係しません。

julia
for n = 1:10
println(n)
end

1行で書く場合は;が必要です。

julia
for n = 1:10;println(n);end

またlistのindexは0からではなく 1 からです。

julia
julia> List = [0, 1, 2]
3-element Array{Int64,1}:
 0
 1
 2

julia> println(List[1])
0

Hello World!

python
print "Hello World!"
julia
println("Hello World!")

for Loop statements

python
for i in range(10):
    print i
julia
for n = 0:9
    println(n)
end

If statements

python
hoge = "hoge"
if hoge[0] == 'h' and hoge[1:] == "oge":
    print "hoge is hoge"
elif hoge == "huge" or hoge == "hige":
    print "hoge is huge or hige"
else:
    print "hoge is", hoge

Juliaにおけるand&&or||です。

julia
hoge = "hoge"
if hoge[1] == 'h' && hoge[2:4] == "oge"
    println("hoge is hoge")
elseif hoge == "huge" || hoge == "hige"
    println("hoge is huge or hige")
else
    println("hoge is ", hoge)
end

hoge[2:]でも動くんですが、 WARNING: deprecated syntax "x[i:]". が出るのでhoge[2:4]と書いています。

Exception Handling (Try-Except)

python
List = [0, 1, 2]
try:
    print List[3]
except IndexError as e:
    print e
julia
List = [0, 1, 2]
try
    println(List[4])
catch e
    if isa(e, BoundsError) # "BoundsError"はPythonで言う"IndexError"です
        println(e)
    end
end

Functions

python
def huge(x, y):
    z = x + y
    return z
julia
function huge(x, y)
    x + y
end

もしくは

julia
function huge(x, y)
    z = x + y
    return z
end

Anonymous Functions

python
z = lambda x, y : x + y 
z(1, 2)
julia
z = (x, y) -> x + y
z(1, 2)

Working with Files

Read

python
with open("output.txt") as f:
    for line in f:
        print line.rstrip() # Juliaの出力に合わせるため改行コードを削除
julia
open("output.txt") do f
    lines = readlines(f)
    for line in lines
        print(line) # Juliaのprint()には改行コードが入りません
    end
end

もしくは

julia
open("output.txt") do f
    for line in eachline(f)
        print(line)
    end
end

Write

python
with open("output.txt", "w") as f:
    for i in range(10):
        f.write(str(i) + "\n")
julia
open("output.txt", "w") do f
    for n = 0:9
        write(f, string(n)"\n")
    end
end

List complemention

python
[[n**i for n in range(10)] for i in range(5)]
julia
[[n^i for n = 0:9] for i = 0:4]

各要素に10を足したリストを作成する

python
[n+10 for n in range(10)]
julia
10+[0:9]

細かい話

printf

python
Integer = 2
String  = "hoge"
print("Integer: %d String: %s" % (Integer, String))
julia
Integer = 2
String  = "hoge"
@printf "Integer: %d String: %s" Integer String

strip()

python
>>> "hoge\n".rstrip()
'hoge'
julia
julia> rstrip("hoge\n", '\n')
"hoge"

その他Juliaの良いところ

infix form

julia
julia> +(10, 20, 30)
60

julia> *(10, 20, 30)
6000

もしくは

julia
julia> f = +
+ (generic function with 117 methods)

julia> f(10, 20, 30)
60

julia> f = *
* (generic function with 115 methods)

julia> f(10, 20, 30)
6000

inverse divide

julia
julia> 1/3
0.3333333333333333

julia> 3\1
0.3333333333333333

Function chaining

julia
julia> [0:5] |> x -> x.^x |> sum
3414

参考

Julia Documentation

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした