Python 3 – 函数

Python 3 – 函数

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

如您所知,Python给您提供了许多内置函数,如print()等,但您也可以创建自己的函数。这些函数称为 用户定义的函数。

定义函数

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

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

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

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

  • 每个函数中的代码块以冒号 (:) 开始,并进行缩进。

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

语法

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

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

示例

以下函数接受字符串作为输入参数,并将其打印在标准屏幕上。

def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

调用函数

定义函数给它命名,指定要包含在函数中的参数,并构造代码块。

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

#!/usr/bin/python3

# 在此处定义函数
def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

#现在您可以调用printme函数
printme("这是对用户定义函数的第一次调用!")
printme("再次调用相同的函数")

运行上述代码时,它将产生以下结果−

这是对用户定义函数的第一次调用!
再次调用相同的函数

传递引用 vs 值

Python语言中的所有参数(参数)均按引用传递。这意味着如果您更改函数内部参数所引用的内容,则更改也会反映在调用函数中。例如−

#!/usr/bin/python3

# 在此处定义函数
def changeme( mylist ):
   "This changes a passed list into this function"
   print ("change之前函数内部的值: ", mylist)

   mylist[2]=50
   print ("change之后函数内部的值: ", mylist)
   return

#现在您可以调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print ("函数外的值: ", mylist)

在这里,我们保留了传递对象的引用,并在同一对象中添加值。因此,这将产生以下结果−

函数内部更改前的值:[10,20,30]
函数内部更改后的值:[10,20,50]
函数外部的值:[10,20,50]

还有一个例子,其中参数通过引用传递,并且引用被重新分配在被调用的函数内部。

#!/usr/bin/python3

# 函数定义在这里
def changeme ( mylist):
   “这将把传递的列表更改为此函数”
   mylist = [1,2,3,4]#这将在mylist中分配新引用
   print(“函数内的值:”,mylist)
   返回

#现在可以调用changeme函数
mylist = [10,20,30]
changeme(mylist)
print(“函数外的值:”,mylist)

参数 mylist 是函数changeme本地的。在函数内更改mylist不会影响mylist。该函数没有任何效果,最终会产生以下结果−

函数内的值:[1, 2, 3, 4]
函数外的值:[10, 20, 30]

函数参数

可以使用以下类型的正式参数调用函数−

  • 请求参数
  • 关键字参数
  • 默认参数
  • 可变长度参数

请求参数

请求参数是按正确的位置顺序传递给函数的参数。在这里,函数调用中的参数数量应与函数定义完全匹配。

要调用函数 printme() ,您肯定需要传递一个参数,否则它会产生语法错误,如下所示−

#!/usr/bin/python3

# 函数定义在这里
def printme(str):
   “这会将传递的字符串打印到此函数中”
   print (str)
   返回

#现在可以调用printme函数
printme()

执行上述代码时,将产生以下结果−

Traceback (most recent call last):
   File "test.py", line 11, in <module>
      printme();
TypeError: printme() takes exactly 1 argument (0 given)

关键字参数

关键字参数与函数调用相关。在函数调用中使用关键字参数时,调用者通过参数名称标识参数。

这允许您跳过参数或将它们放置在不同的顺序中,因为Python解释器能够使用提供的关键字将值与参数匹配。您还可以通过以下方式对 printme() 函数进行关键字调用−

#!/usr/bin/python3

# 函数定义在这里
def printme(str):
   “这将把传递的字符串打印到此函数中”
   print (str)
   返回

#现在可以调用printme函数
printme(str = “My string”)

执行上述代码时,将产生以下结果−

My string

以下示例提供了更清晰的图像。请注意,参数的顺序没有关系。

#!/usr/bin/python3

# 函数定义在这里
def printinfo(name,age):
   “这将在此函数中传递的信息打印出来”
   print (“姓名:”,name)
   print (“年龄”,年龄)
   返回

#现在可以调用printinfo函数
printinfo(年龄=50,姓名=“米凯”)

执行上述代码时,将产生以下结果−

姓名:miki
年龄:50

默认参数

默认参数是指在函数调用时,如果没有为该参数提供值,则假定该参数具有默认值。以下示例给出了默认参数的概念,如果未传递年龄,则打印默认的年龄:

