接上一篇函数
函数的名称空间

> 在python解释器开始执行之后, 就会在内存中开辟一个空间, 每当遇到一个变量的时候, 就把变量名和值之间的关系记录下来, 但是当遇到函数定义的时候, 解释器只是把函数名读入内存, 表示这个函数存在了, 至于函数内部的变量和逻辑, 解释器是不关心的. 也就是说一开始的时候函数只是加载进来, 仅此而已, 只有当函数被调用和访问的时候, 解释器才会根据函数内部声明的变量来进行开辟变量的内部空间. 随着函数执行完毕, 这些函数内部变量占用的空间也会随着函数执行完毕而被清空.

```
def fun():
a = 10
print(a)
fun()
print(a) # a不存在了已经..
```

> ​ 命名空间分类: ​ 1. 全局命名空间—> 我们直接在py文件中, 函数外声明的变量都属于全局命名空间 ​ 2. 局部命名空间—>
> 在函数中声明的变量会放在局部命名空间 ​ 3. 内置命名空间—> 存放python解释器为我们提供的名字, list, tuple,
> str, int这些都是内置命名空间
>
> 加载顺序:
> 1.内置命名空间
> 2.全局命名空间 ​
> 3. 局部命名空间(函数被执行的时候)

> 取值顺序: ​
> 1. 局部命名空间 ​
> 2. 全局命名空间
> 3. 内置命名空间

**函数的嵌套**

- [ ] 只要遇见了()就是函数的调用. 如果没有()就不是函数的调用
- [ ] 函数的执行顺序

```
def fun1(): #第一步
print(111) #第六步
def fun2(): #第二步
print(222) #第四步
fun1() #第五步
fun2() #第三步
print(111) #第七步

```
**gloabal、nonlocal**

```
a = 100
def func():
global a # 加了个global表示不再局部创建这个变量了. 而是直接使用全局的a
a = 28
print(a)
func()
print(a)
```
global表示. 不再使用局部作用域中的内容了. 而改用全局作用域中的变量

- [ ] global 宗旨:在函数内部修改全局的变量,如果全局中不存在就创建一个变量
- [ ] nonlocal宗旨:nonlocal 只修改上一层变量,如果上一层中没有变量就往上找一层,只会找到函数的最外层,不会找到全局进行修改

```
a = 10
def func1():
a = 20
def func2():
nonlocal a
a = 30
print(a)
func2()
print(a)
func1()
结果:
加了nonlocal
30
30
不加nonlocal
30
20
```
**内置函数**

- [ ] 什么是内置函数? 就是python给你提供的. 拿来直接用的函数, 比如print., input等等.截止到python版本3.6.2 python一共提供了68个内置函数. 有 一些我们已经用过了. 有一些还没有用过. 还有一些需要学完了面向对象才能继续学习的.今天我们就认识一下python的内置函数.

为了方便大家记忆,我将这些内置函数进行分类。
- [ ] 作用域相关:
locals():
返回当前作⽤用域中的名字
globals():
返回全局作⽤用域中的名字
- [ ] 迭代器相关:
range()
next():
迭代器向下执⾏一次, 内部实际使用了next()方法返回迭代器的下一个项目
iter():
获取迭代器, 内部实际使用的是iter()方法来获取迭代器
- [ ] 字符串类型代码的执行:
eval():
执行部分字符串类型的代码,并返回最终结果
exec():
执行字符串类型的代码
- [ ] 输入和输出相关:
input():
获取用户输入的内容
print():
打印输出
- [ ] 内存相关:
hash():
获取到对象的哈希值(int, str, bool, tuple)
id():
获取到对象的内存地址
- [ ] 文件操作
open():
用于打开一个文件, 创建一个文件句柄
- [ ] 帮助
help():
函数用于查看函数或模块用途的详细说明
- [ ] 调用相关:
callable():
用于检查一个对象是否是可调用的. 如果返回True, object有可能调用失败, 但如果返回False. 那调用绝对不会成功
- [ ] 查看内置属性:
dir():
查看对象的内置属性
**基础数据类型相关**
- [ ] 数字相关:
​ bool() 将给定的数据转换成bool值. 如果不给值. 返回False
​ int() 将给定的数据转换成int值. 如果不给值, 返回0
​ float() 将给定的数据转换成float值. 也就是小数
​ complex() 创建一个复数. 第一个参数为实部, 第二个参数为虚部. 或者第一个参数直接 用字符串来描述复数
- [ ] 数学运算:
abs() 返回绝对值
divmod() 返回商和余数
round() 四舍五入
pow(a, b) 求a的b次幂, 如果有三个参数. 则求完次幂后对第三个数取余
sum() 求和
​ min() 求最小值
​ max() 求最大值

