1、定义函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# def语句定义函数
def hello(name):
    print("Hello,", name)
    
# 添加return语句有两个作用
## (1) 表示函数的结束
## (2) 指定函数的返回值
def square(number):
    res = number*number
    return res
square(4)

# 可以在函数开头编辑一个文档字符串,用以解释函数功能,可作为函数的一部分储存起来
def square(number):
    'Calaulate the square of the input number'
    res = number*number
    return res
help(square) #可以在帮助文档里找到这个字符串

# 定义多个参数
def hello(time,name):
    print("Good",time, ",", name)
hello(name="LI",time="morning")

2、参数类型

(1)在定义函数时,可以设置参数的默认值。但需要注意的是这类参数需要放到最后。

1
2
3
4
5
6
def test(x, y, z=3):
    print(x, y, z)
test(1,2)
# 1 2 3
test(1,2,4)
# 1 2 4

此外还有带一个星号的收集参数与带两个星号的收集关键词参数,暂时用不到。

(2)在调用函数时,有两种方式,对应两类参数:

  • 位置参数:仅提供若干值,对应定义函数时参数顺序。因此一定要注意顺序
1
2
3
4
def test(x, y, z):
    print(x, y, z)   
test(1,2,3)
# 1 2 3
  • 关键字参数:参数名称=值的形式。可以无视定义函数时的参数顺序
1
2
3
4
def test(x, y, z):
    print(x, y, z)   
test(y=1,z=2,x=3)
# 3 1 2

通常不应该混合使用位置参数与关键字参数

一个小示例
  • 当传递的参数是一个列表时,可对其进行修改;
  • 如下表示登记学生的成绩。如果已经登记则返回提示,如果没有则需输入成绩。有点类似字典的setdefault方法。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
def add_students(all_stu,stu):
    'Registration record'
    had_stu = list(all_stu.keys())
    if stu in had_stu:
        return "The students had grades"
    else:
        all_stu[stu] = int(input("Please input the student's grade:"))

students = {'A':59, 'B':72, 'C':90}
add_students(students,"A")
# 'The students had grades'
add_students(students,"D")
students
# {'A': 59, 'B': 72, 'C': 90, 'D': 99}

3、lambda表达式

1
2
3
4
#lambda [arg1 [,arg2,.....argn]]:expression
sums = lambda num1, num2: num1 + num2
sums(1,2)
# 3