python基础7(函数 Ⅱ)
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(函数 Ⅱ)的更多相关文章
- python基础——匿名函数
python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...
- python基础——返回函数
python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...
- python基础——sorted()函数
python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...
- python基础——filter函数
python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...
- python基础——匿名函数及递归函数
python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...
- 八. Python基础(8)--函数
八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x): ' ...
- python基础之函数详解
Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...
- Python学习笔记(一)python基础与函数
1.python基础 1.1输入与输出 输出 用print加上字符串,就可以打印指定的文字或数字 >>> print 'hello, world' hello, world > ...
- Day3 - Python基础3 函数、递归、内置函数
Python之路,Day3 - Python基础3 本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...
- Python基础__函数
本节将进入函数的介绍,函数是Python基础中最精彩的部分之一,接下来将对函数做详细介绍.函数 函数就是对代码进行一个封装.把实现某一功能的代码进行封装到一起.下次需要使用时不需要进行编写代码直接调用 ...
随机推荐
- (2016北京集训十三)【xsy1531】魔法游戏 - Nim游戏
题解: 好题!我的结论很接近正解了... 把一个数化成二进制,每次至少要拿走一位,最多全拿走,不能不拿.那么这就是一个经典的Nim问题了,子树异或起来就是根节点的答案,随便递推一下就行了. 代码: # ...
- [国家集训队2009]小Z的袜子
题目:洛谷P1494.BZOJ2038. 题目大意:给你一列袜子的颜色,每次要你求从区间$[L,R]$内随机选两个袜子颜色相同的概率.解题思路:首先,对于某个特定区间$[L,R]$,它的概率是$\fr ...
- JavaScript变量提升(Hoisting)的小案例
变量提升(Hoisting)的小案例 执行以下代码的结果是什么?为什么? 答案 这段代码的执行结果是undefined 和 2. 这个结果的原因是,变量和函数都被提升(hoisted) 到了函数体的顶 ...
- web前端-移动端响应式与自适应
一. 在HTML的头部加入meta标签 在HTML的头部,也就是head标签中增加meta标签,告诉浏览器网页宽度等于设备屏幕宽度,且不进行缩放,代码如下: <meta name="v ...
- mybatis中sql标签和include标签
1.首先定义一个sql标签,一定要定义唯一id.(name,age是要查询的字段) <sql id="Base_Column_List" >name,age</s ...
- WinServer-IIS-Dynamic IP Restrictions
动态IP限制 来自为知笔记(Wiz)
- ZOJ 3687
赤裸的带禁区的排列数,不过,难点在于如何用程序来写这个公式了.纠结了好久没想到,看了看别人的博客,用了DFS,实在妙极,比自己最初想用枚举的笨方法高明许多啊.\ http://blog.csdn.ne ...
- freeradius 启动报错Refusing to start with libssl version OpenSSL 1.0.1
改动etc/raddb下的radiusd.conf文件 找到allow_vulnerable_openssl = no,改动成allow_vulnerable_openssl = yes
- Android 中文字体的设置方法和使用技巧
Android TextView字体颜色等样式具体解释连接:http://blog.csdn.net/pcaxb/article/details/47341249 1.使用字体库(自己定义字体的使用) ...
- 实现 jstl标签foreach 功能
jsp 页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...