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

本文内容总结: