Python 函数
这个教程将介绍Python函数的基础知识,包括它们是什么,它们的语法,它们的主要部分,返回关键字和重要的类型。我们还将看一些Python函数定义的示例。
Python函数是什么
一组相关的断言,用于执行数学、分析或评估操作,被称为函数。一组名为Python能力的声明返回指定的任务。Python函数对于中级编程是必需的,并且很容易定义。函数名遵循与变量名相同的标准。目标是定义一个函数并将特定的经常执行的操作分组起来。我们可以调用函数并重用其中包含的代码块来处理不同的变量,而不是重复创建相同的代码块。
客户定义和内置功能是Python中的两个主要类别的功能。它有助于保持程序的独特性、简洁性和结构性。
Python函数的优势
通过包含函数,我们可以避免程序重复使用相同的代码块。
- 一旦定义,Python函数可以在程序中的任何位置多次调用。
- 如果有必要,我们的Python程序可以分解为多个易于遵循的函数。
- 使用各种参数,我们可以返回尽可能多的输出是Python最重要的成就之一。
- 然而,调用函数在Python程序中始终会产生开销。
然而,在Python程序中,调用函数一直是开销。
语法
# An example Python Function
def function_name( parameters ):
# code block
附带的组件构成了定义能力的特征,如前所述。
- 能力头的开始由一个名为def的关键字表示。
- function_name是函数的名称,我们可以用它来区分它与其他函数。我们将在程序中稍后使用这个名称来调用这个能力。在Python中,命名函数必须遵循与命名变量相同的准则。
- 使用参数,我们为定义的函数提供参数。然而,它们是可选的。
- 冒号(:)标记函数头的结束。
- 我们可以使用一个名为docstring的文档字符串来解释函数的目的。
- 函数体由几个有效的Python语句组成。整个代码块的缩进深度(通常是四个空格)必须相同。
- 返回表达式可以从定义的函数获取一个值。
用户定义函数的示例
当调用时,我们将定义一个返回参数数字的平方的函数。
# 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) 必需参数
必需参数是在函数调用时按照预定的位置顺序提供给函数的参数。方法调用中所需的参数数量必须与函数定义中提供的参数数量相同。
我们应该将两个争论一起发送给capability();它将返回一个语法错误,如下所示。
代码
# 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 < expression to be returned as output >
返回语句可以是一个参数、一个语句或一个值,并且在特定的作业或函数完成时作为输出提供。如果没有写返回语句,声明的函数将返回一个空字符串。
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值保持不变。
这是因为capability的内部变量num与外部变量(接近capability附近)不相同。尽管变量名相同,但它们是具有不同作用域的独立因素。
capability以外部变量为基础,在capability内部是可以访问这些变量的。这些变量的影响是全局的。我们可以在函数内部获取它们的值,但无法修改或更改它们。如果一个变量在函数外部声明为全局变量,那么可以在函数外部改变它的值。
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