Python Vs Perl6

zip()

# OUTPUT
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

Python

questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
     print 'What is your {0}?  It is {1}.'.format(q, a)

Perl6

my @questions = ('name', ' quest',  'favorite color');
my @answers = ("lancelot", "the holy grail", "blue");
for zip(@questions, @answers) -> ($question, $answer) {
    say "What is you $question?  It is $answer";
}

按照日期字符串排序

给定一个列表,按照日期字符串进行排序:

list = [ {'date': '2010-04-01','people': 1047, 'hits': 4522},  
         {'date': '2010-04-03', 'people': 617, 'hits': 2582},  
         {'date': '2010-04-02', 'people': 736, 'hits': 3277}
       ]

Python

import operator 
list = [ {'date': '2010-04-01','people': 1047, 'hits': 4522},  
         {'date': '2010-04-03', 'people': 617, 'hits': 2582},  
         {'date': '2010-04-02', 'people': 736, 'hits': 3277}
       ] 
sorted( list, key = operator.itemgetter('date') )

输出(默认是升序):

{'date': '2010-04-01', 'hits': 4522, 'people': 1047},\
{'date': '2010-04-02', 'hits': 3277, 'people': 736}, \
{'date': '2010-04-03', 'hits': 2582, 'people': 617}

Perl6

my @days = Date.new('2005-02-28') .. Date.new('2016-09-22');
my @list = "/perl6/" <<~<< @days;
 
# 根据日期进行排序

# 降序
my @sorted_des = @list.sort: { $^b.split('/')[2] leg $^a.split('/')[2] }
say .key, "\n", .values for @sorted_des.classy(*.substr(7,7)).sort( { .key } )

# 如果对想对生成的散列再做一下加工(计算每个月有多少天)
# 就对生成的散列使用 map, 利用散列的键和值重新做一个映射
say .key, " ", ~.values for @sorted_des.classy(*.substr(7,7)).map( {   .key => .value.elems  } ).sort( { .key } )
say .key, " ", ~.values for @sorted_des.classy(*.substr(7,7)).map( { ; .key => .value.elems  } ).sort( { .key } )
say .key, " ", ~.values for @sorted_des.classy(*.substr(7,7)).map( {   .key => .value.elems; } ).sort( { .key } )


# 升序
# @list.sort: { .split('/')[2] };
# @list.sort: { $^a.split('/')[2] leg $^b.split('/')[2] }

统计字符串各字符出现的次数

abcdefghijklmnopqrstuvwxyz...abcdefghijklmnopqrstuvwxyz(1千万个a-z,不可直接a=1千万......)中每个字母的个数。要求除了更好的方式(如更加Pythonic的方式),还要计算越快越好,并打印出代码执行时间。

Python

# -*- coding: utf-8 -*-
"""
下面这个例子就是使用 Counter 模块统计一段句子里面所有字符出现次数
"""
from collections import Counter

s = "sssdfdfwewqewfgfhghghgfhgfh10000000"
c = Counter(s)

# 获取出现频率最高的5个字符
print(c.most_common(5))

# Result:
[(' ', 54), ('e', 32), ('s', 25), ('a', 24), ('t', 24)]

Perl6

my $a = ('a' .. 'z').roll(10000000);
say .key, ' => ', .value for $a.cache.classify(*.Str).map({.key => .value.elems}).sort({-.value});
say now - INIT now;

输出:(当然现在速度不能忍受 180s左右)

q => 385797
a => 385584
o => 385573
e => 385391
c => 385286
p => 385222
...

获取类的所有方法

Python

for item in dir("hello good people"): print(item)

Perl6

for "hello good people".^methods -> $method { say $method }

调用类中的每个方法:

import copy

def all_the_methods(thing):
    for meth in dir(thing):
        if meth.startswith('_'):
            print("Skipping " + meth)
            continue

        try:
            print(meth, ' => ', getattr(copy.copy(thing), meth)())
        except Exception as e:
            print(Exception, ":", e)


