python语法基础-函数-进阶-长期维护
############### 函数的命名空间和作用域 ##############
""" # 函数进阶 命名空间和作用域 命名空间
全局命名空间——我们自己写的非函数中的代码
是在程序从上到下被执行的过程中依次加载进内存的,
放置了我们设置的所有的变量名和函数名, 局部命名空间,——函数
就是函数内部定义的名字
在函数调用的时候才会产生这个命名空间,随着函数调用的结束,这个命名空间就消失了, 内置命名空间,——Python解释器,
就是Python解释器一启动就可以使用的名字,存储在内置的命名空间中,比如print,input,list等,
内置的名字,在启动解释器的时候就会加载进去内存中, 在全局我们可以使用内置的明明靠空间,但是不能使用局部的,
在局部我们可以使用全局的,内置的命名空间,
在内置的里面不能使用全局的和局部的, 所以就像是一个套娃一样,最外层是内置的,然后是全局的,然后是局部的, 如果我们定义在全局定义了和内置的函数同名的名字,会使用全局的, """ def input():
print(123) def func():
# input=1
print(input) func() """
作用域 作用域和命名空间是分不开的, 作用域有两种,
1,全局作用域,内置和全局的命名空间,都是全局作用域,
2,局部作用域,我们现在就知道一个局部,就是函数, 对于不可变类型,你可以在局部查看全局的变量,但是不能修改,如果要修改,你就需要使用global进行声明,
自己的代码中应该尽量少使用global,这样会导致代码非常不安全,混乱,
""" a =1 # def func():
# global a
# a += 1
# func()
# print(a) def func(a):
a += 1
return a
# 不使用global,可以使用另一种方法
a = func(a)
print(a) # 2 """
globals
locals """
a =1
b = 2
def func():
x = "aaa"
y = "bbb"
print(locals()) # 会打印出所有的局部变量的名字和值, {'y': 'bbb', 'x': 'aaa'}
print(globals()) # 这个还是全局的, func()
print(globals()) # 会打印出所有全局的名字,和内置的变量的名字,然后是函数名,
print(locals()) # print(globals()),这个打印出的本地和全局是一样的,
############### 函数的嵌套调用,函数的嵌套定义 ##############
# 函数的嵌套调用 # 两个数判断最大值
def max(a,b):
return a if a>b else b # 三元运算,a大于b,就是a,否则就是b, # 三个数判断最大值,先判断两个,然后再判断和第三个,
def the_max(x,y,z):
c = max(x,y) # 这就是函数的嵌套调用,
return max(c,z) # 函数的嵌套定义,
# nonlocal 找离当前函数最近的一个局部变量,只会影响最近的一层,不能是全局变量,
def outer():
a = 1
def innner():
print(123,)
def innner2():
nonlocal a
a += 1
print(a)
innner2()
innner() # 一定要有这一句,否则内部定义的函数,不会生效, outer() # 函数名就是一个内存地址,
# 1,函数名可以赋值
# 2,函数名可以作为容器类型的元素,
# 3,函数可以作为参数调用,# 函数可以作为参数调用,
def func1():
print(123)
func2=func1 # 函数名可以赋值 func2() list1=[func1,func2] # 函数名可以作为容器类型的元素, def func3(func1): # 函数可以作为参数调用,
func1()
return func1 # 函数名可以作为函数的返回值,
############### 函数的闭包 ##############
# 闭包
def outer():
a = 1
def inner():
print(a)
print(inner.__closure__) # 这个inner函数就是一个闭包函数
inner()
outer()
outer()
outer()
"""
(<cell at 0x0000000009C7BF78: int object at 0x000000005AA560A0>,)
1
(<cell at 0x0000000009C7BF78: int object at 0x000000005AA560A0>,)
1
(<cell at 0x0000000009C7BF78: int object at 0x000000005AA560A0>,)
1
"""
# 这种是闭包,但是这种写法比较浪费资源,每次都要生成a变量,
# 闭包的定义,就是一个嵌套函数,并且内部函数调用外部函数的变量,如果你没有调用外部函数的变量,就不是一个闭包,
# 所以闭包至少是两个条件,1是嵌套函数,2是内部的函数要使用到外部函数的变量, # 优化这种写法:
def outer():
a = 1
def inner():
print(a)
print(inner.__closure__) # (<cell at 0x0000000009C68FA8: int object at 0x000000005EA960A0>,),有cell就是一个闭包,
return inner # 在外部函数中返回内部函数的名字,这就是一个闭包最常用的方式,
# 闭包最常用的形式是在外部函数中返回内部函数,
inn = outer() # (<cell at 0x0000000009C7BF78: int object at 0x000000005A6B60A0>,)
inn() #
inn() #
inn() #
inn() # 1 # 这种写法我调用这个函数100次,但是里面的a变量就只会生成一次了,不会反复生成了,节省资源,
"""
(<cell at 0x000000000B90BF78: int object at 0x000000005AA560A0>,)
1
1
1
1
"""
#############################################
############################################
python语法基础-函数-进阶-长期维护的更多相关文章
- python语法基础-面向对象-进阶-长期维护
############### @property定义属性 ############## # 所以对于定义属性你有好几种方式了和种类了,# 静态属性,动态属性, # property # ...
- python语法基础-函数-递归函数-长期维护
############### 递归 ############## # 递归的定义——在一个函数里再调用这个函数本身 # 递归的最大深度——998 # 二分查找算法 # 你观察这个列表,这是 ...
- python语法基础-异常操作-长期维护
############### python-异常的操作 ############### # 异常:python解释器遇到一个错误,会停止程序的执行,并且提示错误信息,这就是异常, # 抛出异 ...
- python语法基础-文件操作-长期维护
############### python-简单的文件操作 ############### # python中文件的操作 # 文件操作的基本套路 # 1,打开文件,默认是是只读方式打开文件 ...
- python语法基础-常用模块-长期维护
############### 常用模块 ################ # 常用模块: # 1,collections模块 # 2,时间模块,time模块,datatime模块 # ...
- python语法基础-函数-迭代器和生成器-长期维护
############### 迭代器 ############## """ 迭代器 这是一个新的知识点 我们学习过的可以迭代的对象有哪些? list str ...
- python语法基础-函数-内置函数和匿名函数-长期维护
################## 内置函数 ####################### """ 一共是 68个内置函数: 反射相关的内置函 ...
- python语法基础-函数-装饰器-长期维护
######################################################### # 装饰器 # 装饰器非常重要,面试Python的公司必问, # 原则:开放封闭原则 ...
- python语法基础-函数-基础-长期维护
############### 函数的定义调用,返回值和返回值接收 ############## def mylen(): s = "myname" i = 0 for ...
随机推荐
- 吴裕雄--天生自然 JAVASCRIPT开发学习: 类型转换
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- PAT Advanced 1147 Heaps (30) [堆,树的遍历]
题目 In computer science, a heap is a specialized tree-based data structure that satisfies the heap pr ...
- 汪慧和201771010123《面向对象程序设计(Java)》第三周学习总结
1.实验目的与要求 (1)进一步掌握Eclipse集成开发环境下java程序开发基本步骤: (2)熟悉PTA平台线上测试环境: (3)掌握Java语言构造基本程序语法知识(ch1-ch3): (4)利 ...
- retrofit 上传文件 跟参数
@Multipart @POST("postFied") Call<Void> postFied(@PartMap Map<String,String> m ...
- Tensorflow基础笔记
1.Keras是一个由Python编写的开源人工神经网络库. 2.深度学习主要应用在三个大的方向,计算机视觉,自然语言处理,强化学习 3.计算机视觉主要有:图片识别,目标检测,语义分割,视频理解(行为 ...
- 使用Matplotlib
1.Matplotlib是python的一个绘图库. 2.from matplotlib import pyplot as plt
- [ZJCTF 2019]NiZhuanSiWei
0x00知识点 1:data伪协议写入文件 2:php:// php://filter用于读取源码 php://input用于执行php代码 3反序列化 0x01解题 打开题目,给了我们源码 < ...
- Ctrl +c 脚本中
#!/bin/bashsar -n DEV 1 111111111111111 >>1.txt & #实时网卡流量数据 sleep 3 && kill -2 ...
- awk下 gsub函数用法
(2012-03-27 01:37:28) 标签: awk gsub linux 函数 it 分类: linux gsub函数则使得在所有正则表达式被匹配的时候都发生替换 gsub(regular ...
- 干货 | CDN搭配OSS最佳实践 ——搭建动静态分离的应用架构
一.传统架构及痛点 传统的网站产品应用架构,所有资源部署在应用服务器本地存储或挂载的数据存储区,对于动静态资源不作分离, 产品架构如下图所示: 该架构存在诸多问题: ● 系统性能会随着系统访问量的增长 ...