python和ruby文法的簡單對比,pythonruby文法

來源:互聯網
上載者:User

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 一般後跟一個符號參數,定義一個或多個可讀寫的屬性,用於指示為符號參數產生讀寫方法。



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.