博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3周末班2期第3天
阅读量:4671 次
发布时间:2019-06-09

本文共 17666 字,大约阅读时间需要 58 分钟。

今日课程大纲:
 
01 上周内容回顾
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 """ 4 格式化输出: 5     % s d i f r 6     format 7         '{}{}{}'.format('alex',46,'women') 8         '{0}{1}{2}{0}{0}'.format('alex',46,'women') 9         '{name}{age}{hobby}'.format(age=46,name='alex',hobby='women')10 11 str:12     s1 = 'alex'13     print(s1[0])14     print(s1[:2])15     print(s1[::2])16     upper() lower()17     replace18     calptlize()19     strip()20     split() 分割,str----> list21     默认按照空格分割。指定分割符,指定分割次数。22     find index:通过元素查找索引值。23     join:将list ---> str 功能之一24      '|'.join(iterable)25      starstwith endswith26      isdigit()27      isalpha()28      isalnum()29     count()30     内置函数:len() 取总长度31 32 list: 容器型数据类型,按照顺序存值。33     索引切片(步长)34     增: append() insert() extend()35     删:  pop()  remove() clear()36          del 索引切片(步长) del l1[1]37     改38         l1[0] = 'barry'39         l1[:3] = 'barry'40     查:41         索引切片(步长)42         for 循环43     其他操作方法:44         count index sort(reverse=True) 排序 reverse()45         len()46     range(10)47     range(1,12,2)48     for i in range(10,0,-1):49         print(i)50     l1 = [1,2,3,4,5]51     for i in range(len(l1)):52         print(i)53 54 tuple (1,2,3,4,[22]) 只读列表55 56 dict: key:value 大量关系型数据57     查询速度快,数据之间的关系性强。58     key: 不可变的数据类型。59     values: 任意数据类型 对象。60 61     增:dic['name'] = 'Alex' setdefault62     删:pop 按照key删除 del clear popitem(随机删除,但是3.6以后字典有序了)63     改:dic[key] = 'value' update64     查:65         dic['key'] 如果没有此key66         dic.get('key','设置返回值') 没有此键不报错,返回None,或者自己设定的值67         dic.keys() dic.values() dic.items()68         a,b = 1,2       分别赋值 a = 1  b = 269         a,b = (2,3)     a = 2  b = 370         for k,v in dic.items():71             pass72 73 数据类型的补充:74     数据类型的转换75 编码:76     str:python3x 编码是unicode77     str ---> bytes78     unicode ---> 非Unicode79     s1 = 'alex'80     b1 = s1.encode('utf-8') 编码81     b1.decode('utf-8') 解码82 83     b1 gbk----->  b2  utf-884     b1.decode('gbk').encode('utf-8')85 """

 

02 赋值运算与深浅拷贝
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 # 赋值运算 4 # 可变的数据类型:由于数据类型可变,修改数据会在原来的数据的基础上进行修改, 5 # 可变的数据类型有:列表,字典 6 # l1 = [1,2,3] 7 # l2 = l1 8 # l3 = l2 9 # # l1 = [1,2,3,4]     #注意这不是修改数据,而是在内存中重新创建了一份数据,然后L1 指向了这份新数据10 # l1.append(666)       #在原来的数据上修改11 # print(l1,l2,l3)12 # print(id(l1),id(l2),id(l3))13 # 不可变的数据类型:由于数据类型是不可变的,不可修改,会在内存中在重新创建一份新的数据14 # 不可变的数据类型有:字符串,数字,bool值,元组等15 # l4 = 'abcd'16 # l5 = l417 # l4 = [1,2,3,]18 # print(l4,l5)19 # print(id(l4),id(l5))20 21 22 # 浅copy23 # copy一个新列表(dict),列表在内存中是新的,但是列表里面的元素,完全沿用之前的元素。24 # l1 = [1, 2, 3,[22,33]]25 # l2 = l1.copy()26 # print(id(l1),id(l2))27 # l1.append(666)28 # l1.remove(1)29 # print(l1,l2)30 # 列表在内存中是新的,但是列表里面的元素,完全沿用之前的元素31 # print(id(l1[0]))32 # print(id(l2[0]))33 # l1[-1].append(666)34 # print(l1,l2)35 36 37 # 深copy38 import copy39 # 总结:深copy则会在内存中开辟新空间,将原列表以及列表里面的可变的数据类型重新创建一份,40 # 不可变的数据类型则沿用之前的,指向之前的数据41 # l1 = [1, 2, 3, [22, 33]]42 # l2 = copy.deepcopy(l1)43 # print(id(l1), id(l2))       #id 不一样,是两份数据44 # l1[-1].append(666)45 # l1.remove(1)                #只是删除了l1列表中和内存中的数据1的指向关系,并不是在内存中删除了数据146 # print(l1,l2)47 48 49 # id 测试对象的内存地址50 # == 比较 比较两边的数值是否相等51 # print(2 == 2)52 # is 判断 判断的两边对象的内存地址是否是同一个。53 54 55 # ****** 切片是浅copy56 # l1 = [1, 2, 3, [22, 33]]57 # l2 = l1[:]  # 切片是浅copy58 # l1[-1].append(666)59 # # print(id(l1),id(l2)) 不是赋值关系60 # print(l1,l2)

 

 

