通常,即使是初学者,内置函数也无法满足。在这种情况下,别无选择,只能使用关键字def
(对,从define派生)创建自己的函数。让我们看一下语法:
def function_name(parameter1, parameter2, ...):
# function's body
...
return "return value"
def
之后,我们写下我们的函数名称(以便稍后调用它)和我们的函数可以接受的参数名称,用括号括起来。不要错过行尾的冒号。函数及其参数的名称遵循与变量名称相同的约定,即它们应该用小写字母书写,单词之间有下划线。
4 个空格的缩进显示解释器函数体的开始位置和结束位置。函数体中的所有语句都必须缩进。您可以在函数内部进行计算并使用return
关键字将结果发回。只有当没有缩进时,函数的定义才结束。
稍后,参数采用函数调用中传递的值。我们传递给函数的那些值称为参数。参数和参数之间的唯一区别是我们在函数定义中引入参数并在函数调用中给出参数(一些特定值)。这是一个不太抽象的函数示例:
# Function definition
def multiply(x, y):
return x * y
# Function calls
a = multiply(3, 5) # 15
b = multiply(a, 10) # 150
如果您不想传递任何参数,则圆括号保持为空:
def welcome():
print("Hello, people!")
您还可以使用语句声明一种空函数pass
:
# This function does nothing (yet)
def lazy_func(param):
pass
当您选择lazy_func()
使用任意值作为参数调用时,什么都不会发生。所以pass
只是一个占位符,但至少你的代码对它有效。
Parameters vs arguments
现在还不太清楚,参数是什么,是吗?实际上,参数只是值的别名,可以传递给函数。考虑以下示例:
def send_postcard(address, message):
print("Sending a postcard to", address)
print("With the message:", message)
send_postcard("Hilton, 97", "Hello, bro!")
# Sending a postcard to Hilton, 97
# With the message: Hello, bro!
send_postcard("Piccadilly, London", "Hi, London!")
# Sending a postcard to Piccadilly, London
# With the message: Hi, London!
正如你所看到的,这个函数是一段可重用的代码,可以用不同的参数执行,即传递给这个函数的不同的值。在这里,address
andmessage
只是别名,函数在其下接收值,然后在主体中处理它们。
该函数只需要 2 个参数,因此您将无法使用多于或少于 2 个参数来执行它:
send_postcard("Big Ben, London")
TypeError: send_postcard() missing 1 required positional argument: 'message'
执行和返回
我们之前的函数只执行了一些操作,但它没有任何返回值。但是,您可能希望在函数中计算某些内容并在某个时候返回结果。检查以下示例:
def celsius_to_fahrenheit(temps_c):
temps_f = temps_c * 9 / 5 + 32
return round(temps_f, 2)
# Convert the boiling point of water
water_bp = celsius_to_fahrenheit(100)
print(water_bp) # 212.0
关键字return
用于指示函数输出什么值。基本上,它是函数调用的结果。因此,在上面的示例中,我们将函数返回的值存储在变量中water_bp
。可以肯定的是,我们打印了结果。
还有一点要说的是,函数不一定有返回值。事实上,众所周知的print()
函数不返回任何内容。检查下面的代码:
chant = print("We Will Rock You")
print(chant)
及其输出:
We Will Rock You
None
我们声明了变量chant
并调用了print()
. 显然,该函数已被执行。但变量本身chant
却是None,这意味着被调用的函数没有任何返回值
return 后结束执行
概括
因此,我们学习了声明函数的语法。现在你也知道了:
- 函数的参数只是别名或将传递给它们的值的占位符。每次调用函数时都会重新初始化参数。在函数内部,您可以访问这些值,这意味着您可以对它们执行计算。
- 函数可以简单地执行操作而不返回任何内容或返回特定结果。如果您的函数没有返回任何内容,则将其结果分配给变量或打印它会给您
None
.
声明自己的函数使您的代码更加结构化和可重用。每当您多次使用同一段代码时,请尝试为它创建一个函数!