本节内容:
- 函数(全局与局部变量)
- 递归
- 内置函数
函数
一、定义和使用
函数最重要的是减少代码的重用性和增强代码可读性
1 def 函数名(参数):
2
3 ...
4 函数体
5 ...
6 返回值
函数的定义主要有如下要点:
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- 函数体:函数中进行一系列的逻辑计算
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据。
总结使用函数的好处:
1.减少代码重用
2.保持一致性,易维护
3.可扩展性
返回值
1 def 发送邮件(): 2 3 发送邮件的代码... 4 5 if 发送成功: 6 7 return True 8 9 else: 10 11 return False 12 13 while True: 14 15 # 每次执行发送邮件函数,都会将返回值自动赋值给result 16 17 # 之后,可以根据result来写日志,或重发等操作 18 19 20 result = 发送邮件() 21 22 if result == False: 23 24 记录日志,邮件发送失败...
二、参数
1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
1 def calc(x,y) #x,y即为形参 2 res = x**y 3 return res 4 5 c = calc(2,3) #2,3即为实参 6 print(c)
3.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)
注:位置参数必须在关键字参数前面
1 def calc(x,y): 2 res = x**y 3 return res 4 5 c = calc(y=2,x=3) #关键字参数 6 print(c) 7 8 9 10 def calc(x,y): 11 res = x**y 12 return res 13 14 c = calc(2,y=3) #2为位置参数,y=3为关键字参数 15 print(c)
4.默认参数
1 def calc(x,y=3): #y=3为默认参数后面函数可不传值 2 res = x**y 3 return res 4 5 c = calc(3) #可不传y值 6 print(c)
5.参数组
1 ###############列表*args 2 3 def func(*args): 4 print args 5 6 # 执行方式一 7 func(11,22,33,55,66) 8 9 # 执行方式二 10 li = [11,22,33,55,66] 11 func(*li) 12 13 14 ###############字典**kwargs 15 16 def func(**kwargs): 17 print kwargs 18 19 20 # 执行方式一 21 func(name='ocean',age=18) 22 23 # 执行方式二 24 li = {'name':'ocean', age:18, 'job':'python'} 25 func(**li)
三、 局部变量与全局变量
全局变量在函数里可以随便调用,但要修改就必须用 global 声明
1 ##########全局变量与局部变量######## 2 NAME = "aa" 3 4 def cn(): 5 global NAME 6 NAME = "mm" 7 print(">>>>",name) 8 print(name) #输出aa 9 cn() #>>>mm 10 print(name) #mm 11 12 13 ########## 14 #本例重点是函数只有调用时才运行 15 name = "aa" 16 #全局变量一般为大写用于区分局部变量,这里临时使用小写 17 def aa(): 18 name = "bb" 19 def bb(): 20 nonlocal name 21 #nonlocal用来在函数或其他作用域中使用外层(非全局)变量 22 name = "cc" 23 bb() 24 print(name) 25 print(name) 26 aa() 27 print(name)
递归
在函数内部,可以调用其他函数。如果一个函数在内部调用函数本身,这个函数就是递归函数。
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出,浪费内存
1 def calc(n): 2 print(n) 3 if int(n/2) ==0: 4 return n 5 return calc(int(n/2)) 6 7 calc(10) 8 9 输出: 10 10 11 5 12 2 13 1
内置函数
1 ###### 求绝对值 ####### 2 3 a = abs(-95) 4 5 print(a) 6 7 8 9 ###### 只有一个为假就为假 ######## 10 11 a = all([True,True,False]) 12 13 print(a) 14 15 16 17 ###### 只有一个为真就为真 ######## 18 19 a = any([False,True,False]) 20 21 print(a) 22 23 24 25 ####### 返回一个可打印的对象字符串方式表示 ######## 26 27 a = ascii('0x10000') 28 29 b = ascii('bx19') 30 31 print(a,b) 32 33 34 35 ######### 将整数转换为二进制字符串 ############ 36 37 a = bin(95) 38 39 print(a) 40 41 42 43 ######### 将一个数字转化为8进制 ############## 44 45 a = oct(95) 46 47 print(a) 48 49 50 51 ######### 将一个数字转化为10进制 ############# 52 53 a = int(95) 54 55 print(a) 56 57 58 59 ######### 将整数转换为16进制字符串 ########## 60 61 a = hex(95) 62 63 print(a) 64 65 66 67 ######### 转换为布尔类型 ########### 68 69 a = bool('') 70 71 print(a) 72 73 74 75 ######### 转换为bytes ######## 76 77 a = bytes('淡定',encoding='utf-8') 78 79 print(a) 80 81 82 83 ######## chr 返回一个字符串,其ASCII码是一个整型.比如chr(97)返回字符串'a'。参数i的范围在0-255之间。 ####### 84 85 a = chr(88) 86 87 print(a) 88 89 90 91 ######## ord 参数是一个ascii字符,返回值是对应的十进制整数 ####### 92 93 a = ord('X') 94 95 print(a) 96 97 98 99 ######## 创建数据字典 ######## 100 101 dict({'one': 2, 'two': 3}) 102 103 dict(zip(('one', 'two'), (2, 3))) 104 105 dict([['two', 3], ['one', 2]]) 106 107 dict(one=2, two=3) 108 109 110 111 ###### dir 列出某个类型的所有可用方法 ######## 112 113 a = dir(list) 114 115 print(a) 116 117 118 119 ###### help 查看帮助文档 ######### 120 121 help(list) 122 123 124 125 ####### 分别取商和余数 ###### 126 127 a = divmod(9,5) 128 129 print(a) 130 131 132 133 ##### 计算表达式的值 ##### 134 135 a = eval('1+2*2') 136 137 print(a) 138 139 140 141 ###### exec 用来执行储存在字符串或文件中的Python语句 ###### 142 143 exec(print("Hi")) 144 145 exec("print("hello, world")") 146 147 148 149 ####### filter 过滤 ####### 150 151 li = [1,2,3,4,5,6] 152 153 a = filter(lambda x:x>3,li) 154 155 for i in a:print(i) 156 157 158 159 ##### float 浮点型 ##### 160 161 a = float(1) 162 163 print(a) 164 165 166 167 ###### 判断对象是不是属于int实例 ######### 168 169 a = 5 170 171 b = isinstance(a,int) 172 173 print(b) 174 175 176 177 ######## globals 返回全局变量 ######## 178 179 ######## locals 返回当前局部变量 ###### 180 181 name = 'nick' 182 183 def hi(): 184 185 a = 1 186 187 print(locals()) 188 189 hi() 190 191 print(globals()) 192 193 194 195 ########## map 遍历序列,对序列中每个元素进行操作,最终获取新的序列。 ########## 196 197 li = [11,22,33] 198 199 def func1(arg): 200 201 return arg + 1 #这里乘除都可以 202 203 new_list = map(func1,li) #这里map调用函数,函数的规则你可以自己指定,你函数定义成什么他就做什么操作! 204 205 for i in new_list:print(i) 206 207 208 209 ###### max 返回集合中的最大值 ###### 210 211 ###### min 返回集合中的最小值 ###### 212 213 a = [1,2,3,4,5] 214 215 s = max(a) 216 217 print(s) 218 219 n = min(a) 220 221 print(n) 222 223 224 225 ####### pow 返回x的y次幂 ######## 226 227 a = pow(2,10) 228 229 print(a) 230 231 a = pow(2,10,100) #等于2**10%100,取模 232 233 print(a) 234 235 236 237 ######## round 四舍五入 ######## 238 239 a = round(9.5) 240 241 print(a) 242 243 244 245 ######## sorted 队集合排序 ######## 246 247 char=['索',"123", "1", "25", "65","679999999999", "a","B","nick","c" ,"A", "_", "ᒲ",'a'] 248 249 new_chat = sorted(char) 250 251 print(new_chat) 252 253 for i in new_chat: 254 255 print(bytes(i, encoding='utf-8')) 256 257 258 259 ######## sum 求和的内容 ######## 260 261 a = sum([1,2,3,4,5]) 262 263 print(a) 264 265 a = sum(range(6)) 266 267 print(a) 268 269 270 271 ######## __import__ 通过字符串的形式,导入模块 ######## 272 273 # 通过字符串的形式,导入模块。起个别名ccas 274 275 comm = input("Please:") 276 277 ccas = __import__(comm) 278 279 ccas.f1() 280 281 # 需要做拼接时后加 fromlist=True 282 283 m = __import__("lib."+comm, fromlist=True)