139 lines
3.7 KiB
Markdown
139 lines
3.7 KiB
Markdown
---
|
||
title: Functions
|
||
localeTitle: 功能
|
||
---
|
||
## 功能
|
||
|
||
函数允许您定义可在程序中多次执行的可重用代码块。
|
||
|
||
功能允许您为复杂问题创建更多模块化和[DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)解决方案。
|
||
|
||
虽然Python已经提供了许多内置函数,例如`print()`和`len()` ,但您也可以定义自己的函数以在项目中使用。
|
||
|
||
在代码中使用函数的一大优势是它减少了项目中代码行的总数。
|
||
|
||
### 句法
|
||
|
||
在Python中,函数定义具有以下功能:
|
||
|
||
1. 关键字`def`
|
||
2. 一个功能名称
|
||
3. paranthesis'()',并在paranthesis输入参数内,尽管输入参数是可选的。
|
||
4. 冒号':'
|
||
5. 一些要执行的代码块
|
||
6. 返回语句(可选)
|
||
|
||
```python
|
||
# a function with no parameters or returned values
|
||
def sayHello():
|
||
print("Hello!")
|
||
|
||
sayHello() # calls the function, 'Hello!' is printed to the console
|
||
|
||
# a function with a parameter
|
||
def helloWithName(name):
|
||
print("Hello " + name + "!")
|
||
|
||
helloWithName("Ada") # calls the function, 'Hello Ada!' is printed to the console
|
||
|
||
# a function with multiple parameters with a return statement
|
||
def multiply(val1, val2):
|
||
return val1 * val2
|
||
|
||
multiply(3, 5) # prints 15 to the console
|
||
```
|
||
|
||
函数是代码块,只需调用函数即可重用。这样可以实现简单,优雅的代码重用,而无需显式重写代码段。这使代码更易读,使调试更容易,并限制输入错误。
|
||
|
||
Python中的函数是使用`def`关键字创建的,后跟括号内的函数名和函数参数。
|
||
|
||
函数总是返回一个值,函数使用`return`关键字返回一个值,如果你不想返回任何值,则返回默认值`None` 。
|
||
|
||
函数名称用于调用函数,在括号内传递所需的参数。
|
||
|
||
```python
|
||
# this is a basic sum function
|
||
def sum(a, b):
|
||
return a + b
|
||
|
||
result = sum(1, 2)
|
||
# result = 3
|
||
```
|
||
|
||
您可以为参数定义默认值,这样Python将解释该参数的值是默认值,如果没有给出。
|
||
|
||
```python
|
||
def sum(a, b=3):
|
||
return a + b
|
||
|
||
result = sum(1)
|
||
# result = 4
|
||
```
|
||
|
||
您可以使用参数名称按所需顺序传递参数。
|
||
|
||
```python
|
||
result = sum(b=2, a=2)
|
||
# result = 4
|
||
```
|
||
|
||
但是,无法在非关键字参数之前传递关键字参数
|
||
|
||
```Python
|
||
result = sum(3, b=2)
|
||
#result = 5
|
||
result2 = sum(b=2, 3)
|
||
#Will raise SyntaxError
|
||
```
|
||
|
||
函数也是对象,因此您可以将它们分配给变量,并像函数一样使用该变量。
|
||
|
||
```python
|
||
s = sum
|
||
result = s(1, 2)
|
||
# result = 3
|
||
```
|
||
|
||
### 笔记
|
||
|
||
* 如果函数定义包含参数,则在调用函数时必须提供相同数量的参数。
|
||
|
||
```python
|
||
print(multiply(3)) # TypeError: multiply() takes exactly 2 arguments (0 given)
|
||
|
||
print(multiply('a', 5)) # 'aaaaa' printed to the console
|
||
|
||
print(multiply('a', 'b')) # TypeError: Python can't multiply two strings
|
||
|
||
```
|
||
|
||
* 函数将运行的代码块包括函数内缩进的所有语句。
|
||
|
||
```python
|
||
def myFunc():
|
||
print('this will print')
|
||
print('so will this')
|
||
|
||
x = 7
|
||
# the assignment of x is not a part of the function since it is not indented
|
||
|
||
```
|
||
|
||
* 函数中定义的变量仅存在于该函数的范围内。
|
||
|
||
```python
|
||
def double(num):
|
||
x = num * 2
|
||
return x
|
||
|
||
print(x) # error - x is not defined
|
||
print(double(4)) # prints 8
|
||
|
||
```
|
||
|
||
\-Python仅在调用函数时解释函数块,而不是在定义函数时解释函数块。即使函数定义块包含某种错误,python解释器也只会在函数被调用时指出。
|
||
|
||
|
||
### 更多信息:
|
||
|
||
* [Python 3 Docs:定义函数](https://docs.python.org/3/tutorial/controlflow.html#defining-functions) |