# 函数是第一类对象:函数名指向的值可以被当中参数传递

# 1.函数名可以被传递
# name = 'jason'
# x = name
# print(x)
# print(id(x))
# def func():
# print('from func')
# # print(func)
# print(id(func))
# f = func
#
# func()
# print(f)
# f() # 其实指向的也是函数func指向函数体代码的内存地址

2.函数名可以被当做参数传递给其他函数
# def func():
# print('from func')
#
# def index(args):
# print(args)
# args()
# print('from index')
# # index(1)
# index(func)

# 3.函数名可以被当做函数的返回值
# def index():
# print('index')
#
#
# def func():
# print('func')
# return index
# res = func()
# print(res)
# res()

# 4.函数名可以被当做容器类型的参数

# 在函数内部调用其他函数
# 可以将复杂的逻辑简单化
# def index():
# func()
# print('index')
#
# def func():
# # index()
# print('func')
# index()

def my_max(x,y):
if x > y:
return x
return y

def my_max4(a,b,c,d):
res1 = my_max(a,b)
res2 = my_max(res1,c)
res3 = my_max(res2,d)
return res3
print(my_max4(1,2,10,4))

# def outer():
# x = 1
# print('outer')
# def inner():
# print('inner')
# # print(inner)
# return inner
#
# res = outer()
# # print(res)
# res()

# 函数内定义函数应用场景

"""
写一个函数
该函数用户可以通过传参的不同控制函数执行不同的功能
"""

# 名称空间是什么?
# 就是放名字的地方
# 详细解释:存放的是变量名与变量值的内存地址得绑定关系的地方
# 要想访问一个变量的值 必须先去名称空间中拿到对应的名字 才能够访问变量的值

# name = 'jason'
# print(name)

x = 1

if 1 ==1 :
y = 2

# print(y)
# while True:
# z = 3
for i in [1,2,3]:
print(i)
print(i)

def func():
username = 'jason'
print(x)
func()

"""
名称空间的分类
1.内置名称空间:python解释器提前给你定义好的名字(已经存放到内置名称空间中了)
len
max
min

2.全局名称空间:文件级别的代码
x = 1

if 1 ==1 :
y = 2

print(y)
while True:
z = 3

x,y,z都会放到全局名称空间
if for while 无论嵌套多少层 它们内部所创建的名字都是全局名称空间的
3.局部名称空间:函数体内创建的名字都属于局部名称空间
username

生命周期:

内置名称空间:只要python解释器已启动立马创建 关闭python解释器的时候内置名称空间自动销毁
全局名称空间:只要你右键运行py文件会自动创建 py文件程序运行结束自动销毁
局部名称空间:函数被调用的时候自动创建 函数指向结束立即销毁(动态创建动态销毁)


名字的查找顺序

"""

# len = '我是全局名称空间的len'
# def func():
# # len = '我是局部名称空间的len'
# print(len)
#
#
# # print(len) # 我现在站在的是全局的位置
# func()
#
#
#
#
# def index():
# x = 'xxx'
#
# def index2():
# print(x)
# y = 666
#
# index()
# index2()

"""
名字的查找 (******)
1.需要先确定你当前在哪(大前提)
1.站在全局: 全局 >>> 内置
2.站在局部: 局部 >>> 全局 >>> 内置

"""
# x = 111
# def f1():
# x = 222
# def f2():
# x = 333
# def f3():
# # x = 444
# def f4():
# # x = 555
# print(x)
# x = 777 # 纯粹为了教学演示
# f4()
# x = 777 # 纯粹为了教学演示
# f3()
# f2()
# f1()

# def func():
# x = 1
# def index():
# print(x) # 获取全局找x
# return index
#
# res = func()
# x = 999
# res()

"""
函数在定义阶段查找名字的顺序就已经固定了 不会因为函数的调用位置变化而改变(******)
"""

# x=111
# def outer():
# def inner():
# print('from inner',x)
# return inner
# f=outer()
# x = 222
# f()

# x=111
# def outer():
# def inner():
# print('from inner',x)
# return inner
# f=outer()
# def func():
# x=333
# f()
# func()

# x=111
# def outer():
# def inner():
# print('from inner',x)
# x = 66666666
# return inner
# f=outer()
# f()

# 作用域
# 全局作用域
# 全局有效: 内置名称空间 全局名称空间

# 局部作用域
# 局部有效 局部作用域

# global nonlocal
"""
1.在局部修改全局的变量
"""

# global 在局部修改全局的不可变数据类型
# x = [] # 因为列表是可变类型
x = 1 # 不可变类型
username = 'jason'
def func():
# x.append('嘿嘿嘿')
global x,username # 修改全局变量 而不是创建局部名称空间
x = 999
username = 'egon'
func()
print(x)
print(username)

