Python - 函数
2023-09-17 22:17:16
Python 包含许多内置函数。这些函数执行预定义的任务,可以根据要求在任何程序中调用。 但是,如果您没有找到合适的内置函数来满足您的目的,则可以定义一个。现在我们将看到如何在 Python 程序中定义和使用函数。
定义函数(Defining a Function)
函数是旨在执行特定任务的可重用编程语句块。为了定义一个函数,Python 提供了 def
关键字。以下是定义函数的语法。
def function_name(parameters): """docstring""" statement1 statement2 ... ... return [expr]
关键字 def
后跟合适的标识符作为函数的名称和括号。可以选择在括号内提及一个或多个参数。括号后面的:
符号开始缩进块。
函数体中的第一个语句可以是字符串,称为 docstring
。它解释了函数/类的功能。
文档字符串不是必需的。
函数体包含一个或多个执行某些操作的语句。它也可以使用pass关键字。
(可选)功能块中的最后一条语句是 return 语句。它将执行控件发送回调用环境。 如果在 return 前面添加表达式,则其值也会返回到调用代码。
下面的示例定义greet()
函数。
def greet():
"""This function displays 'Hello World!'"""
print('Hello World!')
上面,我们定义了greet()
函数。第一条语句是一个文档字符串,其中提到了此函数的作用。第二个 like 是向控制台显示指定字符串的 print 方法。
请注意,它没有 return 语句。
要调用定义的函数,只需将其名称用作代码中任意位置的语句即可。
例如,可以使用括号调用上述函数,greet()
。
greet()
输出:
Hello World!
默认情况下,如果 return 语句不存在,则所有函数都返回None
。
val = greet()
print(val)
输出:
None
help()函数显示文档字符串,如下所示。
help(greet)
函数参数(Function Parameters)
可以定义一个函数来接收一个或多个参数(也称为参数),并使用它们在功能块内进行处理。
参数/参数可以给出合适的正式名称。现在,greet()
函数定义为接收名为 name
的字符串参数。在函数内部,修改print()
语句以显示发送到接收参数的问候消息。
def greet(name):
print ('Hello ', name)
greet('Steve') # calling function with argument
greet(123)
输出:
Hello Steve
Hello 123
函数定义中使用的参数名称称为形式参数/参数。调用函数时实际使用的对象称为实际参数/参数。
函数参数可以具有注释,以使用parameter:type
语法指定参数的类型。例如,下面批注参数类型 string 。
但是,您可以将任何类型的值传递给 greet()
函数。
def greet(name:str):
print ('Hello ', name)
greet('Steve')
greet(123)
多个参数(Multiple Parameters)
一个函数可以有多个参数。以下函数采用三个参数。
def greet(name1, name2, name3):
print ('Hello ', name1, ' , ', name2 , ', and ', name3)
greet('Steve', 'Bill', 'Yash') # calling function with string argument
输出:
Hello Steve, Bill, and Yash
参数数量未知(Unknown Number of Arguments)
Python 中的函数可以具有未知数量的参数,如果您不知道用户将要传递的参数数量,请将*
放在参数之前。
def greet(*names):
print ('Hello ', names[0], ', ', names[1], ', ', names[2])
greet('Steve', 'Bill', 'Yash')
输出:
Hello Steve, Bill, and Yash
以下函数适用于任意数量的参数。
def greet(*names):
i=0
while len(names) > i:
print(names[i])
i+=1
greet('Steve', 'Bill', 'Yash')
greet('Steve', 'Bill', 'Yash', 'Kapil', 'John', 'Amir')
输出:
Hello Steve, Bill, Yash,
Hello Steve, Bill, Yash, Kapil, John, Amir
带关键字参数的函数(Function with Keyword Arguments)
为了调用带有参数的函数,必须提供相同数量的实际参数。 但是,可以通过按任意顺序使用参数名称传递参数值来调用函数。 例如,以下内容使用参数名称传递值。
def greet(firstname, lastname):
print ('Hello', firstname, lastname)
greet(lastname='Jobs', firstname='Steve') # passing parameters in any order using keyword argument
输出:
Hello Steve Jobs
关键字参数 **kwarg(Keyword Argument **kwarg)
该函数可以具有以 **
为前缀的单个参数。这种类型的参数初始化为接收任何多余的关键字参数的新有序映射,默认为相同类型的新空映射。
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
输出:
Hello Steve Jobs
Hello Steve Jobs
Hello Bill Gates
使用 **
参数时,参数的顺序无关紧要。但是,参数的名称必须相同。
使用 paramter_name['keyword_argument']
访问关键字参数的值。
如果函数访问关键字参数,但调用代码未传递该关键字参数,则它将引发KeyError
异常,如下所示。
def greet(**person):
print('Hello ', person['firstname'], person['lastname'])
greet(firstname='Bill') #KeyError, must provide 'lastname' arguement
输出:
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'
具有默认值的参数(Parameter with Default Value)
定义函数时,可以为其参数分配默认值。 如果在调用函数时传递了适当的实际参数,则会替换此默认值。 但是,如果未提供实际参数,则将在函数中使用默认值。
以下greet()
函数是使用默认值为 'Guest'
的 name
参数定义的。仅当传递了一些实际参数时,它才会被替换。
def greet(name = 'Guest'):
print ('Hello', name)
greet()
greet('Steve')
输出:
Hello Guest
Hello Steve
具有返回值的函数(Function with Return Value)
大多数时候,我们需要函数的结果用于进一步的流程。因此,当函数返回时,它也应该返回一个值。
还可以通过在 return 语句前面放置一个表达式来使用户定义的函数向调用环境返回值。 在这种情况下,必须将返回值分配给某个变量。
def sum(a, b):
return a + b
total=sum(10, 20)
print(total)
total=sum(5, sum(10, 20))
print(total)
您可以使用运算符指定返回值的类型->
如下所示。
def sum(a, b) -> int:
return a + b
total=sum(10, 20)
print(total)
total=sum(5, sum(10, 20))
print(total)
输出:
30
35
本文内容总结: