您的位置:首页 > 编程语言 > Python开发

Python基础数据类型-函数传参详解

2018-02-22 20:08 1601 查看
                      Python基础数据类型-函数传参详解

                                            作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.位置参数

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7 #站在函数定义的角度上
8 def func(a,b,c):  #位置参数,如果这里定义了就必须要传的参数
9     print(a,b,c)
10
11
12 #站在调用函数的角度上
13 func(1,22,333)              #按照位置传参
14 func(b = 1,a = 2,c=3)       #按照关键字传参
15 func(100,c = 200,b=300)     #混用 : 必须先按照位置传参,再按照关键字传参
16
17
18
19
20 #以上代码执行结果如下:
21 1 22 333
22 2 1 3
23 100 300 200


二.默认参数

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7 default = 'boy'
8
9 #站在定义函数的角度上
10 def welcome(name,sex=default):  #默认参数,sex关键字就是默认参数,默认值为'boy'
11     print('welcome,%s,sex: %s'%(name,sex))
12
13 default = 'woman'
14
15 welcome('周杰伦')
16 welcome('邓紫棋','girl')
17 welcome(sex='boy',name='尹正杰')
18
19
20
21 def LookOut(yzj = []):
22     yzj.append("yinzhengjie")
23     print(yzj)
24
25 LookOut()           #第一次调用,默认传入的是一个空列表,当函数执行完毕,函数执行完毕存在内存的空列表被追加了字符串,
26 LookOut([])         #第二次调用,虽说传入的是个空列表,但是和第一个很显然就不是同一个内存地址啦!
27 LookOut()           #第三次调用,虽然说和第一次调用姿势是一样的,很显然拿到的内存也是同一个内存地址,也就是说在第一次追加字符串的基础上又一次进行追加操作!
28
29 '''
30 综上,我们可以总结默认参数的特点:
31     1>.它是可以不传的参数;
32     2>.如果不传默认是设置的默认值,如果传就用传入的值;
33     3>.默认的值是在定义阶段就确定了;
34     4>.默认参数的陷阱:针对可变的数据类型要小心;
35     默认参数在我们实际生活中常见就貌似安装软件,比如我们安装QQ等软件,如果不指定安装路径的话,它默认就会给咱们一个安装路径的哟!
36 '''
37
38
39
40 #以上代码执行结果如下:
41 welcome,周杰伦,sex: boy
42 welcome,邓紫棋,sex: girl
43 welcome,尹正杰,sex: boy
44 ['yinzhengjie']
45 ['yinzhengjie']
46 ['yinzhengjie', 'yinzhengjie']


三.动态参数

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7
8 def my_sum(*args):
9     count_sum = 0
10     for i in args:
11         count_sum += i
12     return count_sum
13 print(my_sum(1,2,3,4))
14
15
16 def Interface(**kwargs):
17     print(kwargs)
18
19 info = {
20     '数据库':'MySQL',
21     '服务器地址':'yinzhengjie.org.cn',
22     'Age':18,
23 }
24 Interface(**info)
25
26 #这种定义形式参数的方式可以hold住所有的传参哟,当然默认传参除外!
27 def TransferParameters(*args,**kwargs):
28     print(args)
29     print(kwargs)
30
31 a = (10,20)
32 b = {'x':100,'y':200}
33 TransferParameters(*a,**b)
34
35
36 '''
37 综上所示,动态参数有以下特点
38     1>.站在函数定义的角度上:*做聚合用,将一个一个的参数组合成一个元组;
39     2>.站在函数调用的角度上:*做打散用,将一个列表或者元组打散成多个参数;
40     3>.*只针对按位置传参;
41     4>.**动态参数,接受按关键字传递过来的参数,组织成一个字典;
42 '''
43
44
45
46 #以上代码执行结果如下:
47 10
48 {'数据库': 'MySQL', '服务器地址': 'yinzhengjie.org.cn', 'Age': 18}
49 (10, 20)
50 {'x': 100, 'y': 200}


四.关于形式参数混搭案例

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7
8 #注意,如果想要把所有的形式参数都用上,我们可以这样定义(站在函数定义的角度:所有的参数都是形式参数)
9
10 def func(位置参数1,位置参数2,*args,默认参数=10,**kwargs):
11     print(位置参数1,位置参数2)
12     print(默认参数)
13     print(args)
14     print(kwargs)
15
16 func("一","二","三","四","五",默认参数='yinzhengjie',a=100,b=200)
17
18 print("-"*20,"我是分割线","-"*20)
19
20 func(100,200,300,400,a=1,b=2)
21
22
23
24
25 #以上代码执行结果如下:
26 一 二
27 yinzhengjie
28 ('三', '四', '五')
29 {'a': 100, 'b': 200}
30 -------------------- 我是分割线 --------------------
31 100 200
32 10
33 (300, 400)
34 {'a': 1, 'b': 2}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: