# 函数

``````def say_hello():
# 该块属于这一函数
print('hello world')
# 函数结束

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

``````\$ python function1.py
hello world
hello world
``````

## 函数参数1

``````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
``````

## 局部变量2

``````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` 语句

``````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
``````

`global` 语句用以声明 `x` 是一个全局变量——因此，当我们在函数中为 `x` 进行赋值时，这一改动将影响到我们在主代码块中使用的 `x` 的值。

## 默认参数值

``````def say(message, times=1):
print(message * times)

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

``````\$ python function_default.py
Hello
WorldWorldWorldWorldWorld
``````

## 关键字参数3

``````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
``````

## 可变参数4

``````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
``````

## `return` 语句

`return` 语句用于从函数中返回，也就是中断函数。我们也可以选择在中断函数时从函数中返回一个值

``````def maximum(x, y):
if x > y:
return x
elif x == y:
return 'The numbers are equal'
else:
return y

print(maximum(2, 3))
``````

``````\$ python function_return.py
3
``````

`maximum` 函数将会返回参数中的最大值，在本例中是提供给函数的数值。它使用一套简单的 `if...else` 语句来找到较大的那个值并将其返回

``````def some_function():
pass
``````

Python 中的 `pass` 语句用于指示一个没有内容的语句块。

## DocStrings

Python 有一个甚是优美的功能称作文档字符串（Documentation Strings），在称呼它时通常会使用另一个短一些的名字docstrings。DocStrings 是一款你应当使用的重要工具，它能够帮助你更好地记录程序并让其更加易于理解。令人惊叹的是，当程序实际运行时，我们甚至可以通过一个函数来获取文档！

``````def print_max(x, y):
'''打印两个数值中的最大数。

这两个数都应该是整数'''
# 如果可能，将其转换至整数类型
x = int(x)
y = int(y)

if x > y:
print(x, 'is maximum')
else:
print(y, 'is maximum')

print_max(3, 5)
print(print_max.__doc__)
``````

``````\$ python function_docstring.py
5 is maximum

这两个数都应该是整数
``````

## 总结

1. 原文作 Function Parameters，沈洁元译本译作“函数形参”。Parameter 和 Argument 同时具有“参数”和“形参”或“实参”两种译法。一般来说，只有在存在形参实参二义关系时，才会特别翻译成“形参”或“实参”。故此节标题 Parameter 作“参数”解。
2. 原文作 Local Varibles。
3. 原文作 Keyword Arguments，沈洁元译本译作“关键参数”。
4. 原文作 VarArgs Parameters，VarArgs 来自于英文“可变的”“自变量（一译变元，台译引数，也可以理解成参数）”两个英文单词的结合，即 Variable Arguments。
5. 此处指的是以英文撰写的文档字符串内容。