Python教程-Python 函数
本教程将介绍 Python 函数的基础知识,包括函数是什么,它们的语法,主要组成部分,返回关键字和重要类型。我们还将查看一些 Python 函数定义的示例。
什么是 Python 函数?
执行数学、分析或评估操作的一系列相关声明称为函数。一组名为 Python 函数的声明返回特定任务。Python 函数对于中级编程是必需的,且容易定义。函数名符合与变量名相同的标准。目标是定义一个函数并将特定频繁执行的操作分组起来。我们可以通过调用函数并在不同变量下重用其内包含的代码,而不是为各种输入变量重复创建相同的代码块。
在 Python 中,有两个主要类别的函数:客户定义的函数和内置函数。它有助于保持程序的独特性、简洁性和结构性。
Python 函数的优势
通过包含函数,我们可以阻止程序重复使用相同的代码块。
- 一旦定义,Python 函数可以多次调用,并且可以在程序的任何位置调用。
- 如果程序很大,我们可以将 Python 程序分解为许多易于理解的函数。
- 使用各种参数,我们可以实现返回多个输出的能力,这是 Python 的一个重要特点。
- 但是,调用函数一直是 Python 程序的开销。
然而,在 Python 程序中,调用函数一直是一个开销。
语法
# An example Python Function
def function_name( parameters ):
# code block
如上所示,以下组件构成了一个函数的定义。
- 函数头的开始由一个名为
def
的关键字表示。 - 函数名是函数的名称,我们可以使用它来区分它与其他函数。我们将在程序中稍后使用这个名称来调用函数。在 Python 中,函数名称必须遵循与变量名称相同的规则。
- 使用参数,我们为定义的函数提供参数。但是,它们是可选的。
- 冒号 (:) 表示函数头的结束。
- 我们可以使用称为文档字符串的简短形式来说明函数的目的。
- 函数的主体由多个有效的 Python 语句组成。整个代码块的缩进深度通常为四个空格。
- 通过 return 表达式,可以从定义的函数中获取值。
用户定义函数的示例
我们将定义一个函数,调用它时返回参数数字的平方。
# Example Python Code for User-Defined function
def square( num ):
"""
This function computes the square of the number.
"""
return num**2
object_ = square(6)
print( "The square of the given number is: ", object_ )
输出:
The square of the given number is: 36
调用函数
要定义一个函数,请使用 def 关键字为其命名,指定它必须接收的参数,并组织代码块。
当函数的基本结构完成后,我们可以从程序的任何位置调用它。以下是如何使用 a_function 函数的示例。
# Example Python Code for calling a function
# Defining a function
def a_function( string ):
"This prints the value of length of string"
return len(string)
# Calling the function we defined
print( "Length of the string Functions is: ", a_function( "Functions" ) )
print( "Length of the string Python is: ", a_function( "Python" ) )
输出:
Length of the string Functions is: 9
Length of the string Python is: 6
按引用传递 vs. 按值传递
在 Python 编程语言中,所有参数都是按引用传递的。这意味着,如果我们在函数内修改了参数的值,调用函数的代码也会反映出这种变化。例如,
代码
# Example Python Code for Pass by Reference vs. Value
# defining the function
def square( item_list ):
'''''''This function will find the square of items in the list'''
squares = [ ]
for l in item_list:
squares.append( l**2 )
return squares
# calling the defined function
my_list = [17, 52, 8];
my_result = square( my_list )
print( "Squares of the list are: ", my_result )
输出:
Squares of the list are: [289, 2704, 64]
函数参数
以下是我们可以用来调用函数的参数类型:
- 默认参数
- 关键字参数
- 必需参数
- 可变长度参数
1) 默认参数
默认参数是在调用函数时,如果没有为参数提供值,则采用默认值的参数。以下示例演示了默认参数的用法。
代码
# Python code to demonstrate the use of default arguments
# defining a function
def function( n1, n2 = 20 ):
print("number 1 is: ", n1)
print("number 2 is: ", n2)
# Calling the function and passing only one argument
print( "Passing only one argument" )
function(30)
# Now giving two arguments to the function
print( "Passing two arguments" )
function(50,30)
输出:
Passing only one argument
number 1 is: 30
number 2 is: 20
Passing two arguments
number 1 is: 50
number 2 is: 30
2) 关键字参数
关键字参数与调用的函数的参数相关联。在使用关键字参数调用函数时,用户可以通过查看参数名称来确定它是哪个参数值。
我们可以删除或重新排列特定参数,因为 Python 解释器将使用的关键字与其参数关联起来,以链接提供的关键字和其参数的值。使用关键字调用函数的另一种方法如下所示:
代码
# Python code to demonstrate the use of keyword arguments
# Defining a function
def function( n1, n2 ):
print("number 1 is: ", n1)
print("number 2 is: ", n2)
# Calling function and passing arguments without using keyword
print( "Without using keyword" )
function( 50, 30)
# Calling function and passing arguments using keyword
print( "With using keyword" )
function( n2 = 50, n1 = 30)
输出:
Without using keyword
number 1 is: 50
number 2 is: 30
With using keyword
number 1 is: 30
number 2 is: 50
3) 必需参数
必需参数是在调用函数时按照预定的位置顺序为函数提供的参数。在方法调用中提供的参数数量必须与函数定义中提供的参数数量相同。
我们应该按照函数() 的顺序发送两个参数;如果按如下所示提供 num1 为 20 和 num2 为 30,它将返回语法错误。
代码
# Python code to demonstrate the use of default arguments
# Defining a function
def function( n1, n2 ):
print("number 1 is: ", n1)
print("number 2 is: ", n2)
# Calling function and passing two arguments out of order, we need num1 to be 20 and num2 to be 30
print( "Passing out of order arguments" )
function( 30, 20 )
# Calling function and passing only one argument
print( "Passing only one argument" )
try:
function( 30 )
except:
print( "Function needs two positional arguments" )
输出:
Passing out of order arguments
number 1 is: 30
number 2 is: 20
Passing only one argument
Function needs two positional arguments
4) 可变长度参数
在 Python 函数中,我们可以引入特殊字符来传递许多参数。但是,我们需要一个函数。可以使用两种类型的字符之一来实现这一点:
"args" 和 "kwargs" 分别引用不基于关键字的参数。
为了帮助您理解可变长度参数,这里有一个示例。
代码
# Python code to demonstrate the use of variable-length arguments
# Defining a function
def function( *args_list ):
ans = []
for l in args_list:
ans.append( l.upper() )
return ans
# Passing args arguments
object = function('Python', 'Functions', 'tutorial')
print( object )
# defining a function
def function( **kargs_list ):
ans = []
for key, value in kargs_list.items():
ans.append([key, value])
return ans
# Paasing kwargs arguments
object = function(First = "Python", Second = "Functions", Third = "Tutorial")
print(object)
输出:
['PYTHON', 'FUNCTIONS', 'TUTORIAL']
[['First', 'Python'], ['Second', 'Functions'], ['Third', 'Tutorial']]
返回语句
当调用定义的函数时,写入一个 return 语句来退出函数并返回计算的值。
语法:
return < expression to be returned as output >
return 语句可以是参数、语句或值,当特定任务或函数完成时,将其作为输出提供。如果没有写入 return 语句,则声明的函数将返回一个空字符串。
以下是 Python 函数中返回语句的示例。
代码
# Python code to demonstrate the use of return statements
# Defining a function with return statement
def square( num ):
return num**2
# Calling function and passing arguments.
print( "With return statement" )
print( square( 52 ) )
# Defining a function without return statement
def square( num ):
num**2
# Calling function and passing arguments.
print( "Without return statement" )
print( square( 52 ) )
输出:
With return statement
2704
Without return statement
None
匿名函数
由于我们不使用 def 关键字来声明这种类型的 Python 函数,因此它们是匿名的。lambda 关键字可以定义匿名、简短、单输出函数。
Lambda 表达式可以接受任意数量的参数;但是,它们只从中产生单个值。它们不能包含多个指令或表达式。由于 lambda 需要表达式,因此无法直接调用匿名函数以进行打印。
由于 lambda 函数包含其独特的局部域,因此它们只能引用其参数列表中的变量和全局域名。
与 C 和 C++ 中的内联表达式不同,为了提高效率,会在执行时传递函数堆栈分配,lambda 表达式似乎是函数的一行表示。
语法
Lambda 函数在其语法中只有一行:
lambda [argument1 [,argument2... .argumentn]] : expression
以下是使用 lambda 函数的示例。
代码
# Python code to demonstrate ananymous functions
# Defining a function
lambda_ = lambda argument1, argument2: argument1 + argument2;
# Calling the function and passing values
print( "Value of the function is : ", lambda_( 20, 30 ) )
print( "Value of the function is : ", lambda_( 40, 50 ) )
输出:
Value of the function is : 50
Value of the function is : 90
变量的范围和生存期
变量的范围是指它在被声明的程序域中的范围。函数的参数和变量对于内部范围是可访问的,但它们只有一个局部范围。
变量在 RAM 中存在的时间是它的生存期。函数的生存期与其内部变量的生存期相同。当我们退出函数时,它们将被带走。因此,函数内的变量的值不会从先前的执行中持续存在。
下面是一个变量的作用域示例。
代码
# Python code to demonstrate scope and lifetime of variables
#defining a function to print a number.
def number( ):
num = 50
print( "Value of num inside the function: ", num)
num = 10
number()
print( "Value of num outside the function:", num)
输出:
Value of num inside the function: 50
Value of num outside the function: 10
在这里,我们可以看到 num 的初始值是 10。尽管函数 number() 将 num 的值更改为 50,但函数外部的 num 值保持不变。
这是因为函数内部变量 num 与外部变量(靠近函数)不同。尽管变量名相同,但它们是具有不同作用域的不同变量。
超出函数范围的变量在函数内是可用的。这些变量的影响是全局的。我们可以在函数内检索其值,但不能修改或更改它们。如果使用关键字 global 声明,变量的值可以在函数外部更改。
函数内部的 Python 函数
在 Python 中,函数被视为一流对象。一流对象在编程语言中的任何地方使用时都被视为相同。它们可以存储在内置数据结构中,用作参数,并在条件表达式中使用。如果编程语言像一流函数一样对待函数,它被认为实现了一流函数的概念。Python 支持一流函数的概念。
在另一个函数内定义的函数称为“内部”或“嵌套”函数。外部范围的参数对于内部函数是可访问的。内部函数的目的是将它们从函数外部的变化中隐藏起来。许多开发人员将此交互视为一种体现。
代码
# Python code to show how to access variables of a nested functions
# defining a nested function
def word():
string = 'Python functions tutorial'
x = 5
def number():
print( string )
print( x )
number()
word()
输出:
Python functions tutorial
5