python开发基础——day11 函数作用域与名称空间

一、初识函数对象

函数非常重要,但是不要过于害怕,搞清楚本质

函数:更高级的容器,里面存的不是数据,而是代码
    一个容器能干嘛,函数也可以干嘛
    
函数对象--把函数当成一个普通数据容器来使用

1.函数可以被引用(把定义好的函数赋值给变量)

<1>把函数的返回值赋值给一个变量
def fun1():
    return 'hello'

a=fun1() #把函数fun1的返回值赋值给了变量a
print(a)

<2>把函数本身复制一份给一个变量,这个变量就相当于函数的分身
# <1>把函数的返回值赋值给一个变量
def fun1():
    return 'hello'

a=fun1() #把函数fun1的返回值赋值给了变量a
print(a)
print(b()) #会达到两个目的:首先调用函数,有print会学先输出好好学习天天向上,其次函数没有定义返回值默认是None

2.函数可以作为元素放在列表,元组,字典中使用

集合是无序类型,没有对应查找的方法,所以函数如果存进去,不好把函数拿出来并且完成调用,所以一般不会把一个函数存到一个集合里

def fun2():
    print('好好学习天天向上')

def fun3():
    print('学习加油')
    return 123

li=['伊诺',12,5,6,fun3,123] #存进去的时候函数不要加括号,加括号就调用了,不需要此时调用
li[4]() #学习加油
print(li[4]()) #学习加油  123
# print(li[4]) #内存地址

info={
    'message':fun2,
    'age':18
}
info['message']()

3.函数可以作为参数,传递给另一个函数

def name():
    my_name='张三'
    return my_name

def name1(a):
    print(f'我是个靓仔{a}')

def name2(b):
    print(f'{b}是靓仔一个')

name1(name()) #把name返回值传给了name1,name的返回值是张三 所以再作为参数传给了a
name2(name())

4.函数可以作为返回值来使用,你返回的数据可以是一个函数

'''
卑微小张在线打工
甲方派发的任务
老板(任务1,任务2)
    小张(要求1,要求2)
    干活
    干活
    返回 做好的东西
返回 小张(要求)    
'''
def boss(a,b):
    def xiao_zhang(c,d): #我接收到老板的任务,加了两个创意c,d
        return c+d
    return xiao_zhang(a,b) #老板拿到做好的东西 邀功

print(boss(66,88)) #成果是老板的,给老板打工

名称空间

名称空间:用来存名字的地方
    
程序中有一些专门的内存区域来保存对应的数据
    名称空间-->存储变量名,函数名,模块名
    内存数据-->变量值,函数代码,模块代码
    
生命周期-->一个数据/程序,从创建到结束的过程

名称空间 一共分为3层

1.内建名称空间(存内置函数)
    生命周期:随着python程序启动而生成,在程序关闭时回收/清除所有数据
    加载顺序:最先被加载出来的
    存放对象:print input type sum..这些内置函数
        
2.全局名称空间(用户定义在python外层的名字)
    生命周期:随着python程序启动而生成,在程序关闭时回收/清除所有数据
    加载顺序:第二个加载出来的
    存放对象:用户自己定义的变量名/函数名
        
3.局部名称空间(在函数内定义的名字)
    生命周期:随着函数调用而生成,结束调用后关闭
    加载顺序:在函数调用时才会被加载
    存放对象:在函数里定义的变量名/函数名/形参名
        
a=666 #a定义在外层,属于全局名称空间
def fun():
    z=666 # z定义在函数里,属于局部名称空间
    #print(z) #在这里打印 小弟听太守的
    print(88)

fun() #变量b只有在函数调用时才能输出 
#print(z) #报错 相当于太守的小弟会听太守的话,但是不一定听曹老板的话

总结:
    一个程序里的数据都是会存储在对应的位置
    名称空间-->用来存储名字的地方!!

作用域

作用域:一个数据能够使用的范围
    
作用域分为:
    1.全局作用域(内建名称空间,全局名称空间)
        整个程序都可以使用
    
    2.局部作用域(局部名称空间)
        只有局部位置才能使用(函数内)
        
#全局变量  name是一个全局变量,整个程序里都可以使用
name='张三'
print(name) #不管在外层直接输出

def fun2():
    print(name) #还是在函数里输出都可以

fun2()

#局部变量
def fun3():
    num=1
    print(num) #num是一个局部变量,正常来说只有函数fun3才能使用

fun3()
# print(num) #在外面直接打印会报错        

global提权

用法一:可以将一个局部变量提权为全局变量

用法二:可以在局部内修改全局变量

