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

> 在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. csuoj-1900 锋芒毕露

    Description 小闪最近迷上了二刀流——不过他耍的其实是剑——新买了一个宝库用来专门存放自己收集的双剑.一对剑有两把,分只能左手用的和只能右手用的,各自有一个攻击力数值.虽然一对剑在小闪刚拿到 ...

  2. 【React】在React中 JSX 代码如何转成 JS 代码?

    一.介绍 写 React 代码的朋友应该都是直接写 JSX 代码,JSX 让我们可以在 JS 中直接写 HTML 代码,可阅读性较高.本章节主要介绍 JSX 通过 babel 转换后会生成什么样式代码 ...

  3. laravel55

    增//save返回true false$res = new member();res->username = 'a';$res->password = 'b';dump($res-> ...

  4. android开发针对小米、三星、华为8.0+系统个别型号打开应用闪退

    最近开发中有个别客户反馈新换的三星.小米或者华为手机打开应用就闪退,而且是个别型号.针对这种情况特别查阅了一些资料,原因是8.0+系统的手机不允许后台创建服务,那么怎么修改呢,请看代码: 1.修改启动 ...

  5. Python基础-day01-5

    注释 目标 注释的作用 单行注释(行注释) 多行注释(块注释) 01. 注释的作用 使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性 02. 单行注释(行注释) 以 # 开头,# ...

  6. ajax添加请求头(添加Authorization字段)

    我们在发AJAX请求的时候可能会需要自定义请求头,在jQuery的$.ajax()方法中提供了beforeSend属性方便我们进行此操作. beforeSend: function(request) ...

  7. Nginx的配置文件位置以及组成部分结构讲解

    场景 Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...

  8. 【Web前端开发】---自学转行roadmap

    [Web前端开发] 自学转行roadmap: ● html/css ● 京东项目实操 ● javascript 基础 ● webapi ● javascrip高级 ● jquery基础 ● Ajax ...

  9. 一键删除数据库所有的外键约束-FOREIGN_KEYS

    DECLARE @ESQL VARCHAR(1000);DECLARE FCursor CURSOR --定义游标FOR (SELECT  'ALTER TABLE '+O.name+' DROP  ...

  10. Repository封装方法

    1.创建依赖的实体类 /// <summary> /// 泛型实体基类 /// </summary> /// <typeparam name="TPrimary ...