python和ruby语法的简单对比

来源:互联网 发布:小学生必读书目 知乎 编辑:程序博客网 时间:2024/05/13 16:35

进入交互解释器

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 一般后跟一个符号参数,定义一个或多个可读写的属性,用于指示为符号参数产生读写方法。



3 1
原创粉丝点击