ef 函数名():
    global 变量名
    变量名=变量值
    
#用法一:可以将一个局部变量提权为全局变量
def name():
    global a #这个语句必须写在要提权的变量的上面
    a='加油'

name() #记得调用函数,才能生成对应的名称空间
print(a)  #a就提权成为了全局变量 在外层也可以直接使用

# 用法二:可以在局部内修改全局变量的值
num=10
def num_sum():
    global num
    num+=100
    return num

print(num_sum())

nonlocal降权

必须在嵌套函数中,作用是在内部函数修改外部函数的变量值

将局部变量深度局部化

def fun():
    a=520
    def res():
        nonlocal a #私有化 局部变量再度局部化
        a=666
    res()
    print(a)
fun()  

匿名函数 lambda表达式

我们平时函数都是称为:有名函数

匿名函数顾名思义:无名函数

给懒人用的-->如果你要写一个函数,但是不想给他取名字,那么就可以用匿名函数来写

语法格式:
    lambda 变量:操作
    
#有名函数
def add1(a,b):
    return a+b
print(add1(70,80))

#匿名函数
res=lambda a,b:a+b
print(res(90,100))
    
fun=lambda c:print(c)
fun('哈哈哈')

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/42813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B端界面:英文换成了中文,怎么就成了卖家秀和买家秀呢?

首先看看AI给我的回答。 为什么英文B端界面换成了中文 就成了卖家秀和买家秀呢&#xff1f; 这可能是因为平台希望吸引更多的中国卖家和买家。使用中文界面可以方便中国用户的操作和沟通&#xff0c;同时也能更好地满足他们的需求。卖家秀和买家秀可能是平台为了促进交流和展示…

HTML5实现我的音乐网站源码

文章目录 作者&#xff1a;[xcLeigh](https://blog.csdn.net/weixin_43151418) 1.设计来源1.1 界面效果1.2 轮播图界面1.3 音乐播放界面1.4 视频播放界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作…

FFmpeg 实现从摄像头获取流并通过RTMP推流

使用FFmpeg库实现从USB摄像头获取流并通过RTMP推流&#xff0c;FFmpeg版本为4.4.2-0。RTMP服务器使用的是SRS&#xff0c;拉流端使用VLC。如果想降低延时&#xff0c;首先需要配置SRS为Realtime模式&#xff0c;拉流的话就不要用VLC了&#xff0c;使用 ffplay 来拉流播放&#…

Python28-9 XGBoost算法

XGBoost&#xff08;eXtreme Gradient Boosting&#xff0c;其正确拼写应该是 "Extreme Gradient Boosting"&#xff0c;而XGBoost 的作者在命名时故意使用了不规范的拼写&#xff0c;将“eXtreme”中的“X”大写&#xff0c;以突出其极限性能和效率&#xff09;是一…

概论(二)随机变量

1.名词解释 1.1 样本空间 一次具体实验中所有可能出现的结果&#xff0c;构成一个样本空间。 1.2 随机变量 把结果抽象成数值&#xff0c;结果和数值的对应关系就形成了随机变量X。例如把抛一次硬币的结果&#xff0c;正面记为1&#xff0c;反面记为0。有变量相对应的就有自…

机器学习-利用 scikit-learn 使用梯度下降实现线性回归

线性回归是一种基本的统计学习方法&#xff0c;用于建立特征与连续目标变量之间的线性关系模型。其核心思想是通过最小化预测值与实际观测值之间的误差来拟合数据。这种模型假设自变量&#xff08;特征&#xff09;与因变量&#xff08;目标&#xff09;之间的关系是线性的&…

基于字典学习的地震数据降噪(MATLAB R2021B)

稀疏表示基于研究者们提出了许多变换基函数的方法逐渐成型&#xff0c;比如小波域&#xff0c;曲波域&#xff0c;dreamlet 域等&#xff0c;其原理是利用地震信号在变换域内的稀疏性和可分离性以去除噪声。继 Donoho发表非线性去噪方法-小波阈值萎缩方法&#xff0c;在后续的研…

半导体芯闻--20240707

1、韩国基础科学研究所团队开发出的亚纳米级半导体逻辑电路技术&#xff0c;实现了宽度小于1纳米的一维金属材料在二维电路中的应用。这一突破标志着下一代半导体及基础材料科学的重大进展&#xff0c;对解决传统半导体制造过程中的技术问题具有重要意义。 2、英特尔选择台积电…

HackTheBox--Headless

