Python3函数
函数是一组有组织的可重用代码,用于执行单个相关操作。函数为你的应用程序提供了更好的模块化和高度的代码重用性。
如你所知,Python为你提供了许多内置函数,例如print()等,但是你也可以创建自己的函数。这些功能称为 用户定义的功能。
定义功能
你可以定义函数以提供所需的功能。以下是在Python中定义函数的简单规则。
-
功能块以关键字开头 def 然后是函数名称和括号(())。
-
任何输入参数或参数都应放在这些括号内。你也可以在这些括号内定义参数。
-
函数的第一条语句可以是可选语句-函数的文档字符串或 文档字符串 .
-
每个函数中的代码块均以冒号(:)开头并缩进。
-
语句return [expression]退出函数,可以选择将表达式传递回调用方。没有参数的return语句与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 # 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("This is first call to the user defined function!") printme("Again second call to the same function")
执行以上代码后,将产生以下结果:
This is first call to the user defined function! Again second call to the same function
通过参考与价值
Python语言中的所有参数(参数)均通过引用传递。这意味着,如果你更改了函数中参数所指的内容,则更改也将反映在调用函数中。例如:
#!/usr/bin/python3 # Function definition is here def changeme( mylist ): "This changes a passed list into this function" print ("Values inside the function before change: ", mylist) mylist[2]=50 print ("Values inside the function after change: ", mylist) return # Now you can call changeme function mylist = [10,20,30] changeme( mylist ) print ("Values outside the function: ", mylist)
在这里,我们维护对传递对象的引用,并将值附加在同一对象中。因此,这将产生以下结果:
Values inside the function before change: [10, 20, 30] Values inside the function after change: [10, 20, 50] Values outside the function: [10, 20, 50]
还有一个示例,其中参数通过引用传递,并且引用在调用的函数内部被覆盖。
#!/usr/bin/python3 # Function definition is here def changeme( mylist ): "This changes a passed list into this function" mylist = [1,2,3,4] # This would assi new reference in mylist print ("Values inside the function: ", mylist) return # Now you can call changeme function mylist = [10,20,30] changeme( mylist ) print ("Values outside the function: ", mylist)
参数 mylist 在函数changeme中是本地的。在函数中更改mylist不会影响mylist。该函数什么都不做,最后将产生以下结果:
Values inside the function: [1, 2, 3, 4] Values outside the function: [10, 20, 30]
功能参数
你可以使用以下类型的形式参数来调用函数:
- 必填参数
- 关键字参数
- 默认参数
- 变长参数
必填参数
必需参数是按正确位置顺序传递给函数的参数。在此,函数调用中的参数数量应与函数定义完全匹配。
调用功能 printme() ,你肯定需要传递一个参数,否则会产生如下语法错误:
#!/usr/bin/python3 # 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()
执行以上代码后,将产生以下结果:
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 # 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( str = "My string")
执行以上代码后,将产生以下结果:
My string
以下示例给出了更清晰的图片。请注意,参数的顺序无关紧要。
#!/usr/bin/python3 # Function definition is here def printinfo( name, age ): "This prints a passed info into this function" print ("Name: ", name) print ("Age ", age) return # Now you can call printinfo function printinfo( age = 50, name = "miki" )
执行以上代码后,将产生以下结果:
Name: miki Age 50
默认参数
默认参数是一个参数,如果在函数调用中未提供该参数的值,则该参数将采用默认值。以下示例给出了默认参数的想法,如果未通过默认参数,则会显示默认年龄:
#!/usr/bin/python3 # Function definition is here def printinfo( name, age = 35 ): "This prints a passed info into this function" print ("Name: ", name) print ("Age ", age) return # Now you can call printinfo function printinfo( age = 50, name = "miki" ) printinfo( name = "miki" )
执行以上代码后,将产生以下结果:
Name: miki Age 50 Name: miki Age 35
可变长度参数
你可能需要处理一个函数,以获取比定义函数时指定的参数更多的参数。这些参数称为 可变长度 参数和在函数定义中未命名,这与必需参数和默认参数不同。
具有非关键字变量参数的函数的语法如下:
def functionname([formal_args,] *var_args_tuple ): "function_docstring" function_suite return [expression]
在变量名称之前放置一个星号(*),该变量名称包含所有非关键字变量参数的值。如果在函数调用期间未指定其他参数,则该元组将保持为空。以下是一个简单的示例:
#!/usr/bin/python3 # Function definition is here def printinfo( arg1, *vartuple ): "This prints a variable passed arguments" print ("Output is: ") print (arg1) for var in vartuple: print (var) return # Now you can call printinfo function printinfo( 10 ) printinfo( 70, 60, 50 )
执行以上代码后,将产生以下结果:
Output is: 10 Output is: 70 60 50
匿名函数
这些功能之所以称为匿名功能,是因为它们不是通过使用 def 关键词。你可以使用 lambda 关键字以创建小的匿名函数。
-
Lambda形式可以接受任意数量的参数,但仅以表达式形式返回一个值。它们不能包含命令或多个表达式。
-
匿名函数不能直接调用print,因为lambda需要一个表达式。
-
Lambda函数具有其自己的本地名称空间,并且无法访问其参数列表和全局名称空间中的变量以外的变量。
-
尽管lambda似乎是函数的单行版本,但它们不等同于C或C ++中的内联语句,其目的是出于性能原因在调用期间通过传递函数进行堆栈分配。
语法
的语法 lambda 函数仅包含一个语句,如下所示:
lambda [arg1 [,arg2,.....argn]]:expression
以下是显示如何 lambda 功能形式:
#!/usr/bin/python3 # Function definition is here sum = lambda arg1, arg2: arg1 + arg2 # Now you can call sum as a function print ("Value of total : ", sum( 10, 20 )) print ("Value of total : ", sum( 20, 20 ))
执行以上代码后,将产生以下结果:
Value of total : 30 Value of total : 40
退货声明
语句return [expression]退出函数,可以选择将表达式传递回调用方。没有参数的return语句与return None相同。
下面给出的所有示例均未返回任何值。你可以从函数返回值,如下所示:
#!/usr/bin/python3 # Function definition is here def sum( arg1, arg2 ): # Add both the parameters and return them." total = arg1 + arg2 print ("Inside the function : ", total) return total # Now you can call sum function total = sum( 10, 20 ) print ("Outside the function : ", total )
执行以上代码后,将产生以下结果:
Inside the function : 30 Outside the function : 30
变量范围
可能无法在该程序的所有位置访问该程序中的所有变量。这取决于你在何处声明了变量。
变量的范围决定了程序中可以访问特定标识符的部分。 Python中的变量有两个基本范围:
- 全局变量
- 局部变量
全局变量与局部变量
在函数体内定义的变量具有局部作用域,而在外部定义的变量具有全局作用域。
这意味着局部变量只能在声明它们的函数内部访问,而全局变量可以由所有函数在整个程序主体中访问。调用函数时,在函数内部声明的变量将进入作用域。以下是一个简单的示例:
#!/usr/bin/python3 total = 0 # This is global variable. # Function definition is here def sum( arg1, arg2 ): # Add both the parameters and return them." total = arg1 + arg2; # Here total is local variable. print ("Inside the function local total : ", total) return total # Now you can call sum function sum( 10, 20 ) print ("Outside the function global total : ", total )
执行以上代码后,将产生以下结果:
Inside the function local total : 30 Outside the function global total : 0