# Python 函数
> 原文: [https://thepythonguru.com/python-functions/](https://thepythonguru.com/python-functions/)
* * *
于 2020 年 1 月 7 日更新
* * *
函数是可重用的代码段,可帮助我们组织代码的结构。 我们创建函数,以便我们可以在程序中多次运行一组语句,而无需重复自己。
## 创建函数
* * *
Python 使用`def`关键字启动函数,以下是语法:
```py
def function_name(arg1, arg2, arg3, .... argN):
#statement inside function
```
**注意**:
函数内的所有语句均应使用相等的空格缩进。 函数可以接受零个或多个括在括号中的参数(也称为参数)。 您也可以使用`pass`关键字来省略函数的主体,如下所示:
```py
def myfunc():
pass
```
让我们来看一个例子。
```py
def sum(start, end):
result = 0
for i in range(start, end + 1):
result += i
print(result)
sum(10, 50)
```
**预期输出**:
```py
1230
```
上面我们定义了一个名为`sum()`的函数,它具有两个参数`start`和`end`。 该函数计算从`start`到`end`开始的所有数字的总和。
## 具有返回值的函数。
* * *
上面的函数只是将结果打印到控制台,如果我们想将结果分配给变量以进行进一步处理怎么办? 然后,我们需要使用`return`语句。 `return`语句将结果发送回调用方并退出该函数。
```py
def sum(start, end):
result = 0
for i in range(start, end + 1):
result += i
return result
s = sum(10, 50)
print(s)
```
**预期输出**:
```py
1230
```
在这里,我们使用`return`语句返回数字总和并将其分配给变量`s`。
您也可以使用`return`陈述式而没有返回值。
```py
def sum(start, end):
if(start > end):
print("start should be less than end")
return # here we are not returning any value so a special value None is returned
result = 0
for i in range(start, end + 1):
result += i
return result
s = sum(110, 50)
print(s)
```
**预期输出**:
```py
start should be less than end
None
```
在 python 中,如果您未从函数显式返回值,则始终会返回特殊值`None`。 让我们举个例子:
```py
def test(): # test function with only one statement
i = 100
print(test())
```
**预期输出**:
```py
None
```
如您所见,`test()`函数没有显式返回任何值,因此返回了`None`。
## 全局变量与局部变量
* * *
**全局变量**:未绑定到任何函数但可以在函数内部和外部访问的变量称为全局变量。
**局部变量**:在函数内部声明的变量称为局部变量。
让我们看一些例子来说明这一点。
**示例 1** :
```py
global_var = 12 # a global variable
def func():
local_var = 100 # this is local variable
print(global_var) # you can access global variables in side function
func() # calling function func()
#print(local_var) # you can't access local_var outside the function, because as soon as function ends local_var is destroyed
```
**预期输出**:
```py
12
```
**示例 2**:
```py
xy = 100
def cool():
xy = 200 # xy inside the function is totally different from xy outside the function
print(xy) # this will print local xy variable i.e 200
cool()
print(xy) # this will print global xy variable i.e 100
```
**预期输出**:
```py
200
100
```
您可以使用`global`关键字后跟逗号分隔的变量名称(`,`)在全局范围内绑定局部变量。
```py
t = 1
def increment():
global t # now t inside the function is same as t outside the function
t = t + 1
print(t) # Displays 2
increment()
print(t) # Displays 2
```
**预期输出**:
```py
2
2
```
请注意,在全局声明变量时不能为变量赋值。
```py
t = 1
def increment():
#global t = 1 # this is error
global t
t = 100 # this is okay
t = t + 1
print(t) # Displays 101
increment()
print(t) # Displays 101
```
**预期输出**:
```py
101
101
```
实际上,无需在函数外部声明全局变量。 您可以在函数内部全局声明它们。
```py
def foo():
global x # x is declared as global so it is available outside the function
x = 100
foo()
print(x)
```
**预期输出**: 100
## 具有默认值的参数
* * *
要指定参数的默认值,您只需要使用赋值运算符分配一个值。
```py
def func(i, j = 100):
print(i, j)
```
以上函数具有两个参数`i`和`j`。 参数`j`的默认值为`100`,这意味着我们可以在调用函数时忽略`j`的值。
```py
func(2) # here no value is passed to j, so default value will be used
```
**预期输出**:
```py
2 100
```
再次调用`func()`函数,但这一次为`j`参数提供一个值。
```py
func(2, 300) # here 300 is passed as a value of j, so default value will not be used
```
**预期输出**:
```py
2 300
```
## 关键字参数
* * *
有两种方法可以将参数传递给方法:位置参数和关键字参数。 在上一节中,我们已经看到了位置参数的工作方式。 在本节中,我们将学习关键字参数。
关键字参数允许您使用像`name=value`这样的名称值对来传递每个参数。 让我们举个例子:
```py
def named_args(name, greeting):
print(greeting + " " + name )
```
```py
named_args(name='jim', greeting='Hello')
named_args(greeting='Hello', name='jim') # you can pass arguments this way too
```
**期望值**:
```py
Hello jim
Hello jim
```
## 混合位置和关键字参数
* * *
可以混合使用位置参数和关键字参数,但是对于此位置参数必须出现在任何关键字参数之前。 我们来看一个例子。
```py
def my_func(a, b, c):
print(a, b, c)
```
您可以通过以下方式调用上述函数。
```py
# using positional arguments only
my_func(12, 13, 14)
# here first argument is passed as positional arguments while other two as keyword argument
my_func(12, b=13, c=14)
# same as above
my_func(12, c=13, b=14)
# this is wrong as positional argument must appear before any keyword argument
# my_func(12, b=13, 14)
```
**预期输出**:
```py
12 13 14
12 13 14
12 14 13
```
## 从函数返回多个值
* * *
我们可以使用`return`语句从函数中返回多个值,方法是用逗号(`,`)分隔它们。 多个值作为元组返回。
```py
def bigger(a, b):
if a > b:
return a, b
else:
return b, a
s = bigger(12, 100)
print(s)
print(type(s))
```
**预期输出**:
```py
(100, 12)
<class 'tuple'>
```
在下一篇文章中,我们将学习 [Python 循环](/python-loops/)
* * *
* * *
- 初级 Python
- python 入门
- 安装 Python3
- 运行 python 程序
- 数据类型和变量
- Python 数字
- Python 字符串
- Python 列表
- Python 字典
- Python 元组
- 数据类型转换
- Python 控制语句
- Python 函数
- Python 循环
- Python 数学函数
- Python 生成随机数
- Python 文件处理
- Python 对象和类
- Python 运算符重载
- Python 继承与多态
- Python 异常处理
- Python 模块
- 高级 Python
- Python *args和**kwargs
- Python 生成器
- Python 正则表达式
- 使用 PIP 在 python 中安装包
- Python virtualenv指南
- Python 递归函数
- __name__ == "__main__"是什么?
- Python Lambda 函数
- Python 字符串格式化
- Python 内置函数和方法
- Python abs()函数
- Python bin()函数
- Python id()函数
- Python map()函数
- Python zip()函数
- Python filter()函数
- Python reduce()函数
- Python sorted()函数
- Python enumerate()函数
- Python reversed()函数
- Python range()函数
- Python sum()函数
- Python max()函数
- Python min()函数
- Python eval()函数
- Python len()函数
- Python ord()函数
- Python chr()函数
- Python any()函数
- Python all()函数
- Python globals()函数
- Python locals()函数
- 数据库访问
- 安装 Python MySQLdb
- 连接到数据库
- MySQLdb 获取结果
- 插入行
- 处理错误
- 使用fetchone()和fetchmany()获取记录
- 常见做法
- Python:如何读取和写入文件
- Python:如何读取和写入 CSV 文件
- 用 Python 读写 JSON
- 用 Python 转储对象