Headless测试过程 1 信息收集 NMAP端口扫描 nmap -sSCV 10.10.11.85000端口测试 检查页面功能&#xff0c;请求 For questions 功能&#xff0c;跳转到 /support 目录 目录扫描 发现 /dashboard 目录 访问 /dashboard 目录&#xff0c;显示未认证&#xff0c;如果通过认证…

MySQL之备份与恢复和MySQL用户工具(一)

备份与恢复 备份脚本化 为备份写一些脚本是标准做法。展示一个示例程序&#xff0c;其中必定有很多辅助内容&#xff0c;这只会增加篇幅&#xff0c;在这里我们更愿意列举一些典型的备份脚本功能&#xff0c;展示一些Perl脚本的代码片段。你可以把这些当作可重用的代码块&…

图解 RocketMQ 架构

写在前面 Kafka、RocketMQ都是很出名的中间件&#xff0c;上次我们讲解了Kafka&#xff0c;这次我们来讲讲RocketMQ的原理。 基本架构图 解析 RocketMQ 总共可以分成四个模块 NameServer&#xff1a;提供服务发现和路由功能&#xff0c;管理各种元数据信息。Broker&#xf…

基于最大相邻夹角的边缘点提取(matlab)

1、背景介绍 边缘点是指点云数据中代表物体或场景几何形状突变的那些点。在三维点云中&#xff0c;边缘点通常标志着不同表面或物体的分界&#xff0c;或者是物体表面上的不规则性&#xff0c;如裂缝、棱角、突起等。点云边缘检测的作用非常重要&#xff0c;最常见是进行特征点…

php校园二手交易网站-计算机毕业设计源码041148

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2 校园二手交易网站系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结…

AI学习指南机器学习篇-K均值聚类聚类数目选择

AI学习指南机器学习篇-K均值聚类聚类数目选择 在机器学习领域&#xff0c;K均值聚类是一种常用的无监督学习方法&#xff0c;用于将数据集分成K个类别。然而&#xff0c;选择适当的聚类数目K是一个常见的问题&#xff0c;因为不恰当的聚类数目选择可能导致聚类结果不理想。本文…

nginx配置代理

nginx配置代理 1. 安装并启动Nginx&#xff1a;2. 加载Nginx配置文件&#xff1a;3. 创建虚拟主机配置文件&#xff1a;4. 创建符号链接以启用虚拟主机&#xff1a;5. 检查配置文件语法是否正确&#xff1a;6. 重新加载Nginx配置&#xff1a;7. 配置反向代理&#xff1a;8. 高级…

MySQL安全加固

安全加固 禁止MySQL以管理员的身份账号权限运行 #用普通账户运行mysqld#加固方法&#xff1a; my.cnf配置文件中配置usermysql是否存在密码为空的用户 #1、sql_mode启用 NO_CREATE_AUTO_USER&#xff0c;这个参数&#xff08;NO_CREATE_AUTO_USER&#xff09;禁止自动创建密…

基于AOP的数据字典实现:实现前端下拉框的可配置更新

作者&#xff1a;后端小肥肠 创作不易&#xff0c;未经允许严禁转载。 目录 1. 前言 2. 数据字典 2.1. 数据字典简介 2.2. 数据字典如何管理各模块的下拉框 3. 数据字典核心内容解读 3.1. 表结构 3.2. 核心代码 3.2.1. 根据实体类名称获取下属数据字典 3.2.2. 数据字…

回顾 DTC 2024 大会——聚焦数据技术创新:揭秘下一代纯实时搜索引擎 INFINI Pizza

2024 年 4 月 12 日至 13 日&#xff0c;备受瞩目的第十三届“数据技术嘉年华”&#xff08;DTC2024&#xff09;在北京新云南皇冠假日酒店盛大开幕。本次大会由中国 DBA 联盟&#xff08;ACDU&#xff09;与墨天轮社区联合主办&#xff0c;以“智能云原生一体化——DB 与 AI 协…

在先企业字号被申请注册成商标!

今天一网友联系普推商标知产老杨&#xff0c;说自己注册的商标被某公司无效宣告了&#xff0c;去年联系老杨时&#xff0c;当时就给说这个商标名称存在风险&#xff0c;与别人的字号权存在高度近似&#xff0c;而且是同行业同地区在后面注册的。 十几年前某公司先成功注册成字号…

Ubuntu 安装CGAL

一、什么是CGAL CGAL&#xff08;Computational Geometry Algorithms Library&#xff09;是一个广泛使用的开源库&#xff0c;主要用于计算几何算法的实现。该库提供了一系列高效、可靠和易于使用的几何算法和数据结构&#xff0c;适用于各种应用领域。以下是 CGAL 的主要功能…