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. reduce & fold in Spark

    fold and reduce both aggregate over a collection by implementing an operation you specify, the major ...

  2. [USACO15DEC]最大流Max Flow

    树剖LCA+树上差分. 树上差分的基本操作. #include <queue> #include <iostream> #include <cstdio> usin ...

  3. 1、使用Python3爬取美女图片-网站中的每日更新一栏

    此代码是根据网络上其他人的代码优化而成的, 环境准备: pip install lxml pip install bs4 pip install urllib #!/usr/bin/env pytho ...

  4. 2019-03-20 Python爬取需要登录的有验证码的网站

    当你向验证码发起请求的时候,就有session了,记录下这次session 因为每当你请求一次验证码 或者 请求一次登录首页,验证码都在变动 验证码的链接可能不是固定的,可能需要GET/POST请求, ...

  5. Maven学习总结(24)——Maven版本管理详解

    Maven的版本分为快照和稳定版本,快照版本使用在开发的过程中,方便于团队内部交流学习.而所说的稳定版本,理想状态下是项目到了某个比较稳定的状态,这个稳定包含了源代码和构建都要稳定. 一.如何衡量项目 ...

  6. shell 键盘录入和运算

    一.read 命令,从键盘读入数据,赋给变量 1.脚本代码 #!/bin/sh read arg1 arg2 echo "第一个参数: $arg1" echo "第二个参 ...

  7. Oracle性能分析1:开启SQL跟踪和获取trace文件

    当Oracle查询出现效率问题时,我们往往须要了解问题所在,这样才干针对问题给出解决方式.Oracle提供了SQL运行的trace信息,当中包括了SQL语句的文本信息.一些运行统计,处理过程中的等待, ...

  8. 数据结构与算法系列----最小生成树(Prim算法&amp;Kruskal算法)

     一:Prim算法       1.概览 普里姆算法(Prim算法).图论中的一种算法.可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中.不但包含了连通图里的全部顶点(英语:Ve ...

  9. atitit。流程图的设计与制作&#160;attilax&#160;总结

    atitit.流程图的设计与制作 attilax 总结 1. 流程图的规范1 2. 画图语言2 2.1. atitit.CSDN-markdown编辑器2 2.2. js-sequence-diagr ...

  10. luogu 2679 子串

    子串 史上最简短的一篇博客,毕竟看题解ac心疼我的kmp /* f[i][j][k][0/1]表示A的前i个,B的前j个,用到了k个子串,当前字符选或者不选. 所以f[0][0][0][0]的方案数为 ...