
如何定义一个函数
传参
-
位置参数
-
关键词参数
-
可变参数:收集起来统一存放中以形参名为特定标识符的元组之中。
- *args : 元组
- **args: 字典
- 默认参数: def defautFun(x, y = 3)
参数序列的打包和解包
-
打包&解包
-
val = 1, 2, 3, 4 # val元组, 打包操作 a, b, c, d = val # a-d都是int,解包操作
-
-
传值的时候,*val 传列表,**dict传字典
传值还是传引用
- python的参数传递方式是统一进行对象引用传递,也就是传的是对象的内存地址,地址即引用
- 不可变对象,函数内部会重构一个实参副本
- 可变对象,修改形参,就会修改实参
函数的递归
-
递归一定要有终止条件,这又被称为递归出口
-
递归出口通常用if语句来设置
-
被递归了?
-
-
迭代:5! = 1 * 2 * 3 * 4 * 5
-
递归:5! = 5 * 4!
-
递归过程每一步都是同一个算法,算法的逻辑变得非常简单,计算机只需要自顶向下不断重复即可。
函数式编程的高阶函数
函数就是面向过程编程范式的基本单元。
函数在python中是以对象的形式出现的。
函数式编程的一个显著特征——它允许把函数本身作为参数传入另一个函数,还允许返回一个函数。
lambda表达式
lambda x, y : x + y
Python filter() 函数
filter(function, iterable)
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(list(newlist))
Python map() 函数
map(function, iterable, ...)
>>> def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
<map object at 0x100d3d550> # 返回迭代器
>>> list(map(square, [1,2,3,4,5])) # 使用 list() 转换为列表
[1, 4, 9, 16, 25]
>>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
>>>
Python reduce() 函数
reduce(function, iterable[, initializer])
#!/usr/bin/python
from functools import reduce
def add(x, y) : # 两数相加
return x + y
sum1 = reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
print(sum1)
print(sum2)
Python List sort()方法
list.sort(cmp=None, key=None, reverse=False)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 获取列表的第二个元素
def takeSecond(elem):
return elem[1]
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# 指定第二个元素排序
random.sort(key=takeSecond)
# 输出类别
print('排序列表:')
print(random)
函数只能返回一个值,python同样是遵守的,不过通过打包/解包的形式让用户感觉返回了多个值
-
问: 对Python 不区分大小写对字符串列表排序
string_list = ['d','s','a','i','j','A','S','D','U','N'] new_list = sorted(str_list, key=str.lower)