**数据结构相关**
- [ ] 列表和元组:
​ list() 将一个可迭代对象转换成列表
​ tuple() 将一个可迭代对象转换成元组
​ reversed() 将一个序列翻转, 返回翻转序列的迭代器
- [ ] 字符串相关:
str() 将数据转化成字符串
format() 与具体数据相关, 用于计算各种小数, 精算等
bytes() 把字符串转换成bytes类型
repr() 返回一个对象的官方表示形式
**数据集合**
dict() 创建一个字典
set() 创建一个集合
frozenset() 创建一个冻结的集合,冻结的集合不能进行添加和删除操作
**其他相关**
len() 返回一个对象的元素个数
enumerate() 获取枚举对象

**lambda 函数**
- [ ] 匿名函数,为了解决一些简单的需求而设计的一句话函数

```
def func(n):
return n**n
print(func(4))
f = lambda x: x**x
print(f(4))
结果:
256
256
```
lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数

语法:
  函数名 = lambda 参数:返回值
注意:
  1.函数的参数可以有多个,多个参数之间用逗号隔开
  2.匿名函数不管多复杂.只能写一行.且逻辑结束后直接返回数据
  3.返回值和正常的函数一样,可以是任意数据类型,返回值的时候只能返回一个不能返回多个匿名函数并不是说一定没有名字,这里前面的变量就是一个函数名,说他是匿名原因是我们通过name查看的时候是没有名字的.统一都叫做lambda.在调用的时候没有什么特别之处像正常的函数调用既可
**高级函数**

- [ ] filter/map/reduce
1.filter:筛选过滤
语法: filter(function,iterable)
function: 用来筛选的函数,在filter中会自动的把iterable中的元素传递给function,然后根据function返回的True或者False来判断是否保留此项数据
iterable:可迭代对象

```
lst = [{'id':1,'name':'alex','age':18},
{'id':1,'name':'wusir','age':17},
{'id':1,'name':'taibai','age':16},]
ls = filter(lambda e:e['age'] > 16,lst)
print(list(ls))
结果:
[{'id': 1, 'name': 'alex', 'age': 18},
{'id': 1, 'name': 'wusir', 'age': 17}]
```
2.map: 映射函数
语法: map(function,iterable) 可以对可迭代对象中的每一个元素进映射,分别取执行function
计算列表中每个元素的平方,返回新列表

```
lst = [1,2,3,4,5]
def func(s):
return s*s
mp = map(func,lst)
print(mp)
print(list(mp))
```
3.reduce:

```
from functools import reduce
def func(x,y):
return x + y
# reduce 的使用方式:
# reduce(函数名,可迭代对象) # 这两个参数必须都要有,缺一个不行
ret = reduce(func,[3,4,5,6,7])
print(ret) # 结果 25
reduce的作用是先把列表中的前俩个元素取出计算出一个值然后临时保存着,
接下来用这个临时保存的值和列表中第三个元素进行计算,求出一个新的值将最开始
临时保存的值覆盖掉,然后在用这个新的临时值和列表中第四个元素计算.依次类推
注意:我们放进去的可迭代对象没有更改
以上这个例子我们使用sum就可以完全的实现了.我现在有[1,2,3,4]想让列表中的数变成1234,就要用到reduce了.
普通函数版
from functools import reduce
def func(x,y):
return x * 10 + y
# 第一次的时候 x是1 y是2 x乘以10就是10,然后加上y也就是2最终结果是12然后临时存储起来了
# 第二次的时候x是临时存储的值12 x乘以10就是 120 然后加上y也就是3最终结果是123临时存储起来了
# 第三次的时候x是临时存储的值123 x乘以10就是 1230 然后加上y也就是4最终结果是1234然后返回了
l = reduce(func,[1,2,3,4])
print(l)
匿名函数版
l = reduce(lambda x,y:x*10+y,[1,2,3,4])
print(l)
```
**以上就是函数的内容,感谢点击观看,欢迎评论**

