Python 函数

基本语法

定义函数

1
2
def hello(name):
return 'hello, ' + name + '!'

关键字参数和默认值

1
2
3
4
def userInfo(name, email, age='30'):
print('your name is ' + name + ', email is ' + email)

userInfo(email='aneat@gmail.com', name='xiong')

参数自动封装(参数收集)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 普通参数转换为元组
def printBook(*bookName):
print("\t".join(bookName))

printBookName('鸟哥的Linux私房菜', '不能承受的生命之轻', '遍地风流')

# 关键字参数转换为字典
def coordinate(**point):
print(point)

coordinate(x = 128, y = 10, z = 900)

# 元组分解为普通参数
def add(a, b): return a + b

nums = (2, 9)
print( add(*nums) )

# 字典分解为关键字参数
def add(a = 0, b = 0): return a + b

nums = { 'a': 10, 'b': 3 }
print( add(**nums) )

作用域

函数vars()查看内建作用域字典,global关键字定义全局变量

递归

阶乘

1
2
3
4
5
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n - 1)

计算幂

1
2
3
4
5
def power(x, n):
if n == 0:
return 1
else:
return x * power(x, n-1)

二分法查找

1
2
3
4
5
6
7
8
9
10
11
12
13
def bins(seq, num, begin=0, end=None):
if end is None: end = len(seq)-1
if begin == end:
if num == seq[begin]:
return begin
else:
return None
else:
mid = (begin + end) // 2
if num > seq[mid]:
return bins(seq, num, mid+1, end)
else:
return bins(seq, num, begin, mid)

函数式编程

map

1
2
items = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, items))

filter

1
2
number_list = range(-5, 5)
less_than_zero = list(filter(lambda x: x < 0, number_list))

reduce

1
2
from functools import reduce
product = reduce((lambda x, y: x * y), [1, 2, 3, 4])