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的规则