03 文件操作 简介
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 """ 4 文件三参数 5     path:文件的路径 6     encoding:文件以什么编码方式存储,就以什么编码方式读取 7     mode:读,写,,读写,写读,追加,改等等 8  9     三个大方向:10         带b的模式操作对象都是非文字类的文件:视频,音频,图片。11 12         读(r rb r+ rb+)13             r   读模式14             rb15             r+  读写模式16             rb+17 18         写 w wb w+ w+b :如果原文件存在,则清空原文件,在写入。这个慎用19             w   写模式20             wb21             w+  写读模式22             wb+23 24         追加(a ab a+ a+b)25             a   追加26             ab27             a+28             ab+29 30     文件操作的其他方法:31         f.read()32         f.write()33         f.readline()34         f.readlines()35         f.close()36         f.seek()37         f.tell()38 """39 40 41 # f1 = open("文件读写test.txt",encoding='utf-8',mode='r')42 # content = f1.read()43 # print(content)44 # f1.close()45 """46 f1变量,文件句柄。47 open 内置函数,底层调用的操作系统的操作文件功能的接口。48 windows: gbk,linux:utf-8  ios: utf-849 操作文件总共3步;50     1,打开文件,产生文件句柄。51     2,对文件句柄进行操作。52     3,关闭文件句柄。53 """54 55 56 """57 # 错误示范:58 # 1,UnicodeDecodeError: 'gbk' codec can't decode...   编解码错误。59 # 2,路径错误。路径分隔符 与后面的字符产生特殊的意义。 解决方式 r 或者 \60     #f1 = open(r"d:\test\r文件读写test.txt",encoding='utf-8',mode='r')61 """

 

