为什么起这个题目呢?
这是我学了参数设置后最大的感受,就是灵活!但是灵活的另一面就是复杂。相对于c语言传入参数的规范性(局限性),python提供了各种参数输入方式。不多说,开始介绍。
1)默认参数
所谓默认参数,就是为函数输入参数提供一个默认值。这种参数,对于单参函数看起来是意义不大的,但是对于多传入参数的函数来说,就意义重大了。因为,在实际编程中经常遇到这样一种情况。某个函数需要多次重复调用。但是只需要更改一个参数。其他的参数保持不变。比如:输入一个学生的信息。他的班级信息参数在一定范围内,是不需要更改的。需要更改的是,他的姓名,ID等信息。这样引入默认参数就很有必要了。我们可以将班级信息,设为默认参数。这样在每次输入学生信息的时候,只需要将姓名,ID参数输入就可以了,无需再输入班级了。
(1)定义方法:
示例代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def enroll(name,ID,grade=3,age=18):
print('the student name:',name)
print('the student ID:',ID)
print('the student grade:', grade)
print('the student age:', age)
enroll('Tom',1314090511)
输出结果如下:
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/练习/练习.py
('the student name:', 'Tom')
('the student ID:', 1314090511)
('the student grade:', 3)
('the student age:', 18)
(2)调用方法(需要改默认参数)
直接按顺序输入需要更改的默认的参数。如下:
enroll('Jack',1314090512,4)
当需要修改间隔参数时候,需要写上参数名。如下
enroll('Rose',1314090513,age=19)
这里要注意一点:
默认参数一定要设置为固定参数(指向不变对象)。
否则默认参数,会随着程序的执行而改变。切记切记!
示例代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def add_end(L=[]):
L.append('end')
return L
print add_end([1,2,3])
print add_end()
print add_end()
输出结果如下:
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/练习.py
[1, 2, 3, 'end']
['end']
['end', 'end']
为什么最后一组输出的两个end??
因为,在这里'[]'也是一个变量。随着上一个函数的执行,此时的‘[]‘,已经被赋给了一个值‘end’。所以每次调用后,'[]'这个参数都会被改变。所以在这里就不可以让[]做为一个空列表。我们要利用None这个不变对象改变。示例代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def add_end(L=None):
if L is None:
L=[]
L.append('end')
return L
print add_end([1,2,3])
print add_end()
print add_end()
输出结果如下:
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/练习.py
[1, 2, 3, 'end']
['end']
['end']
2)可变参数
可变参数将python的灵活性表现的淋漓尽致。
我们这里计算一个平方和公式。源码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
print calc(1,2,3)
这样我们就可以直接输入参数即可,无需再定义一个元组或者列表了。
如果已经有一个元组或者列表,我们可以这样输入参数。
代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
nums = [1, 2, 3]
print calc(*nums)
这样就无需再逐个输入了。
总结:
元组(元素组合),列表都相当于C语言中的数组,都是连续存储的数据结构!!!(数据结构没白学,联系起来了)。都可以用指针来取放。我尝试了一下,代码如下:
def add_enroll(*infor):
print('the student name:', infor[0])
print('the student ID:', infor[1])
print('the student grade:', infor[2])
print('the student age:', infor[3])
add_enroll('Tom',1314090511,2,18)
输出结果如下:
('the student name:', 'Tom')
('the student ID:', 1314090511)
('the student grade:', 2)
('the student age:', 18)
结果验证了我的想法。
3)关键词参数
与可变参数类似,可变参数是将一组元素封装为一个列表或者是元组。关键词参数是将一组元素封装成字典。
示例代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def add_enroll(name,ID,age,**other):
print name
print ID
print age
print oth
add_enroll('Rose',1314090512,18,sex='female')
这里的**other就是一个关键词参数。
再调用函数时,既可以只输入,必选参数,也可以输入多个参数。示例代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def add_enroll(name,ID,age,**oth):
print name
print ID
print age
print oth
add_enroll('Rose',1314090512,18,sex='female',grade=3)
输出结果:
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/练习.py
Rose
1314090512
18
{'grade': 3, 'sex': 'female'}
Process finished with exit code 0
可以看到,输入的两个键对,输出组成了一个字典。你可能会问,这个功能有什么用呢?这个功能可以扩展函数的范围,比如:在填写信息时,经常会有备注什么的,有了这个关键词参数。我们就可以在没有限制的情况下,补充说明一些内容。这个也体现了,python的灵活性。一提到灵活,我就感觉python好像不怎么“听话”。适合一些思维跳跃的程序员。
同可变参数类似,当现有一个字典时候,可将字典通过**导入到函数里。示例代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def add_enroll(name,ID,age,**oth):
print name
print ID
print age
print oth
other={'grade': 3, 'sex': 'female'}
add_enroll('Rose',1314090512,18,**other)
4)参数组合
函数中这四种参数可以一起使用。使用时,要遵循以下顺序,必选参数,默认参数,可变参数,关键字参数。