python之路——10
王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594
复习
- a.函数可读性强,复用性强
def 函数名()
函数体
return 返回值
函数先定义后执行,
b.返回值
1.没有返回值
2.返回一个值
3.返回多个值:多个值用逗号隔开;可用一个或多个等量变量接受
c.参数
1.形参:定义函数
位置参数:必须传
*args 动态参数,接受任意多个,按位置传入的参数
默认参数:可不传
**kwargs 动态参数,可接受任意多,按关键字传入的参数
2.实参:调用函数
按照位置传参数
按照关键字传参数 :可以混用,顺序:位置+关键字
3.默认参数陷阱
如果默认参数的值是一个可变数据类型,那么每次调用函数,如果不传值,就公用一个数据类型资源
学习内容
- 1.命名空间
内置命名空间
python解释器一启动就可以使用的名字就存储在内置命名空间
内置的名字在启动解释器的时候就加载进内存
全局命名空间
程序从上之下被执行的过程中依次加载进内存
放置了我们设置的所有变量名和函数名
局部命名空间
函数内部定义的名字
调用函数时,才会产生这个名称空间,函数执行结束,则命名空间消失
规则:
1.局部:可以使用全局和内置
全局:使用内置,不能使用局部
内置:不能使用全局和局部
2.全局定义与内置名字冲突时,会使用全局的名字
如果有,就不找上级;如果自己没有,就找上级;上级没有,找上上级
多个函数,拥有多个独立的局部名字空间,不共享
2.作用域
全局作用域 globals
作用于全局,内置和全局名字空间的名字都属于全局作用域
局部作用域 locals
作用于局部,函数(局部命名空间)
#对于不可变数据类型,局部可查看不可修改; 若要修改, 函数内global声明
3.函数的嵌套定义与调用
nonlocal
4.函数的本质
1.函数名是内存地址
2.函数名可以赋值
3.函数名可以作为容器类型的元素
4.函数名可以作为函数的参数,返回值
5.闭包
代码区
- 函数嵌套与调用
- def outer():
- a = 2
- def inner():
- b = 3
- def inner2():
- nonlocal a
- a += 1
- print('inner2', a)
- inner2()
- print('inner', a)
- inner()
- print(a)
- outer()
- print(a)
闭包
- def outer():
- a = 1
- def inner():
- print(a)
- print(inner.__closure__)
- return inner
- inn = outer()
- '''
- '''
- def wrapper():
- money = 1000
- def func():
- name = 'eva'
- print(func.__closure__)
- def inner():
- print(name,money)
- print(inner.__closure__)
- return inner
- return func
- f = wrapper()
- i = f()
- i()
- print(wrapper.__closure__)
作业
- #2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
- # def func(l):
- # return l[1::2]
- # print(func([1,2,3,4,5,6,7,8,9]))
- # 3、写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。
- # def func(l):
- # if len(l) > 5:
- # return '大于5啦'
- # else:
- # return '没有大于5啦'
- # print(func('sd'))
- # 4、写函数,检查传入列表的长度,如果大于2,
- # 那么仅保留前两个长度的内容,并将新内容返回给调用者。
- # def func(l):
- # if len(l) > 2:
- # return l[0:2]
- # print(func([1,1,1,1]))
- # 5、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。
- # def func(l):
- # dic = {'digit': 0, 'letter': 0, 'space': 0, 'other': 0, }
- # for i in l:
- # if i.isdigit():
- # dic['digit'] += 1
- # elif i.isalpha():
- # dic['letter'] += 1
- # elif i == ' ':
- # dic['space'] +=1
- # else:
- # dic['other'] +=1
- # return dic
- # print(func('a'))
- # 6、写函数,检查用户传入的对象(字符串、列表、元组)
- # 的每一个元素是否含有空内容,并返回结果。
- # def func(l):
- # for i in l:
- # if i == ' ':
- # return '存在空内容'
- # print(func(''))
- #7、写函数,检查传入字典的每一个value的长度,如果大于2,
- # 那么仅保留前两个长度的内容,并将新内容返回给调用者。
- dic = {"k1": "v1v1", "k2": [11,22,33,44]}
- for i in dic:
- print(i)
- # PS:字典中的value只能是字符串或列表
- # def func(l):
- # a = []
- # for i in l.keys():
- # a.append(i)
- # for j in a:
- # l[j] = l[j][:2]
- # return l
- # print(func({"k1": "v1v1", "k2": [11,22,33,44]}))
- #################################################
- # def func(dic):
- # for k in dic:
- # if len(dic[k]) > 2:
- # dic[k] = dic[k][:2]
- # return dic
- # dic = {"k1": "v1v1", "k2": [11,22,33,44]}
- # print(func(dic))
- # 8、写函数,接收两个数字参数,返回比较大的那个数字。
- # def func(a,b):
- # if a > b:
- # return a
- # elif a < b:
- # return b
- # else:
- # return '相等'
- # print(func(2,2))
- # 三元运算
- # 变量 = 条件返回True的结果 if 条件 else 条件返回False的结果
- #必须要有结果
- #必须要有if和else
- #只能是简单的情况
- # a = 1
- # b = 5
- # c = a if a>b else b #三元运算
- # print(c)
- # 9、写函数,用户传入修改的文件名,与要修改的内容,
- # 执行函数,完成整个文件的批量修改操作(进阶)。
- # def func(filename, old, new):
- # with open(filename, encoding='utf-8') as f, open('%s.bak'%filename,'w',encoding='utf-8') as f1:
- # for line in f:
- # if old in line:
- # line = line.replace(old,new)
- # f1.write(line)
- # import os
- # os.remove(filename)
- # os.rename('%s.bak'%filename, filename)
- # func('lod', '大家', '你')
- # 2、写函数,接收n个数字,求这些参数数字的和。
- # def func(*l):
- # sum = 0
- # for i in l:
- # sum = sum + i
- # return sum
- # print(func(1,2,3,1,3))
- # 3、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
- # a=10
- # b=20
- # def test5(a,b):
- # print(a,b)
- # c = test5(b,a)
- # # print(c)
- # 4、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
- # a=10
- # b=20
- # def test5(a,b):
- # a=3
- # b=5
- # print(a,b)
- # c = test5(b,a)
- # print(c)
python之路——10的更多相关文章
- 【python之路10】python实例练习
#!usr/bin/env python # -*- coding:utf-8 -*- # 一.元素分类 # # 有如下值集合 [11,22,33,44,55,66,77,88,99,90...], ...
- 小白的python之路10/30磁盘分区
总结:fdisk mkfs mount 1.磁盘分区 硬盘分区有三种,主磁盘分区.扩展磁盘分区.逻辑分区. 一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个.且主分区+扩展分区总共 ...
- 小白的python之路10/30 vim编辑器
1.vim进入命令行之后的编辑过程
- 小白的python之路10/29 文件归档
一打包解包文件 [root@localhost ~]# cd /test/[root@localhost test]# touch a.txt b.txt c.txt[root@localhost t ...
- 小白的python之路10/22 day1
一.操作系统 操作系统就是一个协调.管理和控制计算机硬件资源和软件资源的控制程序.操作系统所处的位置如下图
- python之路---10 *args **kwargs 命名空间 作用域 函数的嵌套
二十八.函数进阶 1. "*" 和 "**" ① 在形参位置时 都是聚合的作用 *args 位置参数→元组 **kwargs 关键字参数→ ...
- 小白的python之路10/31&11/1文件操作系统
文件操作系统的介绍 ext4的superblock块是超级快,innode 块是专门存放文件信息的, block count将硬盘做成block块,对操作系统而言写在block块上就可了,eg:文件1 ...
- Python之路【第一篇】python基础
一.python开发 1.开发: 1)高级语言:python .Java .PHP. C# Go ruby c++ ===>字节码 2)低级语言:c .汇编 2.语言之间的对比: 1)py ...
- python之路 目录
目录 python python_基础总结1 python由来 字符编码 注释 pyc文件 python变量 导入模块 获取用户输入 流程控制if while python 基础2 编码转换 pych ...
随机推荐
- 设计图与html 对比
简易打开旧版火狐 网页版火狐添加组件 新版有时也会没有 谷歌是腾讯的
- 索引(B-树)
前言 本文是在讲述什么样的数据结构适合作为索引,以及其适合作为索引的原因.而阅读本文需要对B树和B+树结构有稍微的理解.以及需要对磁盘操作知识有稍微的了解.对于磁盘操作的相关知识,在文章尾部的链接文章 ...
- 第5天(半天)【shell编程初步、grep及正则表达式】
第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...
- Mysql优化系列之——优化器对子查询的处理
根据子查询的类型和位置不同,mysql优化器会对查询语句中的子查询采取不同的处理策略,其中包括改写为连接(join),改写为半连接(semi-join)及进行物化处理等. 标量子查询(Scalar S ...
- jsp页面错误
错误提示:The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path. 解决办法:在build ...
- 【转载】Java Restful API 文档生成工具 smart-doc
谁说生成api文档就必须要定义注解? 谁说生成接口请求和返回示例必须要在线? 用代码去探路,不断尝试更多文档交付的可能性. 如果代码有生命,为什么不换种方式和它对话! 一.背景 没有背景.就自己做自己 ...
- oracle数据库SQL入门
1.oracle数据库的下载.安装.卸载 Oracle下载: Oracle下载链接地址:http://www.oracle.com/technetwork/cn/database/enterprise ...
- scrapy框架初级
scrapy入门教程:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html 一.安装 python模块网站,应用文件放置在s ...
- 显示“快捷键清单” acessksy
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux磁盘挂载
mount命令 用于加载文件系统到指定的加载点.此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Lin ...