📅  最后修改于: 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