栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 函数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 函数

首先申明下,本文为笔者学习《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 o
6.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 "", line 1, in 
    next(L)
StopIteration
6.6 filter()和reduce()函数

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)   # 把列表的值相加
10
6.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 类

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350149.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号