我非常了解Ruby.我相信我现在可能需要学习Python.对于那些了解两者的人来说,两者之间的概念是相似的,哪些是不同的?
我正在寻找一个类似于我为JavaScripters学习Lua所做的入门的列表:简单的事情,如空白意义和循环结构; nilPython中的名称,以及哪些值被视为"truthy"; 是不是习惯于使用相当于map和each/或笨拙的 东西 ,那些大概是笨拙的常规吗?
如果我得到了各种各样的答案,我很乐意将它们汇总到社区维基中.或者你们都可以互相争斗,试图创造一个真正的综合名单.
编辑:要清楚,我的目标是"正确的"和惯用的Python.如果有一个Python的等价物inject,但是没有人使用它,因为有更好/不同的方法来实现迭代列表和累积结果的常用功能,我想知道你是如何做的.也许我会用一系列共同目标更新这个问题,如何在Ruby中实现它们,并询问Python中的等价物.
Python和Ruby通常被认为是具有相似表现力和力量的近亲(虽然具有完全不同的历史包袱).但有些人认为Rails框架的巨大成功确实与它所构建的语言有很大关系:Ruby本身.那么为什么Ruby比Python更适合这样的框架呢?
我将在大学学习Ruby,Haskell和Prolog.现在,我想知道什么应该得到我的大部分注意力.我有半年的时间来做这三个,这意味着我需要决定一种语言来获得我的课外时间.其他我将学到的就是在课程中做得非常好.
我对Haskell和Prolog很熟悉,知道学习它们会教会我一些非常重要的计算机科学概念.我不太确定红宝石.
通过一些教程和介绍,我得到的印象是红宝石有很多浅薄的魔力.现在我问红宝石人:在我花了半年的时间学习它之后,我决定再也不用它了,我会得到什么,Python还没教过我.
这个问题并非旨在为红宝石"提出理由",尽管我意识到这是一个很有争议的潜在话题.
我现在使用Python进行所有CS工作.我也用它做了很多函数式编程.我也已经非常熟悉面向对象编程(在Java,Python和C#中).正如我所说,我会用Prolog做一些逻辑编程.
然后留给Ruby教我什么?
进一步淡化问题:
我对编写有趣的程序或酷的Web应用程序不感兴趣.我只对计算机科学课感兴趣.实现算法,数据结构等.(虽然玩得开心肯定不会受伤)
理想情况下,所讨论的概念需要在大约1.000小时内可以学习.
我对Rails一点也不感兴趣.在这种情况下,任何隐藏复杂性的技术都是有害的.
我无法帮助这个问题具有争议性.但是这个问题的理想答案将提到一个非常重要的理论计算机科学概念,红宝石帮助程序员使用和理解,以获得科学的辅助知识.
我想到的候选人是元编程和多线程.我不知道红宝石是否特别适合学习其中任何一种.
是否有可能将proc风味的Proc转换为lambda风味的Proc?
有点惊讶,这不起作用,至少在1.9.2:
my_proc = proc {|x| x}
my_lambda = lambda &p
my_lambda.lambda? # => false!
Run Code Online (Sandbox Code Playgroud) 我正在考虑学习ruby和python一点点,我想到了,因为ruby/python有什么用?什么时候使用ruby和python,或者什么ruby/python不适合?:)
我应该用这些语言做什么?
谢谢
一直在尝试在jupyter笔记本中使用Ruby.使用Python我可以做到这一点
import matplotlib.image as mpimg
Run Code Online (Sandbox Code Playgroud)
有没有人知道Ruby的等价物,我还没能在任何iRuby或sciruby文档中找到它?
为了澄清一点,在我的gemfile中我有这个
gem 'iruby'
gem 'cztop'
gem 'matplotlib'
Run Code Online (Sandbox Code Playgroud)
但似乎无法访问我用于在python中使用的image部分matplotlib.
我试图找到Ruby的版本,在Python中,我会这样写
#importing some useful packages
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
...
%matplotlib inline
#reading in an image
image = mpimg.imread('test_images/solidWhiteRight.jpg')
#printing out some stats and plotting
print('This image is:', type(image), 'with dimesions:', image.shape)
plt.imshow(image) #call as plt.imshow(gray, cmap='gray') to show a grayscaled image
Run Code Online (Sandbox Code Playgroud)
非常感谢任何建议
在Ruby中,一切都应该是一个对象.但是我有一个很大的问题,就是通常的方式来定义函数对象
def f
"foo"
end
Run Code Online (Sandbox Code Playgroud)
与Python不同,f是函数结果,而不是函数本身.因此,f(),f,ObjectSpace.f都是"foo".还f.methods返回字符串方法列表.
如何访问函数对象本身?
我希望只从需要许多物品的发电机中获益.
在以下代码中
a, b, c = itertools.count()
Run Code Online (Sandbox Code Playgroud)
我收到这个例外:
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
我已经看过几个相关的问题,但是我对发电机剩余的项目没有兴趣,我只想收到我要求的数量,而不提前提供这个数量.
在我看来,Python确定了你想要的项目数,但后来尝试阅读和存储超过该数量(生成ValueError).
如何在不传递我想要的物品数量的情况下,只能生产出我需要的物品数量?
为了帮助理解我认为应该可能的近似行为,这里是一个代码示例:
def unpack_seq(ctx, items, seq):
for name in items:
setattr(ctx, name, seq.next())
import itertools, sys
unpack_seq(sys.modules[__name__], ["a", "b", "c"], itertools.count())
print a, b, c
Run Code Online (Sandbox Code Playgroud)
如果您可以改进此代码,请执行.
Alex Martelli的回答告诉我,字节op UNPACK_SEQUENCE负责限制.我不明白为什么这个操作应该要求生成的序列在长度上也必须完全匹配.
请注意,Python 3具有不同的解包语法,这可能会使此问题中的技术讨论无效.
ruby ×7
python ×4
function ×1
generator ×1
lambda ×1
matplotlib ×1
object ×1
proc-object ×1
python-2.x ×1
yield ×1