04 文件操作 读模式
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3  4 # 读模式(r rb r+ rb+) 5  6 # r模式 7 # 默认就是r模式 8 # 1.1 read()    #全部读取文件内容,如果文件过大,可能会导致内存不足 9 # f1 = open('文件读写test.txt', encoding='utf-8',mode='r')10 # content = f1.read()11 # print(content,type(content))  #对文件进行读取出来的都是字符串类型12 13 # 1.2 read(n)14 # r模式下,  n代表字符。15 # f1 = open('文件读写test.txt', encoding='utf-8',mode='r')16 # content = f1.read(3)17 # print(content)18 19 # 1.3 readline() 按行读取20 # f1 = open('文件读写test.txt', encoding='utf-8',mode='r')21 # print(f1.readline().strip())22 # print(f1.readline().strip())23 # f1.close()24 25 # 1.4 readlines()  返回一个列表,列表里面的元素是原文件每一行26 # f1 = open('文件读写test.txt', encoding='utf-8',mode='r')27 # content = f1.readlines()28 # print(content)29 # f1.close()30 31 32 # 1.5 for循环  **注意平常读取大文件就需要用这种方法33 # f1 = open('文件读写test.txt', encoding='utf-8',mode='r')34 # for line in f1:35 #     print(line.strip())36 # f1.close()37 38 39 # rb模式  ---读取一些非文字类的文件,如图片,视频等40 # 也有上面说的那5中读的模式, read()  read(n)  readline()  readlines()  for循环读取41 #如果是 rb 模式,就不需要规定编码了 encoding不是编码或解码,它是规定你这个文件到底采用哪种编码模式而已42 ## f1 = open('文件读写test.txt', encoding='utf-8',mode='rb')43 # f1 = open('文件读写test.txt',mode='rb')44 # content = f1.read()45 # print(content.decode('utf-8'))  #解码 utf-8 ---> unicode46 # f1.close()47 48 # rb 模式读取图片49 # f1 = open('time1.jpg', mode='rb')50 # content = f1.read()51 # print(content)52 # f1.close()53 54 # r+ 读写模式55 # f = open('log1',encoding='utf-8',mode='r+')56 # print(f.read())57 # f.write('666')58 # f.close()59 60 # 先写后读会出问题61 # f = open('log1',encoding='utf-8',mode='r+')62 # f.write('松岛岛')63 # print(f.read())64 # f.close()65 66 #rb+ 模式

 

05 文件操作 写模式
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 # 第二写模式 4 # w 写模式 5 # 没有文件,创建文件写入内容 6 # 有文件,先清空内容后写入 7 # f = open('log1',encoding='utf-8',mode='w') 8 # # f.write('林志玲 fjdsklafjsd;flj太白金星') 9 # f.write('深圳校区 ~~~')10 # f.write('深圳校区 ~~~')11 # f.write('深圳校区 ~~~')12 # f.write('深圳校区 ~~~')13 # f.write('深圳校区 ~~~')14 # f.close()15 16 # wb 写模式(以bytes类型写入到文件)17 #rb18 # f1 = open('time1.jpg', mode='rb')19 # content = f1.read()20 # print(content)21 # f1.close()22 # #wb 写入到文件23 # #把bytes类型写入到文件 --图片24 # f2 = open('time2.jpg',mode='wb')25 # f2.write(content)26 # f2.close()27 28 # w+ 写读模式29 # f = open('log1',encoding='utf-8',mode='w+')30 # f.write('老男孩教育...')31 # f.seek(0)   #调整光标(指针)到最开始32 # print(f.read())33 # f.close()34 35 #wb+ 写读模式(bytes)

 

06 文件操作 追加模式
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 # a 追加 4 # 没有文件创建文件追加内容,有文件,在文件最后追加内容。 5 # f = open('log3',encoding='utf-8',mode='a') 6 # f.write('老男孩') 7 # f.close() 8 #有文件,在文件最后追加内容。 9 # f = open('log3',encoding='utf-8',mode='a')10 # f.write('666')11 # f.close()
 
07 文件操作 修改 
#!/usr/bin/env python3#author:Alnk(李成果)'''文件的修改:所有的文件编辑器都要经过下面这5步才能对文件进行修改    1,以读的模式打开原文件    2,以写的模式打开新文件    3,读取原文件对源文件内容进行修改形成新内容写入新文件    4,将原文件删除    5,将新文件重命名成原文件'''# 方法一 小文件可以。# import os## # 1,以读的模式打开原文件。# # 2,以写的模式打开新文件。# with open('alex个人简历',encoding='utf-8') as f1,\#         open('alex个人简历.bak',encoding='utf-8',mode='w') as f2:#     # 3,读取原文件对源文件内容进行修改形成新内容写入新文件。#     old_content = f1.read()#     new_content = old_content.replace('alex','SB')#     f2.write(new_content)## # 4,将原文件删除。# os.remove('alex个人简历')# # 5,将新文件重命名成原文件。# os.rename('alex个人简历.bak','alex个人简历')# 方法二: 推荐使用这种方法import os## 1,以读的模式打开原文件。# 2,以写的模式打开新文件。# with open('alex个人简历',encoding='utf-8') as f1,\#         open('alex个人简历.bak',encoding='utf-8',mode='w') as f2:#     # 3,读取原文件对源文件内容进行修改形成新内容写入新文件。#     for old_line in f1:#         new_line = old_line.replace('SB','alex')#         f2.write(new_line)## # 4,将原文件删除。# os.remove('alex个人简历')# # 5,将新文件重命名成原文件。# os.rename('alex个人简历.bak','alex个人简历')

 

