要想实现一个功能,最好的方式就是将代码整理成一个函数,这样以后再次调用的时候也是比较方便的。

函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

定义一个函数


你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 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]

先写这么多吧。。。


周兆东
107 声望21 粉丝

一个java小白的成长之路。。。