要想实现一个功能,最好的方式就是将代码整理成一个函数,这样以后再次调用的时候也是比较方便的。
函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def functionname(parameters):
"""函数_文档字符串"""
function_suite
return [expression]
高阶函数
高阶函数有两个特性:
- 变量可以指向函数
- 函数名也是变量
- 可以作为变量被传递
变量指向函数
# abs为求绝对值的函数
f = abs # 将abs函数指向变量f
print(type(f)) # 打印变量f的类型
print(f(-100)) # 调用f函数
运行结果:
<class 'builtin_function_or_method'>
100
函数名也是变量
print(type(abs)) # 打印abs的类型
print(abs(-100)) # 求-100的绝对值
abs = 10 # 给变量abs赋值
print(type(abs)) # 打印abs的类型
print(abs(-100)) # 再次尝试调用abs求-100的绝对值
运行结果:
<class 'builtin_function_or_method'>
100
<class 'int'>
# 这里报错了,因为abs已经被改变了,不再是求绝对值的函数了。
Traceback (most recent call last):
File "D:/WorkSpace/Study/pythonTest/dataType.py", line 5, in <module>
print(abs(-100))
TypeError: 'int' object is not callable
作为传入函数使用
# 这里定义一个函数,将变量xy和函数f传入,然后返回经f函数处理的xy的和
def addAllAbs(x, y, f):
return f(x) + f(y)
# 这里将abs函数作为传入函数使用
print(addAllAbs(-1, -50, abs))
运行结果:
51
map,reduce,filter,sorted。。。
这几个函数都属于高阶函数。
- map(f, x)
map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
# 将list的首字母变成大写,其余都是小写
def firstCap(x):
return x.capitalize()
print(list(map(firstCap, ['adam', 'LISA', 'barT'])))
运行结果:
['Adam', 'Lisa', 'Bart']
- reduce
reduce函数必须接收两个参数,它把结果继续和序列的下一个元素做累积计算
from functools import reduce
# 利用reduce将整数list拼接起来
def splice(x, y):
return x * 10 + y
print(reduce(splice, [1, 2, 3, 4, 5, 6]))
运行结果:
123456
- filter
filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
# 返回list中为偶数的数字
def is_odd(x):
return x % 2 == 0
print(list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9])))
- sorted
sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序
print(sorted([36, 5, -12, 9, -21], key=abs))
运行结果:
[5, 9, -12, -21, 36]
匿名函数
lambda x: x * x
关键字lambda表示匿名函数,冒号前面的x表示函数参数。
# 这里lambda n: n % 2 == 1 其实就是判断n是否为奇数
# 这里打印出来的就是返回list中为奇数的数字
print(list(filter(lambda n: n % 2 == 1, range(1, 20))))
运行结果:
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
先写这么多吧。。。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。