08 文件操作 其他方法
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 # 其他操作方法: 4 # readable() writable()  ***      文件句柄是否可读,可写 5 # seek 调整光标位置 按照字节   *** 6 # seek(0)  将光标移动到开始 7 # seek(0,2)  将光标移动到最后。 8 # tell 获取光标位置 按照字节。  *** 9 # flush 刷新 保存  ***10 # truncate 截取原文件,从头开始截,11 #12 # f = open('log3',encoding='utf-8')13 # f.seek(1)14 # print(f.read())15 # print(f.tell())16 # f.seek(0) # 将光标移动到开始17 # f.seek(0,2)  # 将光标移动到最后。18 19 # print(f.read())20 # print(f.writable())21 # if f.writable():22 #     f.write('111')23 # f.close()24 25 # f = open('log3',encoding='utf-8',mode='w')26 # f.write('fjdsklafjdfjksa')27 # f.flush()28 # f.close()29 30 #截取原文件,从头开始截,需要在可写的模式下,并且不清空原文件31 # f = open('log3',encoding='utf-8',mode='r+')32 # f.truncate(3)33 # f.close()

 

09 函数的初识 结构 作用 返回值
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 # 面向过程编程 4 # s1 = 'fjksdfjsdklf' 5 # count = 0 6 # for i in s1: 7 #     count += 1 8 # print(count) 9 #10 # l1 = [1, 2, 3, 4, 5]11 # count = 012 # for i in l1:13 #     count += 114 # print(count)15 #16 # 缺点:17 # 1,代码重复太多。18 # 2,代码的可读性差。19 20 21 #函数的初识22 # def my_lf_len(s):23 #     count = 024 #     for i in s:25 #         count += 126 #     print(count)27 #28 # s1 = 'fjdsklafsdkalfjsda'29 # my_lf_len(s1)30 # l1 = [1,2,3,3,5,56,6,6]31 # my_lf_len(l1)32 #33 # 函数是什么?34 # 功能体,一个函数封装的一个功能35 36 37 # 结构:38 '''39 def 函数名():40     函数体41 '''42 43 44 # 函数什么时候执行?45 # 被调用的时候执行。函数名+()46 # def my_lf_len(s):47 #     count = 048 #     for i in s:49 #         count += 150 #     print(count)51 #52 # my_lf_len('fdskfjskdlf')53 54 55 # 函数的返回值 return56 # def Tantan():57 #     print('搜索')58 #     print('左滑动一下')59 #     print('右滑动一下')60 #     # return61 #     print('发现美女,打招呼')62 #     # return '美女一枚'63 #     # return ['恐龙一堆']64 #     # return '小萝莉', '肯德基', '御姐'65 #     return {'name':'alnk','age':18},[1,2,3,4,5,]    #这算多个值66 # ret = Tantan()67 # print(ret,type(ret))68 #69 # 调用一次执行一次70 # Tantan()71 # Tantan()72 # Tantan()73 #74 # 返回值75 '''76 return: 77     1,终止函数。78     2,给函数的调用者(执行者)返回值。79         return             --->  None 80         return   单个值    --->  单个值   --被返回的数据是什么数据类型就是什么类型81         return   多个值    ---> (多个值,) --元组82 '''

 