all_the_methods("hello good people")

在 Python 中要将字符串当作函数名 使用时, 请使用 getattr(调用者, 字符串方法)。 具体请参考 通过函数名的字符串来调用这个函数。来看看这一段方法的输出:

Skipping __add__
...
capitalize  =>  Hello good people
islower  =>  True
...
lower  =>  hello good people
split  =>  ['hello', 'good', 'people']
<class 'Exception'> : translate() takes exactly one argument (0 given)
...

Perl6

sub all-the-methods($thing) {
  for $thing.^methods -> $method {
    say "{$method.name} => {$thing.clone.$method.gist}";
    CATCH { default { say "{$method.name} => ERROR" } }
  }
}

all-the-methods <this is words>;
all-the-methods "hello little fishies!";

接收一系列方法, 遍历这些方法并一次性调用它们。在这里我们做了一次克隆(.clone), 以使如果它是可变函数的话我们将在它的一个副本上工作。注意, .clone 不是 深度复制, 所以它虽然能在我这个简单的字符串例子中工作但是它可能在其它东西上没有作用。.gist 调用给了我们结果一个很好的可打印版本。

我们不用参数调用那些方法, 很多方法对不带参数不感冒。所以这儿我们提供了一个 CATCH 块以打印出通用信息 -- 它在一个循环里面所以在捕获一个错误之后它会跳转到下一个方法上。

这儿是输出:

# <this is words>
permutations => ((this is words) (this words is) (is this words) (is words this) (words this is) (words is this))
join => thisiswords
pick => is
roll => words
reverse => (words is this)
rotate => (is words this)
append => ERROR

# "hello little fishies!"
ords => (104 101 108 108 111 32 108 105 116 116 108 101 32 102 105 115 104 105 101 115 33)
wordcase => Hello Little Fishies!
uc => HELLO LITTLE FISHIES!
flip => !seihsif elttil olleh
chop => hello little fishies
contains => ERROR

很多函数的结果是 ERROR, 特别是那些讨厌的接收某种参数的方法。然而, 这些不带参数的很多方法能正常工作并返回某些值。原文All_The_Methods

时髦的过滤函数

Python

for f in filter(lambda f: f(-1)>=f(1),
                [lambda x:x, lambda x:x**2, lambda x:x**3]):
    for x in range(-10, 11):
        print x, f(x)

Perl6

for (* ** 1, * ** 2, * ** 3).grep({ $_.(-1) >= $_.(1) }) -> $f {
  for -10 .. 10 -> $x {
    say "$x: { $f.($x) }"
  }
}

Whatever-Star 等价于:

# Whatever-Star notation
* ** 3

# Pointy-block notation
-> $x { $x ** 3 }

# Subref notation
sub ($x) { $x ** 3 }

上面的例子打印:

-10: 100
-9: 81
-8: 64
-7: 49
-6: 36
-5: 25
-4: 16
-3: 9
-2: 4
-1: 1
0: 0
1: 1
2: 4
3: 9
4: 16
5: 25
6: 36
7: 49
8: 64
9: 81
10: 100
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 3,616评论 0 7
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,211评论 0 4
  • 要点: 函数式编程:注意不是“函数编程”,多了一个“式” 模块:如何使用模块 面向对象编程:面向对象的概念、属性、...
    victorsungo阅读 1,461评论 0 6
  • 从基因的角度看,人类的基因就像是程序代码,里面已经写好了所有的程序。这些程序包括是男是女,整个脸怎么长,有没缺陷,...
    飞鸟不急阅读 407评论 0 2
  • 一只装满情感的瓶子 做朋友便对朋友掏心掏肺 然而一味的索取 瓶子也会伤心的 瓶子和海绵做了朋友之后,海绵总是一直索...
    秦姑娘说阅读 392评论 5 1