python和ruby语法的简单对比

进入交互解释器

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 17:04:39

python和ruby语法的简单对比的相关文章

ruby和Python简单对比

前不久学了ruby,发现ruby和Python非常像,于是自个测试对比了下,测完了才知道网上有现成的……下面是测试结果 序列(包括列表和元组等)有分片的特点:可能会比较方便的提取其中特定元素,暂时感觉没什么用:注意是用:分开两个数字.负号表示倒数第几个 留空表示开头或者结尾,python中的分片可以等距分割,格式是两个冒号 ruby则是[4...7]这样用两个或者三个句号分片,也可以用[1,2]这种逗号 不同的是,ruby似乎不能等距分割,而且ruby逗号方式下两个参数的意义是第一个是起始元素序

Python 和 Ruby 的对比

一.异同对比选择 1.Python和ruby的相同点: 都强调语法简单,都具有更一般的表达方式.python是缩进,ruby是类basic的表达.都大量减少了符号. 都是动态数据类型.都是有丰富的数据结构. 都具有c语言扩展能力,都具有可移植性,比perl的可移植性更好.也都可以作为嵌入语言. 都是面向对象的语言,都可以作为大项目的开发工具. 都有丰富的库支持. 也有最宽松的版权许可,除了一些工具属于GNU世界. 都有lisp特色的eval函数,也都能把函数作为参数. 也有图形界面的ruby的专

php、python、ruby——web脚本语言的比较

原文地址:http://klau.si/php-vs-python-vs-ruby 摘要 在过去几年里,在web应用程序编程中,脚本语言变得越来越受欢迎.本论文试图在如今三种最受欢迎的语言:PHP.Python和Ruby中找到其中的差异.优点.缺点.很明显,他们有他们自己的观点和支持,所以要陈述客观事实并满足一种科学的方法是一项困难的任务.这三种语言将在web应用程序环境进行有关历史.进化.流行程度.语法.语义.功能.安全性和性能方面做评估.最后,一个最终的结论将建议最有前途的一种语言. 1.介

十分钟学习Python的进阶语法

(0)目录 VMware 下安装Ubuntu的吐血经历 零基础学习Shell编程 Linux下的makefile的妙用 Linux调试神器 -- gdb 十分钟学会Python的基本类型 分布式版本管理神器--GIT GIT文件的三种状态 & Git SSH秘钥问题 十分钟学习Python的进阶语法 配置SSH无密码访问及Linux热键.重启.kill进程 Java的不定长参数和Python的不定长参数对比 一:起因 (1)作为胶水语言的Python,可谓无处不在,快速开发原型网站:大数据处理等

Python 和 Ruby,该如何抉择?

打算学习一门脚本语言,但是不知道该选哪个,上网查找资料后,最终难以在Ruby和Python中抉择,于是列出其他人对的评价.选择.意见等,供自己和他人参考: 介于查找范围狭窄,带有主观方向,不一定全面,仅供参考,不喜勿喷! Python的优点: Python是一门值得学习的脚本语言; Ruby比Python新,因而Python支持更广泛,使用者也更多; Python是linux的首选脚本语言; Python几乎在所有的linux和其它操作系统都有实现; Python是用C编写的,起码不会比C更加难

每个程序员都应该学习使用Python或Ruby

如果你是个学生,你应该会C,C++和Java.还会一些VB,或C#/.NET.多少你还可能开发过一些Web网页,你知道一些HTML,CSS和JavaScript知识.总体上说,我们很难发现会有学生显露出掌握超出这几种语言范围外的语言的才能.这真让人遗憾,因为还有很多种编程语言,它们能让你成为一个更好的程序员. 在这篇文章里,我将会告诉你,为什么你一定要学习Python或Ruby语言. 跟C/C++/Java相比 — Python/Ruby能让你用少的多的多的代码写出相同的程序.有人计算过,Pyt

Python GUI编程各种实现的对比

Python GUI编程各种实现的对比 从 Python 语言的诞生之日起,就有许多优秀的 GUI 工具集整合到 Python 当中,这些优秀的 GUI 工具集,使得 Python 也可以在图形界面编程领域当中大展身手,由于 Python 的流行,许多应用程序都是由 Python 结合那些优秀的 GUI 工具集编写的.下面分别介绍 Python GUI 编程的各种实现,下面的许多内容都是来自维基百科(文章后面列出了参考),这里就当做是一个没有技术色彩的整合吧. 1.Tkinter 简单介绍: 是

【python】Redis介绍及简单使用

一.redis redis是一个key-value存储系统.和 Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是 原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redi

Java、C++、Python、Ruby、PHP、C#和JavaScript的理解

Java.C++.Python.Ruby.PHP.C#和JavaScript和日本动漫里的那些大家熟悉的动漫人物结合起来.依据他们的身世.个人经历来生动的表达各编程语言的发展历程.原文内容例如以下: Java 宛如宫泽贤治的<不畏风雨>中出现的.性格木讷的女孩子.从小就因为迟钝和大食量等特征被别人当作笨蛋,从小学入学開始进入田径部.坚持跑步.在中长跑中常常取得好成绩.给人以活泼的印象.是十分努力的女孩子. 她的家境并不算好.父亲Sun是有才干的艺术家,但不擅长理財.在她14岁的时候由于苦于借债