10 函数的参数 
1 #!/usr/bin/env python3  2 #author:Alnk(李成果)  3 # def Tantan(sex):  #函数的定义:sex形式参数,形参  4 #     print('搜索')  5 #     print('左滑动一下')  6 #     print('右滑动一下')  7 #     print('发现美女,打招呼')  8 #     return '小萝莉', '肯德基', '御姐'  9 # 10 # # 函数的参数 11 # Tantan('女') # 函数的执行:'女' 实际的数据, 实参。 12  13  14 #从两方面将函数的参数:实参 和 形参 15 # 实参角度 16 # 1.位置参数。  从左至右,一一对应 17 # def Tantan(sex,age): 18 #     print('筛选性别%s,年龄%s左右' %(sex,age)) 19 #     print('搜索') 20 #     print('左滑动一下') 21 #     print('右滑动一下') 22 #     print('发现美女,打招呼') 23 # 24 # Tantan('女',28,) 25 # 26 # 练习:比大小,返回大的数字 27 # def max_(a,b): return a if a > b else b 28 #     # if a > b: 29 #     #     return a 30 #     # else: 31 #     #     return b 32 #     # return a if a > b else b 33 # print(max_(100,200)) 34 # 35 # 扩展: 36 # 三元运算符 37 # a = '饼' 38 # b = '西瓜' 39 # ret = a if 3 > 2 else b 40 # print(ret) 41  42 # 2.关键字参数。 一一对应。 43 # 函数参数较多 记形参顺序较麻烦时,需要关键字参数。 44 # def Tantan(sex,age,area): 45 #     print('筛选性别%s, %s附近,年龄%s左右的美女' %(sex,area,age)) 46 #     print('搜索') 47 #     print('左滑动一下') 48 #     print('右滑动一下') 49 #     print('发现美女,打招呼') 50 # Tantan(sex='女',area='南山区',age='28') 51  52 # 3.混合参数 : 一一对应,关键字参数必须要在位置参数后面。 53 # def Tantan(sex,age,area): 54 #     print('筛选性别%s,%s 附近,年龄%s左右的美女' %(sex,area,age)) 55 #     print('搜索') 56 #     print('左滑动一下') 57 #     print('右滑动一下') 58 #     print('发现美女,打招呼') 59 # Tantan('女',28,area='南山区') 60  61  62 # 形参角度 63 # 1.位置参数。 从左至右,一一对应。 64 # def Tantan(sex,age): 65 #     print('筛选性别%s,年龄%s左右' %(sex,age)) 66 #     print('搜索') 67 #     print('左滑动一下') 68 #     print('右滑动一下') 69 #     print('发现美女,打招呼') 70 # Tantan('女',28,) 71  72 # 2.默认参数  : 使用最多的一般不更改的参数,默认参数一定放在位置参数后面 73 # def Tantan(area,age,sex='girl'): 74 #     print('筛选性别%s, %s 附近,年龄%s左右的美女' %(sex,area,age)) 75 #     print('搜索') 76 #     print('左滑动一下') 77 #     print('右滑动一下') 78 #     print('发现美女,打招呼') 79 # Tantan('南山区',28,'laddboy') 80  81 # 3.万能参数(动态参数) *args, **kwargs 82 # def Tantan(*args,**kwargs): 83 #     # 函数的定义: * 代表聚合。 84 #     # * 将实参角度所有的位置参数放到一个元祖中,并将元组给了args 85 #     # ** 将实参角度所有的关键字参数放到一个字典中,并将字典给了kwargs 86 #     # print('筛选性别%s, %s 附近,年龄%s左右的美女' %(sex,area,age)) 87 #     # print(args) 88 #     # print(kwargs) 89 #     print('筛选地域:%s,年龄%s' % args) 90 #     print('搜索') 91 #     print('左滑动一下') 92 #     print('右滑动一下') 93 #     print('发现美女,打招呼') 94 # 95 # # Tantan('南山区','28', '性格好','身材好', '家境好') 96 # Tantan('南山区','28',body='身材好',voice='萝莉音',money='白富美') 97 # 98 # def Tantan(*args,**kwargs): 99 #     # 函数的定义: * 代表聚合。100 #     # * 将实参角度所有的位置参数放到一个元祖中,并将元组给了args101 #     # ** 将实参角度所有的关键字参数放到一个字典中中,并将字典给了kwargs102 #     print(args)103 #     print(kwargs)104 #105 # Tantan('南山区','28',body='身材好',voice='萝莉音',money='白富美')106 # l1 = [1,2,3]107 # l2 = (4,5,6)108 # Tantan(*l1,*l2)  # 函数的执行:*iterable 将l1打散,添加到args109 # Tantan(1, 2, 3, 4, 5, 6)110 # dic1 = {'name':"alex"}111 # dic2 = {'age':46}112 # Tantan(**dic1,**dic2)     #**dic1 将dic1打散,将所有的键值对添加到kwargs113 114 115 # 形参的最终顺序116 # 位置参数  *args  默认参数 **kwargs117 # def func(a,b,*args,sex='女',**kwargs):118 #     print(a,b,sex,args,kwargs)119 # func(1,2,4,5,6,name='alex',age=73) 
 