python 基础学习笔记(6)--函数(2)的更多相关文章

  1. python基础学习笔记——初识函数

    什么是函数 我们目前为止,已经可以完成一些软件的基本功能了,那么我们来完成这样一个功能:约x 1 2 3 4 5 pint("拿出手机") print("打开陌陌&quo ...

  2. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  3. Python基础学习笔记(十一)函数、模块与包

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-functions.html 3. http://www.liao ...

  4. Python基础学习笔记(九)常用数据类型转换函数

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-variable-types.html 3. http://www ...

  5. Python基础学习笔记(八)常用字典内置函数和方法

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...

  6. Python基础学习笔记(七)常用元组内置函数

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...

  7. Python基础学习笔记(六)常用列表操作函数和方法

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-lists.html 3. http://www.liaoxuef ...

  8. python 基础学习笔记(1)

    声明:  本人是在校学生,自学python,也是刚刚开始学习,写博客纯属为了让自己整理知识点和关键内容,当然也希望可以通过我都博客来提醒一些零基础学习python的人们.若有什么不对,请大家及时指出, ...

  9. Python 基础学习笔记(超详细版)

    1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...

  10. Python基础学习笔记(十二)文件I/O

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-files-io.html ▶ 键盘输入 注意raw_input函 ...

随机推荐

  1. 声明式服务调用Feign

    什么是 Feign Feign 是种声明式.模板化的 HTTP 客户端(仅在 consumer 中使用).   什么是声明式,有什么作用,解决什么问题? 声明式调用就像调用本地方法一样调用远程方法;无 ...

  2. CoderForces-Round60D(1117) Magic Gems

    D. Magic Gems time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...

  3. Koa - 中间件(理解中间件、实现一个验证token中间件)

    前言 Koa 应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的. 当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件.当在下游没有更多的中间件执行后 ...

  4. word2vec用到的c语言知识

    argc,avgv用法 argc 表示有几个参数,因为至少要指定一个应用程序的名,所以argc>=1. argv表示参数是什么. int main(int argc, char **argv) ...

  5. 《java面试十八式》--引子

    爪哇城中   “喂,你等等我啊”少女气喘吁吁的喊道   “大小姐,你可快点吧,报名马上就要结束了.”   这是爪哇城一年一度的大选比赛,被选上的人会留下来任职,享有名誉和金钱,所以大家都在积极准备. ...

  6. selenium处理常见自动化场景

    目录 定位一组对象 层级定位 定位frame中的对象 alert/confirm/prompt处理 下拉框处理 调用javascript 多窗口处理 处理验证码 处理cookie 定位一组对象 web ...

  7. K3cloud、erp系统实时滚动展示未处理数据,监控投诉处理进度

     痛点:企业内部erp人工记录产品投诉销售单,是否跟踪处理完客户投诉,结果不能实时透明,当天还有多少未解决的投诉单,也不能实时查看到,除非手工去系统单据查询,很不方便,跟踪也不顺畅!   解决方案:利 ...

  8. 35个Java代码优化的细节,你知道几个?

    前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没 ...

  9. WMB Commands

    Check ports: mqsiprofile //Run this first mqsireportproperties MB8BROKER -e AddressSampleProvider -o ...

  10. Python3之Django的Cookie与Session的使用

    一.Cookie的使用 1.设置Cookie url.set_cookie("tile","zhanggen",expires=value,path='/' ) ...