1 #函数
  2 #定义函数
  3 #自定义函数格式如下
  4 #   def 函数名(参数列表):
  5 #       函数体;
  6 #       return 返回值;
  7 #参数列表中的不同参数用“,”隔开
  8 #如果没有参数就不写参数
  9 #如果不需要啊返还值就在返还值哪里写None,或者直接不写
 10 #函数还是要先定义再使用
 11 
 12 def test_fang (x,y):
 13     z=1;
 14     for i in range(y):
 15         z=z*x;
 16     return z;
 17 
 18 xfang=test_fang(10,3);
 19 print(xfang);
 20 
 21 print("//////////////////////");
 22 
 23 #使用关键字调用函数
 24 #比如上面这串代码,我改动一下x和y
 25 
 26 def test_fang_2 (bei,cheng):
 27     z=1;
 28     for i in range(cheng):
 29         z=z*bei;
 30     return z;
 31 #这样运行起来是完全没有问题的
 32 xfang_2=test_fang_2(10,3);
 33 print(xfang_2);
 34 #这里的步骤也没问题
 35 #关键为了提高可读性,我们可以这样写
 36 xfang_2=test_fang_2(bei=10,cheng=2);
 37 print(xfang_2);
 38 #这样就提高了程序的可读性,让你更加的清楚你这两个值对应的是什么
 39 #xfang_2=test_fang_2(bei=10,2);
 40 #前面写和后面不写是会报错的
 41 xfang_2=test_fang_2(10,cheng=4);
 42 print(xfang_2);
 43 #而后面写前面不写则不会
 44 
 45 print("///////////////////////////");
 46 
 47 #参数默认值
 48 #函数可以对即将传输过来的数据赋上一个默认的值
 49 #如果又形参接收到了数据,就直接使用接收到的数据
 50 #如果没有接收到数据,就使用默认的数据
 51 
 52 def coffe (name="卡布奇诺"):
 53     return name;
 54 print("给阿姨到一杯{0}".format(coffe()));
 55 #这里我们没有给name传输任何的数据
 56 #所以这里就使用的是默认的数据
 57 print("给阿姨到一杯{0}".format(coffe(None)));
 58 #而只要我们在括号内写上了东西
 59 #即使是None也会被接收成数据给name
 60 print("给阿姨到一杯{0}".format(coffe("L老爷")));
 61 #这里就是输出了我们传输给name的数据了
 62 
 63 print("///////////////////////");
 64 
 65 #可变参数
 66 #这也是C中间没有的东西
 67 #Python中的可变参数,可以接收参数的个数是可以变化的
 68 #在参数前面加上*或者**,就可以实现收录多个数据
 69 #*表示把收到的数据变成元组的形式
 70 #**表示把收到的数据变成字典的形式
 71 
 72 def yushu (*beichus,chu):
 73     cun=list();
 74     for i in beichus:
 75         cun.append(i%chu);
 76     return cun;
 77 print(yushu(59,60,61,62,63,chu=2));
 78 #这里要注意一下
 79 #因为加上了*,所以他会一直往后面读取数据
 80 #print(yushu(59,60,61,62,63,2));
 81 #如果这样写的话,他会默认你这从59到2的数据都是给*beichu的
 82 #反而会报错告诉你你没有给chu赋值
 83 
 84 #如果函数设计的形参超过两个
 85 #那就必须要使用我们前面的使用关键字调用函数
 86 #就是要用形参的变量名写上去加以区分
 87 
 88 def yushu (*beichus,chu=3):
 89     cun=list();
 90     for i in beichus:
 91         cun.append(i%chu);
 92     return cun;
 93 print(yushu(59,60,61,62,63));
 94 #但是这样的只有一个参数的
 95 #我们就可以随便写了
 96 
 97 tuple_0=(599,633,889);
 98 def yushu (*beichus,chu=3):
 99     cun=list();
100     for i in beichus:
101         cun.append(i%chu);
102     return cun;
103 print(yushu(59,60,61,62,63,*tuple_0));
104 #我们在这里建立了一个元组
105 #然后我们希望*biechus能够读取tuple_0的数据
106 #我们只需要把元组tuple_0放进去并在它的前面加上*就可以了
107 #可变参数就会自动把他识别进去
108 
109 #**是建立了的一个字典
110 #我们知道字典是一一对应的关系
111 #
112 
113 def show_info(sep=":",**info):
114     print("——info——");
115     for key,value in info.items():
116         print("{0}{1}{2}".format(key,sep,value));
117 #这样我们就建立了一个可变参数为字典的函数
118 show_info(name="字典",skill="我玩你心态",LV="999");
119 #使用原来提到的特殊的方法建立字典key=value来建立
120 #show_info(1="字典",skill="我玩你心态",LV="999");
121 #这里依然遵守特殊方法建立字典的规则,就是key必须是字符串类型,不能是数字类型
122 
123 show_info("-(0,0)-",name="字典",skill="我玩你心态",LV="999");
124 #而在这个代码中,我们通过对show_info函数的结构了解
125 #sep这种常规的参量是要放在前面的,所以我现在在这里写出一个单独的字符串放在前面
126 #这样子的话,系统就会先把"-(0,0)-"赋值给sep
127 #sep就不是作为默认值输出了
128    
129 show_info(name="字典",skill="我玩你心态",LV="999",sep="???");
130 #我们也可以在末尾通过添加关键字的方法来指定给sep赋值
131 
132 show_info(name="字典",skill="我玩你心态",sep="=======",LV="999");
133 #同样只要是用关键字赋值的,都是作为特殊处理的,不会影响**的运算的
134 
135 #同样的
136 #我们也可以直接把字典给塞进去
137 #来运作
138 ddd={10:20,20:10};
139 #show_info(name="字典",skill="我玩你心态",sep="=++++=",**ddd,LV="999");
140 #TypeError: show_info() keywords must be strings
141 ddd={"10":20,"20":10};
142 show_info(name="字典",skill="我玩你心态",sep="=++++=",**ddd,LV="999");
143 #这里要注意一个问题
144 #我们知道字典是可以以字符串和数字来作为key值的
145 #而且一般情况下key值储存的形式并没有限制
146 #但是这里为毛报错提示我们key值一定要是string字符串类型呢?
147 #是因为位置的问题吗?
148 
149 #ddd={"10":20,20:10};
150 #show_info(name="字典",skill="我玩你心态",sep="=++++=",LV="999",**ddd);
151 #show_info(**ddd,name="字典",skill="我玩你心态",sep="=++++=",LV="999");
152 #测试结果很明显,还是报错
153 #这说明通过key=value的表示方式的规则是会影响到后面可变参数的
154 #如果可变参数不符合规则,就会抛出异常
155 
156 #ddd={10:20,20:10};
157 #show_info(**ddd);
158 #而通过这串代码我们基本上可以确定了
159 #函数中的字典的传输必须使用key=value的规则

 

悟已往之不谏,知来者之可追