Python 函数

Python 函数

函数是一块有组织、可重复使用的代码,用于执行单一且相关的操作。函数为应用程序提供更好的模块化和高度的代码复用性。

构建处理逻辑的自上而下方法涉及定义独立可重用函数的块。函数可以通过传递所需的数据(称为 参数参数 )从任何其他函数调用。被调用的函数将其结果返回给调用环境。

Python 函数

Python函数的类型

Python提供以下类型的函数−

  • 内建函数

  • 在内建模块中定义的函数

  • 用户自定义函数

Python的标准库包括许多内建函数。Python的一些内建函数有print(),int(),len(),sum()等。这些函数始终可用,因为它们在启动Python解释器时加载到计算机的内存中。

标准库还捆绑了许多模块。每个模块定义了一组函数。这些函数不会立即可用。您需要从它们各自的模块中将它们导入到内存中。

除了内建函数和内建模块中的函数之外,您还可以创建自己的函数。这些函数称为用户自定义函数。

Python定义函数

您可以定义自定义函数以提供所需的功能。以下是在Python中定义函数的简单规则。

  • 函数块以关键字 def 开头,后跟函数名和括号(())。

  • 任何输入参数或参数都应放在这些括号内。您还可以在这些括号内定义参数。

  • 函数的第一条语句可以是可选语句;函数的文档字符串或文档字符串。

  • 每个函数内的代码块以冒号(:)开头,并且以缩进方式编写。

  • 语句 return [expression] 退出函数,可选择将表达式传回给调用者。没有参数的 return 语句与 return None 相同。

语法

def functionname( parameters ):
   "function_docstring"
   function_suite
   return [expression]

默认情况下,参数具有位置行为,您需要按照它们的定义顺序提供信息。

函数定义后,您可以通过从另一个函数中调用它或直接从Python提示符中调用它来执行它。

示例

以下示例显示了如何定义一个函数greetings()。括号为空,所以没有任何参数。

第一行是文档字符串。函数块以return语句结束。当调用此函数时,将打印出Hello world消息。

def greetings():
   "This is docstring of greetings function"
   print ("Hello World")
   return
greetings()

调用函数

定义函数只是给它一个名字,指定函数中要包含的参数并结构化代码块。

一旦函数的基本结构确定,您可以通过从另一个函数或直接从Python提示符调用它来执行它。以下是调用printme()函数的示例−

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;
# Now you can call printme function
printme("I'm first call to user defined function!")
printme("Again second call to the same function")

当上述代码执行时,它产生以下输出:输出

I'm first call to user defined function!
Again second call to the same function

按引用传递 vs 值传递

Python的 函数调用机制 与C和C++不同。有两种主要的函数调用机制: 按值传递按引用传递

当变量传递给函数时,函数对其做了什么?如果对其变量的任何更改不会反映在实际参数中,则使用按值传递机制。另一方面,如果更改反映在实际参数中,则使用按引用传递机制。

Python 函数

C/C++ 函数被称为按值调用 . 当调用 C/C++ 函数时,实际参数的值会被复制到代表形式参数的变量中。如果函数修改了形式参数的值,它不会反映传递给它的变量。

Python 使用引用传递机制 . 在 Python 中,变量是内存中对象的标签或引用,实际参数和形式参数都实际上指向内存中的同一个对象。我们可以通过在传递之前和之后检查传递变量的 id() 来验证这一事实。

def testfunction(arg):
   print ("ID inside the function:", id(arg))
var="Hello"
print ("ID before passing:", id(var))
testfunction(var)

如果上述代码被执行,函数之前和内部的id()是相同的。

ID before passing: 1996838294128
ID inside the function: 1996838294128

行为还取决于传递的对象是可变的还是不可变的。Python 数值对象是不可变的。当传递一个数值对象时,然后函数改变形参的值时,实际上是在内存中创建了一个新对象,原始变量保持不变。

def testfunction(arg):
   print ("ID inside the function:", id(arg))
   arg=arg+1
   print ("new object after increment", arg, id(arg))

var=10
print ("ID before passing:", id(var))
testfunction(var)
print ("value after function call", var)

它将产生以下的 输出

ID before passing: 140719550297160
ID inside the function: 140719550297160
new object after increment 11 140719550297192
value after function call 10

让我们现在将一个可变对象(例如列表或字典)传递给一个函数。它也是按引用传递的,因为在传递之前和之后的列表的id()是相同的。然而,如果我们在函数内部修改列表,它的全局表示也会反映出变化。

在这里,我们传递了一个列表,添加了一个新项,并查看原始列表对象的内容,我们会发现已经改变了。

def testfunction(arg):
   print ("Inside function:",arg)
   print ("ID inside the function:", id(arg))
   arg=arg.append(100)

var=[10, 20, 30, 40]
print ("ID before passing:", id(var))
testfunction(var)
print ("list after function call", var)

它将产生以下

输出

ID before passing: 2716006372544
Inside function: [10, 20, 30, 40]
ID inside the function: 2716006372544
list after function call [10, 20, 30, 40, 100]

函数参数

在调用函数时,函数的过程通常依赖于所提供的某些数据。在定义函数时,您必须给出一组变量,用于收集传递给函数的数据。括号中的变量称为形参。

在调用函数时,必须提供每个形参的值,这些值称为实参。

Python 函数

示例

让我们修改问候函数,将名字作为一个参数传递给它。在调用函数时,传递给它的字符串将成为函数内部的名字变量。

def greetings(name):
   "This is docstring of greetings function"
   print ("Hello {}".format(name))
   return

greetings("Samay")
greetings("Pratima")
greetings("Steven")

它将会产生以下的 输出

Hello Samay
Hello Pratima
Hello Steven

返回值的函数

在函数定义的最后一条语句中使用 return 关键字表示函数块的结束,程序流程返回到调用函数。尽管在块的最后一条语句之后减少了缩进也意味着返回,但使用显式的return语句是一个好的习惯。

除了控制流程之外,函数还可以将表达式的值返回给调用函数。返回的表达式的值可以存储在一个变量中进行进一步处理。

示例

让我们定义一个add()函数。它将传递给它的两个值相加并返回相加结果。返回的值存储在一个叫做result的变量中。

def add(x,y):
   z=x+y
   return z

a=10
b=20
result = add(a,b)
print ("a = {} b = {} a+b = {}".format(a, b, result))

它将产生以下输出−

a = 10 b = 20 a+b = 30

函数参数类型

根据在定义Python函数时参数的声明方式,可以将其归类为以下几种类型:

  • 位置参数或必需参数

  • 关键字参数

  • 默认参数

  • 只能位置参数

  • 只能关键字参数

  • 任意或可变长度参数

在接下来的几章中,我们将详细讨论这些函数参数。

参数顺序

函数可以具有上述任何类型的参数。但是,参数必须按照以下顺序进行声明:

  • 参数列表以只能位置参数开始,后跟斜杠 (/) 符号。

  • 然后是常规位置参数,可以作为关键字参数调用,也可以不作为关键字参数调用。

  • 然后可能有一个或多个具有默认值的参数。

  • 接下来是用单个星号前缀表示的任意位置参数,它被视为元组。

  • 如果函数有任何只能关键字参数,请在它们的名称前加上一个星号。其中一些只能关键字参数可能有默认值。

  • 括号中最后是具有两个星号**的参数,用于接受任意数量的关键字参数。

下图显示了形式参数的顺序:

Python 函数

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程