Python 函数是返回特定任务的语句块。这个想法是将一些常见或重复完成的任务放在一起并创建一个函数,这样我们就可以进行函数调用来一遍又一遍地重用其中包含的代码,而不是一次又一次地为不同的输入编写相同的代码。
使用函数的一些好处
声明函数的语法是:
Python 函数声明的语法
Python中主要有两类函数。
我们可以使用def关键字在 Python 中创建用户定义的函数。我们可以根据需要向其添加任何类型的功能和属性。
# A simple Python function def fun(): print("Welcome to GFG")
在 Python 中创建函数后,我们可以使用函数名称后跟包含该特定函数参数的括号来调用它。
# A simple Python function def fun(): print("Welcome to GFG") # Driver code to call a function fun()
输出:
Welcome to GFG
如果您有 C/C++ 或 Java 经验,那么您必须考虑函数的返回类型和参数的**数据类型。这在 Python 中也是可能的(特别是对于 Python 3.5 及更高版本)。
定义和调用带参数的函数
def function_name(parameter: data_type) -> return_type: """Docstring""" # body of the function return expression
以下示例使用了您将在本文后面学到的参数和参数,因此如果您不理解,可以再次返回。
def add(num1: int, num2: int) -> int: """Add two numbers""" num3 = num1 + num2 return num3 # Driver code num1, num2 = 5, 15 ans = add(num1, num2) print(f"The addition of {num1} and {num2} results {ans}.")
The addition of 5 and 15 results 20.
注意:以下示例使用语法 1 定义,尝试将其转换为语法 2 进行练习。
# some more functions def is_prime(n): if n in [2, 3]: return True if (n == 1) or (n % 2 == 0): return False r = 3 while r * r <= n: if n % r == 0: return False r += 2 return True print(is_prime(78), is_prime(79))
False True
参数是在函数括号内传递的值。函数可以有任意数量的参数,并用逗号分隔。
在此示例中,我们将在 Python 中创建一个简单的函数,以检查作为参数传递给该函数的数字是偶数还是奇数。
# A simple Python function to check # whether x is even or odd def evenOdd(x): if (x % 2 == 0): print("even") else: print("odd") # Driver code to call the function evenOdd(2) evenOdd(3)
even odd
Python 支持在函数调用时传递的各种类型的参数。在 Python 中,我们有以下 4 种类型的函数参数。
让我们详细讨论每种类型。
默认参数是一种参数,如果在函数调用中未提供该参数的值,则该参数采用默认值。以下示例说明了默认参数。
# Python program to demonstrate # default arguments def myFun(x, y=50): print("x: ", x) print("y: ", y) # Driver code (We call myFun() with only # argument) myFun(10)
x: 10 y: 50
与 C++ 默认参数一样,函数中任意数量的参数都可以有默认值。但是一旦我们有了默认参数,它右边的所有参数也必须有默认值。
这个想法是允许调用者指定带有值的参数名称,以便调用者不需要记住参数的顺序。
# Python program to demonstrate Keyword Arguments def student(firstname, lastname): print(firstname, lastname) # Keyword arguments student(firstname='Geeks', lastname='Practice') student(lastname='Practice', firstname='Geeks')
Geeks Practice Geeks Practice
我们在函数调用期间使用了Position 参数,以便将第一个参数(或值)分配给 name,将第二个参数(或值)分配给age。通过更改位置,或者如果您忘记了位置的顺序,这些值可能会用在错误的位置,如下面的案例 2 示例所示,其中 27 分配给姓名,Suraj 分配给年龄。
def nameAge(name, age): print("Hi, I am", name) print("My age is ", age) # You will get correct output because # argument is given in order print("Case-1:") nameAge("Suraj", 27) # You will get incorrect output because # argument is not in order print("\nCase-2:") nameAge(27, "Suraj")
Case-1: Hi, I am Suraj My age is 27 Case-2: Hi, I am 27 My age is Suraj
在 Python 任意关键字参数中,*args 和 **kwargs可以使用特殊符号将可变数量的参数传递给函数。有两个特殊符号:
示例 1:可变长度非关键字参数
# Python program to illustrate # *args for variable number of arguments def myFun(*argv): for arg in argv: print(arg) myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')
Hello Welcome to GeeksforGeeks
示例 2:可变长度关键字参数
# Python program to illustrate # *kwargs for variable number of keyword arguments def myFun(**kwargs): for key, value in kwargs.items(): print("%s == %s" % (key, value)) # Driver code myFun(first='Geeks', mid='for', last='Geeks')
first == Geeks mid == for last == Geeks
函数后面的第一个字符串称为文档字符串或简称Docstring 。这用于描述函数的功能。在函数中使用文档字符串是可选的,但它被认为是一个很好的实践。
以下语法可用于打印函数的文档字符串:
Syntax: print(function_name.__doc__)
示例:将 Docstring 添加到函数中
# A simple Python function to check # whether x is even or odd def evenOdd(x): """Function to check if the number is even or odd""" if (x % 2 == 0): print("even") else: print("odd") # Driver code to call the function print(evenOdd.__doc__)
Function to check if the number is even or odd
在另一个函数内部定义的函数称为内部函数或嵌套函数。嵌套函数能够访问封闭范围的变量。使用内部函数是为了保护它们免受函数外部发生的一切影响。
# Python program to``# demonstrate accessing of``# variables of nested functions` `def` `f1():`` ``s ``=` `'I love GeeksforGeeks'`` ` ` ``def` `f2():`` ``print``(s)`` ` ` ``f2()` `# Driver's code``f1()
# Python program to # demonstrate accessing of # variables of nested functions def f1(): s = 'I love GeeksforGeeks' def f2(): print(s) f2() # Driver's code f1()
在Python中,匿名函数意味着函数没有名称。我们已经知道 def 关键字用于定义普通函数,而 lambda 关键字用于创建匿名函数。
# Python code to illustrate the cube of a number # using lambda function def cube(x): return x*x*x cube_v2 = lambda x : x*x*x print(cube(7)) print(cube_v2(7))
343 343
函数返回语句用于退出函数并返回到函数调用者,并将指定的值或数据项返回给调用者。return 语句的语法是:
return [expression_list]
return 语句可以包含变量、表达式或在函数执行结束时返回的常量。如果 return 语句中不存在上述任何一项,则返回 None 对象。
示例: Python 函数返回语句
def square_value(num): """This function returns the square value of the entered number""" return num**2 print(square_value(2)) print(square_value(-4))
4 16
需要注意的一件重要事情是,在 Python 中,每个变量名都是一个引用。当我们将变量传递给函数时,就会创建对该对象的新引用。Python 中的参数传递与 Java 中的引用传递相同。
# Here x is a new reference to same list lst def myFun(x): x[0] = 20 # Driver Code (Note that lst is modified # after function call. lst = [10, 11, 12, 13, 14, 15] myFun(lst) print(lst)
[20, 11, 12, 13, 14, 15]
当我们传递引用并将接收到的引用更改为其他内容时,传递的参数和接收的参数之间的连接就会断开。例如,考虑以下程序:
def myFun(x): # After below line link of x with previous # object gets broken. A new object is assigned # to x. x = [20, 30, 40] # Driver Code (Note that lst is not modified # after function call. lst = [10, 11, 12, 13, 14, 15] myFun(lst) print(lst)
[10、11、12、13、14、15]
另一个例子表明,如果我们分配一个新值(在函数内部),引用链接就会被破坏。
def myFun(x): # After below line link of x with previous # object gets broken. A new object is assigned # to x. x = 20 # Driver Code (Note that x is not modified # after function call. x = 10 myFun(x) print(x)
10
练习:尝试猜测以下代码的输出。
def swap(x, y): temp = x x = y y = temp # Driver code x = 2 y = 3 swap(x, y) print(x) print(y)
2 3
原文链接:codingdict.net