1、python代码运行遇到函数时

从python解释器开始执行之后,就在内存中开辟了一个空间
每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来。
但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心。
等执行到函数调用的时候,python解释器会再开辟一块内存来存储这个函数里的内容,这个时候,才关注函数里面有哪些变量,而函数中的变量会存储在新开辟出来的内存中。函数中的变量只能在函数的内部使用,并且会随着函数执行完毕,这块内存中的所有内容也会被清空。

2、命名空间

  • “存放名字与值的关系”的空间
  • 内置命名空间
    存放的是python解释器提供的名字(input,print,str...),拿过来就可以使用,内置命名空间的名字在解释器启动的时候就被放入内存
  • 全局命名空间
    当前模块的命名空间
    当代码执行的时候,从上到下按执行的过程加载到内存
  • 局部命名空间
    函数内部定义的名字
    随函数调用而创建,随函数结束而删除
  • 命名空间的加载顺序
    内置命名空间 -> 全局命名空间 -> 局部命名空间
  • 命名空间的取值顺序
    局部命名空间 -> 全局命名空间 -> 内置命名空间

3、作用域

全局作用域:内置命名空间和全局命名空间中的名字都属于全局作用域
局部作用域:函数(局部命名空间中的名字属于局部作用域) #查看局部作用域中的名字
locals() #查看全局作用域中的名字
globals()

4、global

对于不可变数据类型,局部中可以获得其值,但是不能修改
如果要修改,可以通过global关键字 a = 1
b = 2
def func():
global a
a = 6 #合法
b = 4 #不合法操作

5、函数嵌套

def outer():
def inner():
print('---')
inner() outer()

6、nonlocal

在嵌套的函数中,如果我们要修改上层函数的变量,通过上面global是做不到的,因为global获取的是全局中的那个变量,所以可以通过nonlocal来获取(只能获取最接近的那层,也就是上一层中的变量)

a = 1
def outer1():
a = 2
def outer2():
a = 3
def inner():
nonlocal a
a = 5
inner()
outer2() outer1() #outer2中的a = 3将变成a = 5

7、函数名的本质是内存地址,可以作为容器元素,返回值,参数

#函数名可以赋值
def func():
print('I am func') func2 = func
func2() #实际上执行的是func #函数名可以作为容器的元素
l = [func,fun2]
for f in l:
f() #函数名可以作为返回值
def ohyeah(f):
f()
return f

8、闭包

闭包就是内层函数调用外层函数的变量

def outer():
a = 1
def inner():
print(a) #如果是闭包,调用__closure__将返回cell
def outer():
a = 1
def inner():
print(a)
print(inner.__closure__)
outer() #闭包的用法就是在函数外部使用其内部的函数。
#可以使外部函数的变量无需重复创建
def outer():
a = 1
def inner():
print(a)
return inner
out = outer()
out()
out()

9、三目运算符

def max(a,b):
return a if a>b else b

python基础7(函数 Ⅱ)的更多相关文章

  1. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  2. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  3. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  4. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  5. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  6. 八. Python基础(8)--函数

    八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x):     ' ...

  7. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  8. Python学习笔记(一)python基础与函数

    1.python基础 1.1输入与输出 输出 用print加上字符串,就可以打印指定的文字或数字 >>> print 'hello, world' hello, world > ...

  9. Day3 - Python基础3 函数、递归、内置函数

    Python之路,Day3 - Python基础3   本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...

  10. Python基础__函数

    本节将进入函数的介绍,函数是Python基础中最精彩的部分之一,接下来将对函数做详细介绍.函数 函数就是对代码进行一个封装.把实现某一功能的代码进行封装到一起.下次需要使用时不需要进行编写代码直接调用 ...

随机推荐

  1. 路飞学城Python-Day19

    [23.绑定方法与非绑定方法介绍] 再类的内部的定义的函数分为两大类: 1.绑定方法: 绑定到对象的方法:直接用def做的函数属性,类内部定义的函数,如果没有绑定装饰器,就是给对象使用的函数,绑定给谁 ...

  2. [学习笔记] CS131 Computer Vision: Foundations and Applications:Lecture 9 深度学习

    深度学习 So far this week Edge detection RANSAC SIFT K-Means Linear classifier Mean-shift PCA/Eigenfaces ...

  3. vue父组件引用子组件方法显示undefined问题原因及解决方法

    关于vue父组件引用子组件问题 1.首先导入子组件并且在components中定义子组件 2.引用子组件,并定义ref,ref定义的名称用于 this.$refs所调用的名称 3.调用子组件的方法 ( ...

  4. SQL SERVER-identity | @@identity | scope_identity

    主键自增 IDENTITY(1,1),MS SQL Server 使用 IDENTITY 关键字来执行 auto-increment 任务. 在上面的实例中,IDENTITY 的开始值是 1,每条新记 ...

  5. ASP.NET-服务器客户端的信息保持

    ASP.NET客户端和服务器端的信息保持方案 来自为知笔记(Wiz)

  6. 杭电1596 find the safest road

    find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  7. Android基础新手教程——1.5.2 Git之使用GitHub搭建远程仓库

    Android基础新手教程--1.5.2 Git之使用GitHub搭建远程仓库 标签(空格分隔): Android基础新手教程 本节引言: 在上一节中.我们学习了怎样使用Git.构建我们的本地仓库.轻 ...

  8. ubuntu16.04安装破解pycharm

    分两步,首先安装jdk,然后安装并破解pycharm 一.安装jdk 参考:http://blog.csdn.net/yebhweb/article/details/55098189 下载jdk1.8 ...

  9. bzoj2190: [SDOI2008]仪仗队(欧拉)

    2190: [SDOI2008]仪仗队 题目:传送门 题解: 跟着企鹅大佬做题! 自己瞎搞搞就OK,不难发现,如果以C作为原点建立平面直角坐标系,那么在这个坐标系中,坐标为(x,y)且GCD(x,y) ...

  10. Redis和Memcache和MongoDB简介及区别分析(整理)

    Redis和Memcache 一.Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年 ...