python和ruby文法的簡單對比,pythonruby文法
進入互動解譯器
python
irb / pry
設定編碼#coding=utf-8
#coding:utf-8
包管理easy_install/pip gem
pip install Markdown
gem install Markdown
注釋python單行注釋# 開頭
python多行注釋使用三個單引號(''')或三個單引號(""")。
'''
多行注釋1
多行注釋2
'''
ruby單行注釋用#開頭
ruby多行注釋使用 =begin =end
=begin
多行注釋1
多行注釋2
=end
資料類型python的資料類型有:數字、字串、列表、元組、字典等
ruby的資料類型有:數字、字串、數組、雜湊表、區間、符號等
ruby的區間
.. 閉合區間, 包括右端的值
...半閉合區間, 不包括右端的值
String
都可以用單引號或者雙引號,s = 'hello,dear!!!'
python
從左至右索引預設0開始的,最大範圍是字串長度少1
從右至左索引預設-1開始的,最大範圍是字串開頭
擷取字串 s[頭下標:尾下標] 不包含尾下標元素
ruby
擷取字串 s[頭下標,長度]
擷取字串 s[頭下標..尾下標] 包含尾下標元素 ;s[頭下標...尾下標] 不包含尾下標元素
Array
都可以用[],array = [1,2,3,4]
python擷取子列表
array[0] 第一個元素
array[1:] 第二個到末尾的所有元素
array[1:3] 第二個到第三個元素(第二個到第四個之間的元素,不包括第四個)
ruby擷取子列表
array[0] 第一個元素
array[1..-1] 第二個到末尾的所有元素
array[1..3] 第二個到第四個元素(第二個到第四個之間的元素,包括第四個)
array[1...3] 第二個到第三個元素(第二個到第四個之間的元素,不包括第四個)
python的元組
元組類似於List(列表),用"()"標識,內部元素用逗號隔開。但是元素不能二次賦值,相當於唯讀列表
tuple = (1,2,3,4)
雜湊
python
dic = {"k1":"v1","k2":"v2"}
dic["k1"]
ruby
dic = {"k1" => 'v1','k2' => 'v2'}
dic = {:k1 => 'v1',:k2 => 'v2'}
dic = {k1: 'v1',k2: 'v2'}
dic["k1"]
dic[:k1]
條件判斷python程式語言指定 0 、null、false 為假
ruby程式語言指定 nil、false 為假
python
if condition :
code..
elif codition :
code..
else :
code..
ruby
if/unless condition [then]
code..
elsif condition [then]
code..
else
code..
end
簡單語句
python
if codition : code
ruby
code if condition
迴圈python
while condition :
code..
else :
code..
for var in sequ:
code..
else :
code..
ruby
while conditin [do]
code
end
for var in sequ [do]
code
end
函數python
函數代碼塊以def關鍵詞開頭,後接函數標識符名稱和圓括弧()。
任何傳入參數和自變數必須放在圓括弧中間。圓括弧之間可以用於定義參數。
函數的第一行語句可以選擇性地使用文檔字串—用於存放函數說明。
函數內容以冒號起始,並且縮排。
Return[exp]結束函數,選擇性地返回一個值給調用方。不帶運算式的return相當於返回 None。
所有參數(自變數)在Python裡都是按引用傳遞。如果你在函數裡修改了參數,那麼在調用這個函數的函數裡,原始的參數也被改變了。
def say(sth,age = 10,*var_params):
'函數說明文檔'
code
return [exp]
匿名函數
python 使用 lambda 來建立匿名函數。
lambda只是一個運算式,函數體比def簡單很多。
lambda的主體是一個運算式,而不是一個代碼塊。僅僅能在lambda運算式中封裝有限的邏輯進去。
lambda [arg1 [,arg2,.....argn]]:expression
ruby
Ruby 中的每個方法預設都會返回一個值,這個返回的值是最後一個語句的值.
def say(sth,age = 10,*var_params)
code
end
塊
在Ruby中,{}或do...end之間的代碼是一個代碼塊。
代碼塊只能出現在一個方法的後邊,它緊接在方法最後一個參數的同一行上,一般由yield關鍵字調用代碼塊中的代碼。
模組python
模組讓你能夠有邏輯地組織你的Python程式碼片段。
把相關的代碼分配到一個 模組裡能讓你的代碼更好用,更易懂。
模組也是Python對象,具有隨機的名字屬性用來綁定或引用。
簡單地說,模組就是一個儲存了Python代碼的檔案。模組能定義函數,類和變數。模組裡也能包含可執行檔代碼
ruby
模組(Module)是一種把方法、類和常量組合在一起的方式。模組(Module)為您提供了兩大好處。
模組提供了一個命名空間和避免名字衝突。
模組實現了 mixin 裝置。
模組(Module)定義了一個命名空間,相當於一個沙箱,在裡邊您的方法和常量不會與其他地方的方法常量衝突。
類python
如果一個 Python 函數,類方法,或屬性的名字以兩個底線開始 (但不是結束),它是私人的;其它所有的都是公有的。
類方法
Python2.2以後可以使用@classmethod裝飾器來建立類方法.其第一個參數是類,約定寫為cls
執行個體方法
當定義你自已的方法時,你必須將 self 作為每個方法的第一個參數列出,包括 __init__。
在 Python 中沒有常量
class Vector:
class_var = 0#類變數
def __init__(self,a,b):
'建構函式'
self.instance_var = a #執行個體變數
code
def __del__(self):
'解構函式'
code
@classmethod
def say(cls):
code..
繼承
python
支援多繼承
class A:
...
class B:
...
class C(A,B):
...
Ruby
Ruby中一切都是對象,包括一個常數.
比如可以用.class屬性來查看一個對象的類型,你可以看下1.class,會發現常數1的類型是Fixnum,1不過是Fixnum的一個執行個體。
Ruby中的類以class開始 以end結束,類名首字母的約定是大寫。
Ruby中的方法以def開始 以end結束,方法名首字母的約定是小寫。
Ruby中的局部變數名首字母的約定是小寫。
Ruby中的建構函式名稱為initialize。
Ruby中的成員變數(執行個體變數)前置@符,在initialize裡進行聲明與初始化。
Ruby中的屬性用attr, attr_reader, attr_writer, attr_accessor。
Ruby中的全域變數前置$符。
Ruby中的常數(常量)用大寫字母開頭,約定是全部大寫。
initalize方法
當Ruby建立一個新對象時,它總是會尋找一個名為 initialize 的方法並執行它.因此,我們可以簡單通過一個initialize方法向實變數中加入預設值。
class Person
def initialize()
puts "hello!"
end
# def initialize #()省略一樣
# puts "hello!"
# end
#參數預設值
# def initialize (param = "1900lab") # 參數帶有預設值
# puts "hello! " + param
# end
#可變長參數
def youInput(*names)
puts "input #{names.join(",")}!"
end
end
p = Person.new()
和 p = Person.new 一樣,沒有參數()可以省略。
屬性
目的是快速產生讀寫方法
attr :attr1, key
attr_reader :attr1, :attr2
attr_writer :attr1, :attr2
attr_accessor :attr1, :attr2
attr 一般後跟一個符號參數, 第二個參數是一個 bool 參數,用於指示是否為符號參數產生寫方法。它的預設值是 false,只產生讀方法,不產生寫方法。
attr_reader 一般後跟一個符號參數,定義一個或多個唯讀屬性,用於指示為符號參數產生讀方法。
attr_writer 一般後跟一個符號參數,定義一個或多個唯寫的屬性,用於指示為符號參數產生寫方法。
attr_accessor 一般後跟一個符號參數,定義一個或多個可讀寫的屬性,用於指示為符號參數產生讀寫方法。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。