首先申明下,本文为笔者学习《Python学习手册》的笔记,并加入笔者自己的理解和归纳总结。
1. def语句def语句将创建一个函数对象并将其赋值给一个变量名。
def(arg1, arg2, ... argN) # 参数个数可以是0到任意数量 return # return是可选的,如果没有,函数返回None
定义一个相乘的函数。
>>> def multiply(x, y):
return x * y # return用于函数返回值
>>> multiply(3, 4)
12
>>> multiply("Hello", 3) # 参数类型的不同,乘法的实现也不同
'HelloHelloHello'
2. 函数参数
参数和共享引用
不可变参数传递值,可变参数传递引用。
>>> def fun(a, b):
a = 11
b[0] = "welcome"
>>> x = 13
>>> y = ["hello", "world"]
>>> fun(x, y) # 参数x是整型,y是列表
>>> x, y
(13, ['welcome', 'world'])
参数匹配
参数匹配有位置匹配和名称匹配。
>>> def fun(name, age):
print "%s is %d" % (name, age)
>>> fun("Mike", 18) # 位置匹配
Mike is 18
>>> fun(name="Jack", age=20) # 名称匹配
Jack is 20
混合匹配中位置匹配必须在从左往右,之后进行名称匹配。
>>> fun("Lily", age=20) # 混合匹配
Lily is 20
>>> fun(name="LiLy", 20) # 匹配错误
SyntaxError: non-keyword arg after keyword arg
默认参数
默认参数允许创建函数可选的参数,如果没有传入值的话,在函数运行时,使用默认值。
>>> def fun(name, age=18, addr="ShangHai"):
print "%s is %d at %s" % (name, age, addr)
>>> fun("Mike") # 指定name,age和addr使用默认值
Mike is 18 at ShangHai
>>> fun("Jack", 20) # 指定name和age,addr使用默认值
Jack is 20 at ShangHai
>>> fun("Lily", 22, "GuangZhou") # 不使用默认值
Lily is 22 at GuangZhou
>>> fun("Lily", addr="ShengZhen") # 指定name和addr,age使用默认值
Lily is 18 at ShengZhen
参数匹配扩展
符号(*)匹配一个元组,符号(**)匹配一个字典。
>>> def fun(*args): # 定义参数是一个元组
print args
>>> fun(1)
(1,)
>>> fun(1, 2, 3, 4)
(1, 2, 3, 4)
>>> def fun(**args): # 定义参数是一个字典
print args
>>> fun(name="Mike", age=19)
{'age': 19, 'name': 'Mike'}
符号(*)和符号(**)也用来解包参数。
>>> def fun(a, b, c):
print a, b, c
>>> L = [1, 2, 3]
>>> fun(*L) # (*)用来解包列表
1 2 3
>>> def fun(name, age, addr):
print "%s is %d at %s" % (name, age, addr)
>>> D = {"name":"Mike", "age":18, "addr":"ShangHai"}
>>> fun(**D) # (**)用来解包字典
Mike is 18 at ShangHai
apply内置函数用来调用函数
>>> pargs = (1, 2)
>>> kpargs = {"a":3, "b":4}
>>> def fun(*pargs, **kpargs):
print pargs, kpargs
>>> apply(fun, pargs, kpargs)
(1, 2) {'a': 3, 'b': 4}
3. 函数间接调用
函数可以作为参数传递。
>>> def fun1():
def fun2(): # 在方法fun1内定义一个方法fun2
print "fun2"
return fun2 # 把方法fun2作为值返回
>>> f = fun1()
>>> f()
fun2
4.函数属性
向函数添加自定义的属性。
>>> def fun():
print fun.param
>>> fun.param = 11 # param赋值11
>>> fun()
11
5. 匿名函数lambda
lambda的主体是一个表达式,返回表达式的值。
>>> f = (lambda a, b, c: a + b + c) # lambda定义了一个三个参数的方法 >>> f(1, 2, 3) 6 >>> f = lambda x: (lambda y: y ** x) # lambda方法返回一个方法 >>> X = f(2) # X = lambda y : y ** 2 >>> X(3), X(4) (9, 16) >>> Y = f(3) # Y = lambda y : y ** 3 >>> Y(2), Y(3) (8, 27)6. 序列函数 6.1 range()函数
range()返回一系列连续整数。
>>> range(5) # 从默认0到5的,不包括5 [0, 1, 2, 3, 4] >>> range(2, 5) # 从2到5 [2, 3, 4] >>> range(1, 10, 3) # 从1到10,步距是3 [1, 4, 7]
range常被用来for循环中的序列。
>>> val = "Hello" >>> for i in range(len(val)): print i, val[i] 0 H 1 e 2 l 3 l 4 o6.2 zip()函数
zip()可以同时循环多个序列。
>>> L1 = ["name", "age", "addr"]
>>> L2 = ["Mike", 18, "ShangHai"]
>>> zip(L1, L2) # zip把相同位置的值,组成一个元组
[('name', 'Mike'), ('age', 18), ('addr', 'ShangHai')]
如果两个序列的数量不同,取较短数量。
>>> L1 = ["name", "age"] # L1长度为2
>>> L2 = ["Mike", 18, "ShangHai"] # L2长度为3
>>> zip(L1, L2) # zip的结果长度为2
[('name', 'Mike'), ('age', 18)]
>>> L1 = ["name", "age", "addr"] # L1长度为3
>>> L2 = ["Mike", 18] # L2长度为2
>>> zip(L1, L2) # zip的结果长度为2
[('name', 'Mike'), ('age', 18)]
6.3 map()函数
map()函数用于列表映射。
>>> def fun(a, b):
return a + b
>>> L1 = [1, 2, 3, 4]
>>> L2 = [4, 5, 6, 7]
>>> map(fun, L1, L2) # 把L1和L2的值作为参数调用fun
[5, 7, 9, 11]
map()实现zip()的功能
>>> L1 = ["name", "age", "addr"]
>>> L2 = ["Mike", 18, "ShangHai"]
>>> map(None, L1, L2)
[('name', 'Mike'), ('age', 18), ('addr', 'ShangHai')]
如果两个序列的数量不同,取较长数量,空缺以None替代。
>>> L1 = ["name", "age"] # L1长度为2
>>> L2 = ["Mike", 18, "ShangHai"] # L2长度为3
>>> map(None, L1, L2) # zip的结果长度为3
[('name', 'Mike'), ('age', 18), (None, 'ShangHai')]
>>> L1 = ["name", "age", "addr"] # L1长度为3
>>> L2 = ["Mike", 18] # L2长度为2
>>> map(None, L1, L2) # zip的结果长度为3
[('name', 'Mike'), ('age', 18), ('addr', None)]
6.4 enumerate()函数
enumerate()函数取得元素偏移量和元素值。
>>> L1 = ["name", "age", "addr"] >>> for item in enumerate(L1): print item, (0, 'name') (1, 'age') (2, 'addr')6.5 iter()和next()函数
iter()和next()用来手动迭代,直到发生异常。
>>> L1 = ["name", "age", "addr"] >>> L = iter(L1) # 迭代L1,赋值给L >>> next(L) # 调用L的当前值,并往后移动 'name' >>> next(L) # 调用L的当前值,并往后移动 'age' >>> next(L) # 调用L的当前值,并往后移动 'addr' >>> next(L) # L已到最后一位 Traceback (most recent call last): File "6.6 filter()和reduce()函数", line 1, in next(L) StopIteration
filter()函数用于过滤元素。
>>> L = [1, 2, 3, 4] >>> filter((lambda x: x > 2), L) # 提取L中大于2的值 [3, 4]
reduce()函数用于对元素进行统一操作。
>>> L = [1, 2, 3, 4] >>> reduce((lambda x, y: x + y), L) # 把列表的值相加 106.7 其他函数
>>> L = [0, 1, 2, 3, 4, 5] >>> sum(L) # 求和 15 >>> any(L) # 序列中任意一个元素为True True >>> all(L) # 序列中所有元素为True False >>> max(L) # 最大值 5 >>> min(L) # 最小值 0
相关文章
Python 数字类型
Python 布尔型
Python 字符串
Python 列表
Python 字典
Python 元组
Python 集合
Python 变量和作用域
Python 语句
Python 函数
Python 类



