IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python 函数 -> 正文阅读

[Python知识库]Python 函数

首先申明下,本文为笔者学习《Python学习手册》的笔记,并加入笔者自己的理解和归纳总结。

1. def语句

def语句将创建一个函数对象并将其赋值给一个变量名。

def <name>(arg1, arg2, ... argN)      # 参数个数可以是0到任意数量
    <statements>
    return <value>                    # 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 "<pyshell#189>", line 1, in <module>
    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 类

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:47:35  更:2021-10-27 12:49:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:56:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码