# nonlocal 局部修改局部
def func():
x = 1
def index():
nonlocal x
x = 2
index()
print(x)
func()

"""
global:局部修改全局 如果想修改多个 逗号隔开
nonlocal:局部修局部 如果想修改多个 逗号隔开

"""

py10函数之嵌套-名称空间作用域的更多相关文章

  1. Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数

    本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...

  2. Python记录9:函数4:名称空间作用域+闭包函数+装饰器

    ''' 一: 名称空间namespaces     名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种     内置名称空间:         1. 特点: 存放是python解释器自 ...

  3. 【0809 | Day 12】可变长参数/函数的对象/函数的嵌套/名称空间与作用域

    可变长参数 一.形参 位置形参 默认形参 二.实参 位置实参 关键字实参 三.可变长参数之* def func(name,pwd,*args): print('name:',name,'pwd:',p ...

  4. 《Python》 函数进阶和名称空间作用域

    函数进阶: 一.动态参数:*args  **kwargs *args是元祖形式,接收除去键值对以外的所有参数 # args可以换成任意变量名,约定俗成用args **kwargs接收的只是键值对的参数 ...

  5. Python 函数对象-函数嵌套-名称空间与作用域-闭包函数

    今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...

  6. day12 函数对象,名称空间与作用域

    """ 今日内容: 1.函数参数传值细节 2.三元表达式 3.列表及字典推导式 4.函数对象 5.名称空间与作用域 6.函数的嵌套定义初识 ""&qu ...

  7. Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法

    Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法 目录 Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global ...

  8. Python 入门基础10 --函数基础3 函数对象、名称空间、装饰器

    今日内容 1.函数对象 2.名称空间与作用域 3.函数的嵌套调用与闭包 4.装饰器 一.函数对象 1.1 定义 函数名存放的就是函数地址,所以函数名也就是对象,称之为函数对象 1.2 函数对象的应用 ...

  9. Python--day12(三元表达式、函数对象、名称空间与作用域、函数嵌套定义)

    今日主要内容 1.  函数默认值细节(*) 2.  数据类型补充:三元表达式.列表推导式.字典推导式 (***) 3.  函数对象:函数名的各种应用场景 (*****) 4.  名称空间与作用域:解释 ...

  10. python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义

    复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...

随机推荐

  1. vue弹窗后如何禁止滚动条滚动

    toggleBody(isPin){ if(isPin){ document.body.style.height = '100vh' document.body.style['overflow-y'] ...

  2. Android:Fragment 和 include 标签引入布局的区别

    Fragment 存在于 Activity 中,但是 Fragment 管理自己的界面和逻辑,表面上看,Fragment 最终的布局还是要被压入到 Activity 中的布局中.03#Android ...

  3. Cesium之影像底图加载

    1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...

  4. PostgreSQL lag,lead获取记录前后的数据

    场景:获取当前行的下一行某一字段数据,获取当前行的上一行某一字段数据 1.测试数据: postgres=# select * from tb1; id | name ----+------ 1 | a ...

  5. IDEA 上传项目到 Gitee 小记

    此方式可直接将 IDEA 中项目上传到 Gitee 仓库,无需打开 Gitee 手动创建空仓库. 前提环境 安装好 Git,并在 IDEA 中成功配置: 注册有 Gitee 账号,并记得账号密码: I ...

  6. LeetCode-1145 二叉树着色游戏

    来源:力扣(LeetCode)链接:https://leetcode.cn/problems/binary-tree-coloring-game 题目描述 有两位极客玩家参与了一场「二叉树着色」的游戏 ...

  7. python的常见问题解决

    1.python库下载安装慢:用清华镜像 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tun ...

  8. 四,redis6版本的使用部署

    继第三章(https://www.cnblogs.com/123456likun/p/13841540.html) 官网发布最新的6版本,有新的数据类型出现,给了小编我极大的动力,决定写几张关于最新的 ...

  9. java学习日记20230226-java环境搭建及运行机制

    JDK安装 配置环境变量: 当执行的程序在当前目录不存在时,windows去系统path环境变量里面进行查找,如果没有找到报错不存在该命令. 我的电脑-属性-高级系统设置--环境变量 增加JAVA_H ...

  10. 狄利克雷过程(Dirichlet Process)

    先从狄利克雷过程的motivation开始说起,如果我们有一些数据,这些数据是从几个高斯分布中得出的,也就是混合高斯模型中得出的,比如下图这样 但是呢,我们并不知道混合高斯模型中到底有多少个高斯分布, ...