#!/usr/bin/python3

# 函数定义在这里
def printinfo(name,age=35):
    “将传递的信息打印到此函数中”
    print(“姓名:”,name)
    print(“年龄”,age)
    回报

#现在您可以调用printinfo函数
printinfo(age=50,name="miki")
printinfo(name="miki")

当执行上述代码时,它会产生以下结果-:

姓名:miki
年龄:50
姓名:miki
年龄:35

可变长度参数

在定义该函数时,您可能需要为更多的参数处理该函数。这些参数称为变量长度参数,并且与所需和默认参数不同,在函数定义中没有命名。

具有非关键字变量参数的函数的语法如下:

def functionname(max_args,*var_args_tuple):
    “function_docstring”
    function_suite
    return [expression]

在保存所有非关键字变量参数的值的变量名之前放置一个星号(*)。如果在函数调用期间未指定其他参数,则该元组保持为空。以下是一个简单的示例-:

#!/usr/bin/python3

# 函数定义在这里
def printinfo(arg1,*vartuple):
    “这会打印一个可变的传递参数”
    print(“输出是:”)
    print(arg1)

    for var in vartuple:
      print(var)
    回报

#现在您可以调用printinfo函数
printinfo(10)
printinfo(70,60,50)

当执行上述代码时,它会产生以下结果-:

输出是:
10
输出是:
70
60
50

匿名函数

这些函数被称为匿名函数,因为它们不是使用 def 关键字以标准方式声明的。您可以使用 lambda 关键字创建小型匿名函数。

  • Lambda形式可以采用任意数量的参数,但只返回一个表达式形式的值。它们不能包含命令或多个表达式。

  • 匿名函数不能直接调用打印,因为Lambda需要表达式。

  • lambda函数具有自己的本地命名空间,不能访问除参数列表中的变量和全局命名空间中的变量以外的变量。

  • 虽然看起来lambda是C或C ++中内联语句的一行版本,但它们与在调用期间通过传递函数进行堆栈分配的目的不同,用于性能原因。

语法

lambda 函数的语法仅包含一个语句,如下所示-:

lambda [arg1 [,arg2,.....argn]]:expression

以下是一个示例,演示了 lambda 函数形式的工作原理:

#!/usr/bin/python3

# 函数定义在这里
sum = lambda arg1,arg2: arg1 + arg2

#现在您可以将sum作为函数调用
print(“总值:”,sum(10,20))
print(“总值:”,sum(20,20))

当执行以上代码时,会产生以下结果 –

Value of total :  30
Value of total :  40

返回语句

return [expression]语句退出一个函数,并可向调用者返回表达式。没有参数的返回语句与return None相同。

下面的所有示例都不返回任何值。您可以按以下方式从函数中返回值 –

#!/usr/bin/python3

# 在这里定义函数
def sum( arg1, arg2 ):
   # 将参数相加并返回它们。
   total = arg1 + arg2
   print ("Inside the function : ", total)
   return total

# 您现在可以调用sum函数
total = sum( 10, 20 )
print ("Outside the function : ", total )

当执行以上代码时,会产生以下结果 –

Inside the function :  30
Outside the function :  30

变量的作用域

程序中的所有变量可能无法在程序的所有位置都可访问。这取决于您在哪里声明变量。

变量的作用域确定了您可以访问特定标识符的程序部分。Python中有两个基本的变量作用域 –

  • 全局变量
  • 局部变量

全局变量与局部变量

在函数体内定义的变量具有局部作用域,而在外面定义的变量具有全局作用域。

这意味着局部变量只能在声明它的函数内部访问,而全局变量可以被程序体内的所有函数访问。当您调用函数时,其中声明的变量被引入到作用域中。以下是一个简单的示例 –

#!/usr/bin/python3

total = 0   # 这是全局变量。
# 在这里定义函数
def sum( arg1, arg2 ):
   # 将参数相加并返回它们。
   total = arg1 + arg2; # 这里total是局部变量。
   print ("Inside the function local total : ", total)
   return total

# 您现在可以调用sum函数
sum( 10, 20 )
print ("Outside the function global total : ", total )

当执行以上代码时,会产生以下结果 –

Inside the function local total :  30
Outside the function global total :  0

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程