ssnau / blog

1 stars 0 forks source link

JavaScript to Python #1

Open ssnau opened 7 years ago

ssnau commented 7 years ago

Javascript to Python

数组

a = [1, 3, 6, "hello"]   # 声明
a[1:2]                   # slice
a[1:2] = [5, 3, 2]       # splice
a + [3,6]                # concat
a[len(a):] = [3,6]       # push.apply
a.append(5)              # push
a.pop()                  # pop,但返回是[5]
a.index(x)               # indexOf
a.sort                   # sort
a.reverse()              # reverse
len(a)                   # length

# non-javascript method
# 在指定位置插入一个元素
a.insert(0, 3)        
# 删除链表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误
a.remove(x)             
# 返回 x 在链表中出现的次数
a.list(x)

注意:

map / filter / reduce

## filter
>>> def f(x): return x % 3 == 0 or x % 5 == 0
...
>>> filter(f, range(2, 25))
[3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]

## map
>>> def cube(x): return x*x*x
...
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

## map 多个数组

>>> seq = range(8)
>>> def add(x, y): return x+y
...
>>> map(add, seq, seq)

## reduce

>>> def sum(seq):
...     def add(x,y): return x+y
...     return reduce(add, seq, 0)
...
>>> sum(range(1, 11))
55

但是用的更多的可能是列表推导式(其具有filter和map的功效):

squares = [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

[x for x in [4, -2 ,3 ] if x > 0]
[4, 3]

字典

# 几种声明方式
tel = {'jack': 4098, 'sape': 4139}
dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
dict(sape=4139, guido=4127, jack=4098)
# 操作
tel['guido'] = 4127                  # assign
del tel['sape']                      # delete
tel.keys()                           # Object.keys
'guido' in tel                       # hasOwnProperty

for遍历

for i in [1,3,6]:  # 遍历的是值,而非下标
  print(i)

for i, v in enumerate([2, 3, 6]):  # 遍历下标(i)和值(v)
  print (i, v)

knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.iteritems():   # 遍历键值
    print k, v

比较

以下比较均为True.

(1, 2, 3)              < (1, 2, 4)
[1, 2, 3]              < [1, 2, 4]
'ABC' < 'C' < 'Pascal' < 'Python'
(1, 2, 3, 4)           < (1, 2, 4)
(1, 2)                 < (1, 2, -1)
(1, 2, 3)             == (1.0, 2.0, 3.0)
(1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)

arguments

引入一个形如 name 的参数时,它接收一个字典,该字典包含了所有未出现在形式参数列表中的关键字参数。这里可能还会组合使用一个形如 name (下一小节详细介绍)的形式参数,它接收一个元组(下一节中会详细介绍),包含了所有没有出现在形式参数列表中的参数值。( name 必须在 name 之前出现)例如,我们这样定义一个函数:

def cheeseshop(kind, *arguments, **keywords):
    print "-- Do you have any", kind, "?"
    print "-- I'm sorry, we're all out of", kind
    for arg in arguments:
        print arg
    print "-" * 40
    keys = sorted(keywords.keys())
    for kw in keys:
        print kw, ":", keywords[kw]

Function.prototype.apply

args = [2,8]
range(*args)

查找对象或模块下的属性及方法

dir()   # 当前环境下的全局变量

a = [1,6,2]
dir(a) # a对象下的方法及属性

dir(__builtin__)  # builtin方法及常量们