Python 函数


Python 函数是返回特定任务的语句块。这个想法是将一些常见或重复完成的任务放在一起并创建一个函数,这样我们就可以进行函数调用来一遍又一遍地重用其中包含的代码,而不是一次又一次地为不同的输入编写相同的代码。

使用函数的一些好处

  • 提高代码可读性
  • 提高代码的可重用性

Python 函数声明

声明函数的语法是:

Python 函数

Python 函数声明的语法

Python 中的函数类型

Python中主要有两类函数。

  • 内置库函数:这些是Python 中可供使用的标准函数。
  • 用户自定义函数:我们可以根据自己的需求创建自己的函数。

在 Python 中创建函数

我们可以使用def关键字在 Python 中创建用户定义的函数。我们可以根据需要向其添加任何类型的功能和属性。

  • Python3
# A simple Python function

def fun():
print("Welcome to GFG")

调用 Python 函数

在 Python 中创建函数后,我们可以使用函数名称后跟包含该特定函数参数的括号来调用它。

  • Python3
# A simple Python function
def fun():
    print("Welcome to GFG")


# Driver code to call a function
fun()

输出:

Welcome to GFG

带参数的 Python 函数

如果您有 C/C++ 或 Java 经验,那么您必须考虑函数的返回类型和参数的**数据类型。这在 Python 中也是可能的(特别是对于 Python 3.5 及更高版本)。

定义和调用带参数的函数

def function_name(parameter: data_type) -> return_type:
    """Docstring"""
    # body of the function
    return expression

以下示例使用了您将在本文后面学到的参数和参数,因此如果您不理解,可以再次返回。

  • Python3
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 进行练习。

  • Python3
# 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 函数参数

参数是在函数括号内传递的值。函数可以有任意数量的参数,并用逗号分隔。

在此示例中,我们将在 Python 中创建一个简单的函数,以检查作为参数传递给该函数的数字是偶数还是奇数。

  • Python3
# 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 支持在函数调用时传递的各种类型的参数。在 Python 中,我们有以下 4 种类型的函数参数。

  • 默认参数
  • 关键字参数(命名参数)
  • 位置参数
  • 任意参数(可变长度参数 *args 和 **kwargs)

让我们详细讨论每种类型。

默认参数

默认参数是一种参数,如果在函数调用中未提供该参数的值,则该参数采用默认值。以下示例说明了默认参数。

  • Python3
# 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++ 默认参数一样,函数中任意数量的参数都可以有默认值。但是一旦我们有了默认参数,它右边的所有参数也必须有默认值。

关键字参数

这个想法是允许调用者指定带有值的参数名称,以便调用者不需要记住参数的顺序。

  • Python3
# 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 分配给年龄。

  • Python3
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可以使用特殊符号将可变数量的参数传递给函数。有两个特殊符号:

  • Python 中的 *args(非关键字参数)
  • **Python 中的 kwargs(关键字参数)

示例 1:可变长度非关键字参数

  • Python3
# 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:可变长度关键字参数

  • Python3
# 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 添加到函数中

  • Python3
# 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 函数

在另一个函数内部定义的函数称为内部函数或嵌套函数。嵌套函数能够访问封闭范围的变量。使用内部函数是为了保护它们免受函数外部发生的一切影响。

  • Python3
# 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 中的匿名函数

在Python中,匿名函数意味着函数没有名称。我们已经知道 def 关键字用于定义普通函数,而 lambda 关键字用于创建匿名函数。

  • Python3
# 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

Python函数中的返回语句

函数返回语句用于退出函数并返回到函数调用者,并将指定的值或数据项返回给调用者。return 语句的语法是:

return [expression_list]

return 语句可以包含变量、表达式或在函数执行结束时返回的常量。如果 return 语句中不存在上述任何一项,则返回 None 对象。

示例: Python 函数返回语句

  • Python3
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 中的引用传递相同。

  • Python3
# 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]

当我们传递引用并将接收到的引用更改为其他内容时,传递的参数和接收的参数之间的连接就会断开。例如,考虑以下程序:

  • Python3
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]

另一个例子表明,如果我们分配一个新值(在函数内部),引用链接就会被破坏。

  • Python3
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

练习:尝试猜测以下代码的输出。

  • Python3
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