Python2.7杂记

关于print

+与,的区别

其中“,”是用了连接两个不同的数据类型,“+”是用来连接两个相同的数据类型

不换行

print语句的结束后面加一个逗号

*与**

*args是可变参数,args接收的是一个tuple;

**kw是关键字参数,kw接收的是一个dict。

generator(生成器)

L=[x*x for x in range(10)]
print L

g=(x*x for x in range(10))
print g

创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。

关于函数

形参与实参

a=1
def add(a):
    a=a+1
    return a
print a
add(a)
print a
print add(a)
print a

由此可知在python2.7中函数调用的形参与实参的存储空间是不同的

关于赋值号

依次赋值

def fib(max):
    n,a,b=0,0,1
    while n<max:
        print b,
        a,b=b,a+b
        n=n+1

fib(10)

如a,b=b,a+b此语句是按赋值号两边的顺序来赋值的a=b,b=a+b

map、reduce、filter and sorted

map

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

例1

print map(str,[1,2,3,4,5,6,7,8,9])

输出

['1', '2', '3', '4', '5', '6', '7', '8', '9']

例2

def f(x):
    return x*x

print map(f,[1,2,3,4,5,6,7,8,9])

输出

[1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce

reduce把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

def fn(x,y):
    return x*10+y

print reduce(fn,[1,2,3,4,5])

输出

12345

filter

filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

例1

def is_odd(n):
    return n % 2 == 1

filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])

输出

[1, 5, 9, 15]

例2

def not_empty(s):
    return s and s.strip()

filter(not_empty, ['A', '', 'B', None, 'C', '  '])

输出

['A', 'B', 'C']

sorted

sorted()函数是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。比如,如果要倒序排序,我们就可以自定义一个cmp函数,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1
默认情况下

print sorted([36, 5, 12, 9, 21])

输出

[5, 9, 12, 21, 36]

因为sorted对于字符串排序是根据ASCII码的,就存在’Z’<‘a’,对于既有首字母大写的也有首字母小写的字符串且不区分大小写的情况下排序

def cmp(str1,str2):
    if str1.lower()>str2.lower():
        return 1
    if str1.lower()<str2.lower():
        return -1
    return 0

print sorted(["bob","Jack",'alice','tom','Jarry'],cmp)

输出

['alice', 'bob', 'Jack', 'Jarry', 'tom']

字符串处理函数

strip()

在指定的字符串的首尾中去除指定的字符或字符串

例1

str = "00000003210Runoob01230000000"; 
print str.strip( '0' )

输出

3210Runoob0123

例2

str2 = "   Runoob      "
print str2.strip()

输出

Runoob

例3

str = "123abcrunoob321"
print (str.strip( '12' ))

输出

3abcrunoob3