Python · 函数

定义

函数Functions):是指可重复使用的程序片段。

定义函数:可以通过关键字 def 来定义,关键字 return 来返回一个值,关键字 pass 指示没有内容的语句块。

调用函数:可以在任何地方运行代码块,称为调用(Calling)函数。

示例function1.py

1
2
3
4
5
6
7
8
9
10
11
12
def say_hello():
# 该块属于这一函数
print('hello world')
# 函数结束

say_hello() # 调用函数
say_hello() # 再次调用函数

输出:
$ python function1.py
hello world
hello world

参数

形参:在定义函数时给定的名称称作形参(Parameters)。

实参:在调用函数时你所提供给函数的值称作实参(Arguments)。

示例function_param.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def print_max(a, b):
if a > b:
print(a, 'is maximum')
elif a == b:
print(a, 'is equal to', b)
else:
print(b, 'is maximum')

# 直接传递字面值
print_max(3, 4)

x = 5
y = 7

# 以参数的形式传递变量
print_max(x, y)

输出:
$ python function_param.py
4 is maximum
7 is maximum

默认参数:可以通过在函数定义时附加一个赋值运算符(=)来为参数指定默认参数值。

示例function_default.py

1
2
3
4
5
6
7
8
9
10
def say(message, times=1):
print(message * times)

say('Hello')
say('World', 5)

输出:
$ python function_default.py
Hello
WorldWorldWorldWorldWorld

Warning:只有那些位于参数列表末尾的参数才能被赋予默认参数值,即在函数的参数列表中拥有默认参数值的参数不能位于没有默认参数值的参数之前!

关键字参数:使用命名(关键字)而非位置来指定函数中的参数,不考虑参数的顺序,函数使用更加容易。

示例function_keyword.py

1
2
3
4
5
6
7
8
9
10
11
12
def func(a, b=5, c=10):
print('a is', a, 'and b is', b, 'and c is', c)

func(3, 7)
func(25, c=24)
func(c=50, a=100)

输出:
$ python function_keyword.py
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50

可变参数:可以通过使用星号 * 来实现在函数里面能够有任意数量的变量,诸如 *param 的星号参数时汇集成元祖,诸如 **param 的双星号参数时汇集成字典。

示例function_varargs.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def total(a=5, *numbers, **phonebook):
print('a', a)

# 遍历元组中的所有项目
for single_item in numbers:
print('single_item', single_item)

# 遍历字典中的所有项目
for first_part, second_part in phonebook.items():
print(first_part,second_part)

print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))

输出:
$ python function_varargs.py
a 10
single_item 1
single_item 2
single_item 3
Inge 1560
John 2231
Jack 1123
None

变量

局部变量:当在一个函数的定义中声明变量时,它们不会以任何方式与身处函数之外但具有相同名称的变量产生关系,也就是说,这些变量名只存在于函数这一局部(Local)。

示例function_local.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
x = 50

def func(x):
print('x is', x)
x = 2
print('Changed local x to', x)

func(x)
print('x is still', x)

输出:
$ python function_local.py
x is 50
Changed local x to 2
x is still 50

全局变量:可以使用关键字 global 定义于函数之外的变量的值,它的作用域是全局。

示例function_global.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
x = 50

def func():
global x

print('x is', x)
x = 2
print('Changed global x to', x)

func()
print('Value of x is', x)

输出:
$ python function_global.py
x is 50
Changed global x to 2
Value of x is 2

公有:有的函数和变量我们希望给别人使用,正常的函数和变量名是公开的,可以被引用。

私有:有的函数和变量我们希望仅仅在模块内部使用,以 __ 开头的函数或变量是私有的。