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

                      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}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值