11 函数的命名空间和顺序
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 """ 4 函数里面的变量,在函数外面能直接引用么? 5 def func1(): 6     m = 1 7     print(m) 8 print(m)  #这行报的错 9 10 报错了:11 NameError: name 'm' is not defined12 13 我们首先回忆一下Python代码运行的时候遇到函数是怎么做的,从Python解释器开始执行之后,就在内存中开辟里一个空间。14 每当遇到一个变量的时候,就把变量名和值之间对应的关系记录下来,但是当遇到函数定义的时候,解释器只是象征性的将函数名读入内存,15 表示知道这个函数存在了,至于函数内部的变量和逻辑,解释器根本不关心。等执行到函数调用的时候,16 Python解释器会再开辟一块内存来储存这个函数里面的内容,这个时候,才关注函数里面有哪些变量,17 而函数中的变量会储存在新开辟出来的内存中,函数中的变量只能在函数内部使用,并且会随着函数执行完毕,这块内存中的所有内容也会被清空。18 19 我们给这个‘存放名字与值的关系’的空间起了一个名字 --- 命名空间。20 代码在运行伊始,创建存储“变量名与值的关系”的空间叫做全局命名空间;21 在函数的运行中开辟的临时的空间叫做局部命名空间。22 """23 # python的空间分三种:24 # 全局名称空间25 # 局部名称空间26 # 内置名称空间  print() len() 内置函数27 #28 # 举例29 # def func():30 #     name = 'alex'31 # func()32 # print(name)33 # func()34 # python中的作用域分两种:35 # 全局作用域:内置名称空间 全局名称空间36 # 局部作用域:局部名称空间37 38 39 # 取值顺序: 就近原则40 # 局部变量先到局部寻找,局部没找到才去全局找,全局没找到,去内置找,都没找到,就报错41 # 全局变量直接在全局查找,全局没有就去内置空间查找,如果没有,就报错42 # 局部名称空间 ———> 全局名称空间 ———> 内置名称空间    (这个顺序不可逆)43 # input = 'barry'44 # def func():45 #     # input = 'alex'46 #     print(input)47 # func()48 # print(input)49 50 51 # 加载顺序52 # 所有的东西要加载到内存才运行53 # 内置名称空间  --->  全局名称空间 --->  局部名称空间
 
12 函数的嵌套
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 # 函数的嵌套 4 # 举例1 5 # def func(): 6 #     print(111) 7 # 8 # def func1(): 9 #     print(222)10 #     func()11 #12 # def func3():13 #     print(333)14 #     func1()15 #16 # print(444)17 # func()18 # print(555)19 # 444 111 55520 #21 #举例222 # def func():23 #     print(111)24 #25 # def func1():26 #     print(222)27 #     func()28 #29 # def func3():30 #     print(333)31 #     func1()32 #33 # print(444)34 # func3()35 # print(555)36 # 444 333 222 111 55537 #38 # def wrapper():39 #     print(222)40 #     def inner():41 #         print(111)42 #     print(444)43 #     inner()44 #     print(333)45 #46 # wrapper()47 # 222 444 111 333

 

