📜  Python函数

📅  最后修改于: 2022-05-13 01:54:18.561000             🧑  作者: Mango

Python函数

Python Functions是一组相关语句,旨在执行计算、逻辑或评估任务。这个想法是将一些常见或重复完成的任务放在一起并制作一个函数,这样我们就可以一次又一次地为不同的输入编写相同的代码,而不是一次又一次地调用函数来重用其中包含的代码。

函数既可以是内置的,也可以是用户定义的。它有助于程序简洁、不重复和有条理。

句法:

def function_name(parameters):
    """docstring"""
    statement(s)
    return expression

创建函数

我们可以使用def关键字创建一个Python函数。

示例: Python创建函数

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


Python3
# A simple Python function
 
def fun():
  print("Welcome to GFG")
         
# Driver code to call a function
fun()


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)


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)


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')


Python
# Python program to illustrate
# *args for variable number of arguments
 
 
def myFun(*argv):
    for arg in argv:
        print(arg)
 
 
myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')


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')


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__)


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))


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)


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)


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 lst is not modified
# after function call.
x = 10
myFun(x)
print(x)


Python3
def swap(x, y):
    temp = x
    x = y
    y = temp
 
 
# Driver code
x = 2
y = 3
swap(x, y)
print(x)
print(y)


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))


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调用函数

Python3

# A simple Python function
 
def fun():
  print("Welcome to GFG")
         
# Driver code to call a function
fun()
输出
Welcome to GFG

函数的参数

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

示例:带参数的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支持可以在函数调用时传递的各种类型的参数。让我们详细讨论每种类型。

默认参数

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

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')

可变长度参数

在Python中,我们可以使用特殊符号将可变数量的参数传递给函数。有两个特殊符号:

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

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

Python

# 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

文档字符串

函数后面的第一个字符串简称为 Document字符串或 Docstring。这用于描述函数的函数。在函数中使用 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

退货声明

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

Syntax: 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中,每个变量名都是一个引用。当我们将变量传递给函数时,会创建对该对象的新引用。 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 lst 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

匿名函数:

在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

函数中的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()
输出
I love GeeksforGeeks

快速链接 :

  • Python函数测验
  • Python中方法和函数的区别
  • Python中的第一类函数
  • 最近关于Python函数的文章。