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";
}

按照日期字符串排序

給定一個(gè)列表,按照日期字符串進(jìn)行排序:

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') )

輸出(默認(rèn)是升序):

{'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;
 
# 根據(jù)日期進(jìn)行排序

# 降序
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 } )

# 如果對(duì)想對(duì)生成的散列再做一下加工(計(jì)算每個(gè)月有多少天)
# 就對(duì)生成的散列使用 map, 利用散列的鍵和值重新做一個(gè)映射
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] }

統(tǒng)計(jì)字符串各字符出現(xiàn)的次數(shù)

abcdefghijklmnopqrstuvwxyz...abcdefghijklmnopqrstuvwxyz(1千萬個(gè)a-z声搁,不可直接a=1千萬......)中每個(gè)字母的個(gè)數(shù)。要求除了更好的方式(如更加Pythonic的方式),還要計(jì)算越快越好琉朽,并打印出代碼執(zhí)行時(shí)間域帐。

Python

# -*- coding: utf-8 -*-
"""
下面這個(gè)例子就是使用 Counter 模塊統(tǒng)計(jì)一段句子里面所有字符出現(xiàn)次數(shù)
"""
from collections import Counter

s = "sssdfdfwewqewfgfhghghgfhgfh10000000"
c = Counter(s)

# 獲取出現(xiàn)頻率最高的5個(gè)字符
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;

輸出:(當(dāng)然現(xiàn)在速度不能忍受 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 }

調(diào)用類中的每個(gè)方法:

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 中要將字符串當(dāng)作函數(shù)名 使用時(shí), 請(qǐng)使用 getattr(調(diào)用者, 字符串方法)妙黍。 具體請(qǐng)參考 通過函數(shù)名的字符串來調(diào)用這個(gè)函數(shù)悴侵。來看看這一段方法的輸出:

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!";

接收一系列方法, 遍歷這些方法并一次性調(diào)用它們。在這里我們做了一次克隆(.clone), 以使如果它是可變函數(shù)的話我們將在它的一個(gè)副本上工作拭嫁。注意, .clone 不是 深度復(fù)制, 所以它雖然能在我這個(gè)簡(jiǎn)單的字符串例子中工作但是它可能在其它東西上沒有作用可免。.gist 調(diào)用給了我們結(jié)果一個(gè)很好的可打印版本。

我們不用參數(shù)調(diào)用那些方法, 很多方法對(duì)不帶參數(shù)不感冒做粤。所以這兒我們提供了一個(gè) CATCH 塊以打印出通用信息 -- 它在一個(gè)循環(huán)里面所以在捕獲一個(gè)錯(cuò)誤之后它會(huì)跳轉(zhuǎn)到下一個(gè)方法上巴元。

這兒是輸出:

# <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

很多函數(shù)的結(jié)果是 ERROR, 特別是那些討厭的接收某種參數(shù)的方法。然而, 這些不帶參數(shù)的很多方法能正常工作并返回某些值驮宴。原文All_The_Methods

時(shí)髦的過濾函數(shù)

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 等價(jià)于:

# 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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市呕缭,隨后出現(xiàn)的幾起案子堵泽,更是在濱河造成了極大的恐慌,老刑警劉巖恢总,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迎罗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡片仿,警方通過查閱死者的電腦和手機(jī)纹安,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厢岂,你說我怎么就攤上這事光督。” “怎么了塔粒?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵结借,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我卒茬,道長(zhǎng)船老,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任圃酵,我火速辦了婚禮柳畔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郭赐。我一直安慰自己薪韩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布堪置。 她就那樣靜靜地躺著躬存,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舀锨。 梳的紋絲不亂的頭發(fā)上岭洲,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音坎匿,去河邊找鬼盾剩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛替蔬,可吹牛的內(nèi)容都是我干的告私。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼承桥,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼驻粟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凶异,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤蜀撑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后剩彬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酷麦,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年喉恋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沃饶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片母廷。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糊肤,靈堂內(nèi)的尸體忽然破棺而出琴昆,到底是詐尸還是另有隱情,我是刑警寧澤轩褐,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布椎咧,位于F島的核電站,受9級(jí)特大地震影響把介,放射性物質(zhì)發(fā)生泄漏勤讽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一拗踢、第九天 我趴在偏房一處隱蔽的房頂上張望脚牍。 院中可真熱鬧,春花似錦巢墅、人聲如沸诸狭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驯遇。三九已至,卻和暖如春蓄髓,著一層夾襖步出監(jiān)牢的瞬間叉庐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工会喝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陡叠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓肢执,卻偏偏與公主長(zhǎng)得像枉阵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子预茄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語閱讀 3,658評(píng)論 0 7
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,233評(píng)論 0 4
  • 要點(diǎn): 函數(shù)式編程:注意不是“函數(shù)編程”兴溜,多了一個(gè)“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍睢傩浴?..
    victorsungo閱讀 1,501評(píng)論 0 6
  • 從基因的角度看耻陕,人類的基因就像是程序代碼昵慌,里面已經(jīng)寫好了所有的程序。這些程序包括是男是女淮蜈,整個(gè)臉怎么長(zhǎng),有沒缺陷已卷,...
    飛鳥不急閱讀 413評(píng)論 0 2
  • 一只裝滿情感的瓶子 做朋友便對(duì)朋友掏心掏肺 然而一味的索取 瓶子也會(huì)傷心的 瓶子和海綿做了朋友之后梧田,海綿總是一直索...
    秦姑娘說閱讀 397評(píng)論 5 1