进入交互解释器
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 一般后跟一个符号参数,定义一个或多个可读写的属性,用于指示为符号参数产生读写方法。
版权声明:本文为博主原创文章,未经博主允许不得转载。