# Python 强化训练：第五篇

## 主题：函数

1. 基本定义方法
2. 任意数量参数
3. 只接受关键字参数
4. 显示数据类型
5. 默认参数
6. 匿名函数
7. N个参数的可调用对象

### 0. 基本定义

```def hanshu(*args):
return sum(args)

print(hanshu(1, 2, 3, 4))    # 10```

### 1. 任意数量参数

```def avg(first, *args):
return (first + sum(args))/(1 + len(args))

print(avg(3, 2, 3, 1))    # 2.25
print(avg(3, 4))    # 3.5```

### 2. 关键字参数

```def keywords(number, *, newnumber):
return (number + newnumber)

print(keywords(3, newnumber=5))    # 8
#print(keywords(3, 2))   # wrong```

### 3. 数据类型

```def type_number(a:int, b:int)->int:
return (a+b)

print(type_number(3, 4))    # 7
print(help(type_number))
#Help on function type_number in module __main__:

#type_number(a:int, b:int) -> int

#None```

### 4. 返回多个值

```def larger_number(*args, **kwargs):

return args, kwargs

print(larger_number(1, 2, 3, 4, a=1, b=2, c=3))
# ((1, 2, 3, 4), {'c': 3, 'b': 2, 'a': 1})```

### 5. 默认参数

```def define_key(*args, b=1156143589):
return args, b

print(define_key(1, 2, 3, 4))
print(define_key(1, 2, 3, 4, 5, b=12))
#((1, 2, 3, 4), 1156143589)
#((1, 2, 3, 4, 5), 12)```

### 6. 匿名函数/ 匿名函数绑定值

```lam= lambda x, y: x + y

print(lam(2, 3))    # 5

lam_2= lambda x, y=2: x**y

print(lam_2(3))    # 9

lam_3 = lambda x=3, y=3: x==y

print(lam_3())    # True
print(lam_3(2))    # False
print(lam_3(2, 2))    # True```

### 7. 减少可调用对象的参数个数

```def define_seven(a, b, c, d):

return (a, b, c, d)

print(define_seven(1, 2, 3, 4))
# (1, 2, 3, 4)

from functools import partial
seven = partial(define_seven, d=4)
print(seven(1, 2, 3)) # (1, 2, 3, 4)
seven_1 = partial(define_seven, 1)
print(seven_1(1, 2, 3))  #(1, 1, 2, 3)
seven_2 = partial(define_seven, 1, 2)
print(seven_2(1, 2))    #(1, 2, 1, 2)```
```from datetime import datetime, timedelta

def GetNextDay(baseday,n):
return str((datetime.strptime(str(baseday),'%Y-%m-%d')+timedelta(days=n)).date())
for i in range(1, 8):
NextDay = partial(GetNextDay, '2016-11-04')
print(NextDay(i))

# 2016-11-05
# 2016-11-06
# 2016-11-07
# 2016-11-08
# 2016-11-09
# 2016-11-10
# 2016-11-11```

114 篇文章44 人订阅

0 条评论

## 相关文章

11040

### OC学习10——内存管理

1、对于面向对象的语言，程序需要不断地创建对象。这些对象都是保存在堆内存中，而我们的指针变量中保存的是这些对象在堆内存中的地址，当该对象使用结束之后，指针变量指...

24250

10820

### 深入理解计算机系统（3.5）------特殊的算术操作指令

在上一篇博客 算术和逻辑操作 我们介绍了如下图几种常用的算术逻辑指令，但是大家发现没，这几种指令如果在 IA32 上只能操作32位寄存器，比如我用乘法指令I...

21270

### hdu 3518 （后缀数组）

题目描述： 　　找出一个字符串中至少重复出现两次的字串的个数（重复出现时不能重叠）。   code:      后缀数组处理，对于得到height 进行查找...

36040

30990

13030

### java匿名内部类

show the code ： package com.test.jwen.httpApiAuto; public class AInter { publ...

23770

29630

28970