13 内置函数 globals()  locals()
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 """ 4 本文件主要讲述内置函数globals() locals() 5 """ 6 # name = 'alex' 7 # age = 46 8 # 9 # def func():10 #     sex = '男'11 #     hobby = '女'12 #     print(globals())  # 返回一个字典:全局作用域的所有内容13 #     print(locals())   # 返回一个字典:当前位置的内容14 # func()15 #16 # print(globals())  # 返回一个字典:全局作用域的所有内容17 # print(locals())   # 返回一个字典:当前位置的内容

 

14 函数的名称应用 
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 # 函数名的应用 4 # 1,函数名是一个特殊的变量 函数名() 执行此函数 5 # def func(): 6 #     print(666) 7 # func() 8  9 # 2,函数名可以当做变量进行赋值运算。10 # def func():11 #     print(666)12 #13 # f = func14 # f()15 16 # 3,函数名可以作为容器型数据的元素 ***17 # def func():18 #     print(666)19 #20 # def func1():21 #     print(777)22 #23 # def func2():24 #     print(888)25 #26 # def func3():27 #     print(999)28 #29 # l1 = [func, func1, func2, func3]30 # for i in l1:31 #     i()32 #33 # dic = {
34 # 1: func,35 # 2: func1,36 # 3: func2,37 # 4: func3,38 # }39 #40 # while 1:41 # num = input('请输入序号:').strip()42 # num = int(num)43 # dic[num]()44 45 # 4,函数名可以作为函数的参数。46 # def func1():47 # print(111)48 #49 # def func2(x):50 # x()51 # print(222)52 #53 # func2(func1)54 55 # 5,函数名可以作为函数的返回值。56 # def func1():57 # print(111)58 #59 # def func2(x):60 # print(222)61 # return x62 #63 # ret = func2(func1)64 # ret()

 

15 关键字 global nonlocal
1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 # global nonlocal 4 # 5 # global 6 #1,声明一个全局变量。 7 # def func(): 8 #     global name 9 #     name = 'alex'10 # func()11 # print(name)12 13 # 2,修改一个全局变量。14 # 原因:局部作用域只能引用全局变量而不能改变全局变量。如果改变则报错15 # global 可以实现通过局部作用域而去改变全局变量16 # count = 117 # def func1():18 #     global count19 #     count += 120 # print(count)21 # func1()22 # print(count)23 24 25 # nonlocal: 子级函数可以通过nonlocal修改父级(更高级非全局变量)函数的变量。26 # 现象:子级函数可以引用父级函数的变量但是不能修改。27 def func():28     count = 129     def func1():30         def inner():31             nonlocal count32             count += 133             print(count)  # 234         print(count)      # 135         inner()36         print(count)      # 237     func1()38 func()39 40 # 这个不行,会报错41 # count = 142 # def func1():43 #     def inner():44 #         nonlocal count45 #         count += 146 #         print(count)47 #     inner()48 #49 # func1()

 

转载于:https://www.cnblogs.com/lichengguo/p/10272736.html

你可能感兴趣的文章
Android Support Annotations
查看>>
JAVA设计模式之享元模式
查看>>
命令行添加删除tomcat服务
查看>>
myEclipse怎样将程序部署到tomcat(附录MyEclipse调试快捷键)
查看>>
Unity UGUI——UI基础,Canvas
查看>>
如果战斗机飞行员弹出,自动驾驶仪会接管飞机安全降落么?
查看>>
Windows Azure Azure 简介
查看>>
java字符串截取指定下标位置的字符串
查看>>
Ubuntu 14.04开启ssh服务
查看>>
格式化输出;while循环;运算符
查看>>
javascrip学习之 数据类型和变量
查看>>
免费的DNS服务器
查看>>
Vim编辑器
查看>>
BZOJ 4094 USACO 2013 Dec. Optimal Milking
查看>>
电子电工学习方法
查看>>
【OpenJ_Bailian - 2790】迷宫(bfs)
查看>>
What's New In Python 3.X
查看>>
MyBatis(3):SQL映射
查看>>
PostQuitMessage, PostThreadMessage( WM_QUIT )
查看>>
升压转换器 (Boost)
查看>>