📜  Python中的函数

📅  最后修改于: 2020-01-18 14:55:57             🧑  作者: Mango

函数是一组语句,这些语句接受输入,进行一些特定的计算并产生输出。这个想法是将一些通常重复执行的任务放在一起并创建一个函数,这样我们就可以调用函数,而不是为不同的输入一次又一次地编写相同的代码。
Python提供了诸如print()等内置函数,但是我们也可以创建自己的函数。这些功能称为用户定义功能。

# Python函数,检查x是基数或者偶数
def evenOdd( x ):
    if (x % 2 == 0):
        print "偶数"
    else:
        print "基数"
# 测试代码
evenOdd(2)
evenOdd(3)

输出:

偶数
基数

通过引用传递还是通过值传递?
需要注意的重要一件事是,在Python中,每个变量名都是一个引用。当我们将变量传递给函数时,将创建对该对象的新引用。Python中传递的参数与Java中传递的参数相同。

# x是一个新的引用
def myFun(x):
   x[0] = 20
# 测试代码
lst = [10, 11, 12, 13, 14, 15]
myFun(lst);
print(lst)

输出:

[20,11,12,12,13,14,15]

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

def myFun(x):
   # 一个新的list被赋值给x
   x = [20, 30, 40]
# 测试代码
lst = [10, 11, 12, 13, 14, 15]
myFun(lst);
print(lst)

输出:

[10,11,12,13,13,14,15]

另一个示例说明如果我们分配一个新值(在函数内部),则引用链接断开。

def myFun(x):
   # 一个新的值被赋给x
   x = 20
# 测试代码
x = 10
myFun(x);
print(x)

输出:

10

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

def swap(x, y):
    temp = x;
    x = y;
    y = temp;
# 测试代码
x = 2
y = 3
swap(x, y)
print(x)
print(y)

输出:

2
3

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

# Python代码,展示函数的默认参数
def myFun(x, y=50):
    print("x: ", x)
    print("y: ", y)
# 测试结果
myFun(10)

输出:

('x:',10)
('y:',50)

像C++默认参数一样,函数中任意数量的参数都可以具有默认值。但是一旦有了默认参数,其右边的所有参数也必须具有默认值。
关键字参数:
思想是允许调用者使用值指定参数名称,以便调用者无需记住参数的顺序。

# Python程序,展示关键字参数
def student(firstname, lastname):
     print(firstname, lastname)
# 关键字参数
student(firstname ='芒果', lastname ='Practice')
student(lastname ='Practice', firstname ='芒果')

输出:

('芒果', 'Practice')
('芒果', 'Practice')

可变长度参数:
我们可以同时使用普通和关键字可变长的参数。

# Python代码展示通过*args实现可变长参数
def myFun(*argv):
    for arg in argv:
        print (arg)
myFun('Hello', '欢迎', 'to', '芒果文档')

输出:

Hello
欢迎
to
芒果文档

 

# Python展示通过*kargs使用可变长关键字参数
def myFun(**kwargs):
    for key, value in kwargs.items():
        print ("%s == %s" %(key, value))
# Driver code
myFun(first ='芒果', mid ='for', last='芒果')

输出:

last == 芒果
mid == for
first == 芒果

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

# Python展示使用lambda创建匿名函数
cube = lambda x: x*x*x
print(cube(7))

输出:

343