Python 包含许多内置函数。这些函数执行预定义的任务,并且可以根据需要在任何程序中调用。但是,如果您没有找到合适的内置函数来满足您的目的,您可以定义一个。我们现在将看到如何在 Python 程序中定义和使用函数。
定义函数
函数是一个可重用的编程语句块,用于执行特定的任务。为了定义一个函数,Python 提供了def
关键字。以下是定义函数的语法。
Syntax:
def function_name(parameters):
"""docstring"""
statement1
statement2
...
...
return [expr]
关键字def
后面跟一个合适的标识符作为函数的名称和括号。一个或多个参数可以任选地在括号内提及。括号后的:
符号开始缩进块。
函数体中的第一个语句可以是字符串,称为docstring
。它解释了函数/类的功能。 文档字符串不是强制性的。
函数体包含一个或多个执行某些操作的语句。也可以使用传递关键字。
可选地,函数块中的最后一条语句是 return 语句。它将执行控制发送回调用环境。如果在返回之前添加了一个表达式,它的值也会返回到调用代码中。
以下示例定义了greet()
函数。
Example: User-defined Function
def greet():
"""This function displays 'Hello World!'"""
print('Hello World!')
以上,我们已经定义了greet()
函数。第一个语句是一个 docstring,它提到了这个函数的功能。第二种类似的方法是打印方法,将指定的字符串显示到控制台。 注意没有退货单。
要调用一个已定义的函数,只需在代码中的任何地方使用它的名称作为语句。例如,上面的函数可以用括号greet()
来调用。
Example: Calling User-defined Function
greet()
Output
Hello World!
默认情况下,如果返回语句不存在,所有函数都会返回None
。
Example: Calling User-defined Function
val = greet()
print(val)
Output
None
帮助()功能显示文档字符串,如下图所示。
Example: Calling User-defined Function
>>> help(greet)
Help on function greet in module __main__:
greet()
This function displays 'Hello World!'
功能参数
可以定义一个函数来接收一个或多个参数(也称为参数),并在功能块内使用它们进行处理。参数/自变量可以被赋予合适的正式名称。greet()
函数现在被定义为接收名为name
的字符串参数。在该功能中,print()
语句被修改以显示发送给接收参数的问候信息。
Example: Parameterized Function
def greet(name):
print ('Hello ', name)
greet('Steve') # calling function with argument
greet(123)
Output
Hello Steve
Hello 123
函数定义中使用的参数名称为形式参数。调用函数时实际使用的对象称为实际参数。
使用parameter:type
语法,函数参数可以有注释来指定参数的类型。例如,以下注释了参数类型字符串。
Example: Parameterized Function
def greet(name:str):
print ('Hello ', name)
greet('Steve') # calling function with string argument
greet(123) # raise an error for int argument
多个参数
一个函数可以有多个参数。下面的函数接受三个参数。
Example: Parameterized Function
def greet(name1, name2, name3):
print ('Hello ', name1, ' , ', name2 , ', and ', name3)
greet('Steve', 'Bill', 'Yash') # calling function with string argument
Output
Hello Steve, Bill, and Yash
未知的参数数量
如果您不知道用户将要传递的参数数量,Python 中的函数可以通过将*
放在参数之前来获得未知数量的参数。
Example: Parameterized Function
def greet(*names):
print ('Hello ', names[0], ', ', names[1], ', ', names[3])
greet('Steve', 'Bill', 'Yash')
Output
Hello Steve, Bill, and Yash
下面的函数可以处理任意数量的参数。
Example: Parameterized Function
def greet(*names):
i=0
print('Hello ', end='')
while len(names) > i:
print(names[i], end=', ')
i+=1
greet('Steve', 'Bill', 'Yash')
greet('Steve', 'Bill', 'Yash', 'Kapil', 'John', 'Amir')
Output
Hello Steve, Bill, Yash,
Hello Steve, Bill, Yash, Kapil, John, Amir
带有关键字参数的函数
为了调用带有参数的函数,必须提供相同数量的实际参数。但是,可以通过以任何顺序使用参数名传递参数值来调用函数。例如,下面使用参数名传递值。
def greet(firstname, lastname):
print ('Hello', firstname, lastname)
greet(lastname='Jobs', firstname='Steve') # passing parameters in any order using keyword argument
Output
Hello Steve Jobs
关键字参数**kwarg
该函数可以有一个前缀为**
的参数。这种类型的参数初始化为新的有序映射,接收任何多余的关键字参数,默认为相同类型的新空映射。
Example: Parameterized Function
def greet(**person):
print('Hello ', person['firstname'], person['lastname'])
greet(firstname='Steve', lastname='Jobs')
greet(lastname='Jobs', firstname='Steve')
greet(firstname='Bill', lastname='Gates', age=55)
greet(firstname='Bill') # raises KeyError
Output
Hello Steve Jobs
Hello Steve Jobs
Hello Bill Gates
使用**
参数时,参数的顺序无关紧要。但是,参数的名称必须相同。 使用paramter_name['keyword_argument']
访问关键字参数的值。
如果函数访问关键字参数,但是调用代码没有传递该关键字参数,那么它将引发KeyError
异常,如下所示。
Example: Parameterized Function
def greet(**person):
print('Hello ', person['firstname'], person['lastname'])
greet(firstname='Bill') # raises KeyError, must provide 'lastname' arguement
Output
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
greet(firstname='Bill')
File "<pyshell#19>", line 2, in greet
print('Hello ', person['firstname'], person['lastname'])
KeyError: 'lastname'
带默认值的参数
定义函数时,可以为其参数指定默认值。如果在调用函数时传递了适当的实际参数,则该默认值将被替换。但是,如果没有提供实际参数,将在函数内部使用默认值。
下面的greet()
函数是用具有默认值'Guest'
的name
参数定义的。 只有通过一些实际的参数,才会被替换。
Example: Parameter with Default Value
def greet(name = 'Guest'):
print ('Hello', name)
greet()
greet('Steve')
Output
Hello Guest
Hello Steve
带返回值的函数
大多数时候,我们需要函数的结果用于进一步的处理。因此,当函数返回时,它也应该返回值。
用户定义的函数也可以通过在 return 语句前放置一个表达式来向调用环境返回值。在这种情况下,返回值必须赋给某个变量。
Example: Return Value
def sum(a, b):
return a + b
可以调用上面的函数并提供值,如下所示。
Example: Parameter with Default Value
total=sum(10, 20)
print(total)
total=sum(5, sum(10, 20))
print(total)
Output
30
35
文章评论