11.python的函数(二)——灵活的参数设置

为什么起这个题目呢?

这是我学了参数设置后最大的感受,就是灵活!但是灵活的另一面就是复杂。相对于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)参数组合

函数中这四种参数可以一起使用。使用时,要遵循以下顺序,必选参数,默认参数,可变参数,关键字参数。


希望有志同道合的小伙伴关注我的公众平台,我们一起交流,欢迎您的批评指正。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值