python学习笔记:函数与变量作用域

学习-Python函数之变量的作用域 可能有细心的同学会发现,在函数中定义的变量,在函数外并不能直接使用,这就涉及到了变量的作用域。通常情况下,我们定义的变量是可以在代码中的任意地方使用的,但是,学习了函数的知识之后,我们知道变量分为全局变量和局部变量了。本关任务:使用作用域中相关的关键字修改右侧 begin-end 中的代码,使函数 average 实现计算平均分的功能。局部变量:在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,代码运行时可能会报错。平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 阅读详情

1、函数的参数传递
    是引用传递,如果传入的是可变对象(列表,字典,集合等),则对其进行修改(注意,不是赋值,而是修改),则在主函数中该对象被修改;
    传入的形参,是一个局部变量,只是一开始引用了实参,如果绑定关系被改变,那么不会修改原对象的值
    参数传递有四种方法:
        直接传参
        示意序列传参
        关键字传参
        字典关键字传参
2、函数的示意序列传参
    可以用list的地址作为参数传入
    比如
    def mysum(l1,l2):
        return l1+l2
    List = {1,2}
    mysum(*List)
3、关键字传参
    关键字传参是指传参时,利用形参的名称给参数赋值
    比如
    def mysum(l1,l2):
        return l1+l2
    mysum(l2 = 1,l1 = 3)
    #这种传参方式对参数的顺序并没有要求,但是关键字名称和形参的名称必须是一致的
4、字典关键字传参
    def mysum(l1,l2):
        return l1+l2
    d1 = {"l1":33,"l2",44}
    mysum(**d1)
    说明:
    字典的关键字必须和形参一致
    必须前面加两个星
5、综合传参
    函数的传参方式在能确定形参能够唯一匹配到实参的情况下,可以任意组合
    def mysum(l1,l2):
        return l1+l2
    mysum(1,*{23})
    #没多大意义
    有一种错误传参:mysum(l1 = 1,2)
6、函数的缺省参数
    语法:def 函数名(形参名1 = 默认实参,参数名2 = 默认实参2,参数名3 = 默认实参3 ...)
    比如:
    def myfunc(a, b=1,c=3):
        print(a,b,c)
    myfunc(a)
    在这种情况下,必须传入参数a,但是可以不传入实参b,c
    如果不是关键字传参,那么传入参数顺序应该遵循原有顺序
    混合传参时(有关键字传参存在时),缺省值的参数的传入,必须放在非缺省值的前面    

7、练习题:模仿range()函数,传入一个、两个、三个参数值时分别返回列表对象
    代码:
    def myrange(end,start=None,step=1):
    if step == 0:
        return None
    l = list()
    if start is not None:
        start,end = end,start
    else:
        start = 0
    tmp = start
    if step > 0:
        while(tmp < end):
            l.append(tmp)
            tmp += step
        return l
    else:
        while(tmp > end):
            l.append(tmp)
            tmp += step
        return l
    for i in myrange(10):
        print(i,end=' ')
    print()
    for i in myrange(4,10):
        print(i,end=' ')    
    print()
    for i in myrange(10,4,-1):
        print(i,end=' ')
    print()
8、函数字符串
    每个函数都可以有一个字符串用于说明函数功能,这个字符串放在函数的开头,当输入help(函数名)查询时,会显示这个字符串,该字符串可以包含回车,直接用def myrange(end,start=None,step=1):
    if step == 0:
        return None
    l = list()
    if start is not None:
        start,end = end,start
    else:
        start = 0
    tmp = start
    if step > 0:
        while(tmp < end):
            l.append(tmp)
            tmp += step
        return l
    else:
        while(tmp > end):
            l.append(tmp)
            tmp += step
        return l
for i in myrange(10):
    print(i,end=' ')
print()
for i in myrange(4,10):
    print(i,end=' ')    
print()
for i in myrange(10,4,-1):
    print(i,end=' ')
print()
8、函数的文档字符串
    放在函数的开始,说明函数使用方法及功能,通常用""" """括起,可以包含回车符
9、函数的属性
    __name属def myrange(end,start=None,step=1):
    if step == 0:
        return None
    l = list()
    if start is not None:
        start,end = end,start
    else:
        start = 0
    tmp = start
    if step > 0:
        while(tmp < end):
            l.append(tmp)
            tmp += step
        return l
    else:
        while(tmp > end):
            l.append(tmp)
            tmp += step
        return l
for i in myrange(10):
    print(i,end=' ')
print()
for i in myrange(4,10):
    pr int(i,end=' ')    
print()
for i in myrange(10,4,-1):
    print(i,end=' ')
print()

8、函数的文档字符串
    用于说明函数使用方法及功能,一般放在函数开头,用""""""括起,可直接包含回车,当输入help函数查询时显示这些信息

9、函数的属性
    __name__属性:同于记录函数名
        说明:以双下划线__开头,以下划线结尾的标识符通常代表python的特殊变量(属性)
    示例:
    def abc():
        pass
    fn = abc
    print("fn绑定的函数名是",fn.__name__)
    print("abc绑定的函数名是",abc.__name__)
    
    __doc__属性即函数的文档字符串

10、函数变量
    函数在创建时会生成一个以函数名为名称的变量,绑定这个函数,可以通过该变量来调用函数
11、一个函数可以作为另外一个函数的参数进行传递、也可以作为另一个函数的返回值来返回
12、全局变量与局部变量
    局部变量:在函数内部创建的变量成为局部变量,只能在函数内部使用,在函数调用时自动创建,在函数结束时自动销毁
    全局变量:定义在函数外部,模块内部的变量称为全局变量,所有函数都可以访问,但是不能直接赋值,如果直接赋值,会创建新的局部变量
13、python作用域
    也叫命名空间,是访问变量时查找变量的范围空间
    python的四个作用域LEGB
    局部作用域(函数内,Local Function,L)
    外部函数嵌套作用域(Enclosing function,E)
    全局作用域(即函数所定义模块的作用域,Global,G)
    Python内置模块的作用域(Builtin,B)
14、在函数内赋值全局已经存在的变量时,会创建新的变量
15、global语句
    告诉解释器,将变量映射到全局作用域global
    语法:global var1,var2
        或者直接赋值
        global var1 = 100
    说明:全局变量如果在函数内部被赋值,则必须经过global关键字声明,否则创建新的局部变量
    全局变量在函数内部不经过声明就可以直接访问    
    不能先声明局部变量,再用global声明为全局,否则出错
    形参列表里的变量是一定存在的局部变量,所以也不能再次用global声明,否则出错

16、nonlocal语句
    告诉解释器,nonlocal生命的变量不是局部变量也不是全局变量,而是外部嵌套函数内的变量
    说明:
    只能在被嵌套的函数内部使用;当有两层或以上嵌套时,只访问最近的那一层;nonlocal声明的变量不能出现在此函数的参数列表里

最新Docker GPU支持全解析:为什么nvidia-smi能用但PyTorch找不到CUDA? 本文深入解析了Docker容器中nvidia-smi命令可用但PyTorch无法调用CUDA的根本原因。关键在于默认配置仅暴露了GPU的utility管理能力,而CUDA计算所需的compute能力未被激活。通过正确设置NVIDIA_DRIVER_CAPABILITIES环境变量为compute,utility,并配合--gpus参数,即可解决此问题,确保AI训练等任务顺利进行。 阅读详情

相关推荐

金证股份软件测试笔试题面试题

boss上这家公司的HR找到了我,我看了一下这家公司的业务,是我以前做过的基金与证券。还是很感兴趣的,决定去面试看看情况。 (因为只是想去涨面试经验,没有想拿offer,一些回答有点不太对,为后面木有offer埋下伏笔。其实有点亏,毕竟走路过去,而且还花了3个小时) 地点在金证股份科技大楼8楼。 2月25号 主要分为笔试题和面试。 1、笔试题 进来的时候直接给我一份笔试题做,做了一个半小时吧。 分为3道选择题和1道SQL查询题、1道案例设计题 选择题都是考察SQL函数,可能日常生活中没有见过

全村的希望的博客 4451

头歌答案Python,001

2,第1关:练习-Python函数之变量的作用域。金宝,答案在这里,自己抄。

a782782的博客 3万+

【NCBI】SRA toolkit安装及使用-Windows&Linux版本

由于市面上的文章介绍SRA toolkit基本上都是基于Linux,而在windows下运行SRA toolkit基本上可以达到相同的效果且更为方便,故本文将分别阐明在Windows和Linux环境下SRA toolkit的安装及使用。

weixin_48076899的博客 2万+

Python中的函数与变量讲解

不知道大家在学习Python的时候,有没有发现一个问题,函数里边的变量和脚本里边的变量好像是无关的。本文今天要讲的就是Python中的函数与变量,如果大家对于这个方面的内容有困惑,不妨来一起学习一下这个Python的基础内容。

2201_75362610的博客 261

Fastwhisper + Pyannote 实现 ASR + 说话者识别

最近在研究ASR相关的业务,也是调研了不少模型,踩了不少坑,ASR这块,目前中文普通话效果最好的应该是阿里的modelscope上的中文模型了,英文的话,还是非whisper莫属了,而且whisper很变态,粤语效果也还不错,因此,如果实际业务中需要涉及到不同的语言,还是更推荐whisper多一点faster-whisper是使用CTranslate2对OpenAI的Whisper模型的重新实现,CTranslate2是一个用于Transformer模型的快速推理引擎。

qq_44193969的博客 1万+

ROS2与Gazebo协同实现多机器人避障仿真

本文详细介绍了如何利用ROS2与Gazebo协同搭建多机器人避障仿真环境。通过创建SDF机器人模型、编写多机器人启动文件以及集成基础避障算法,构建了一个低成本、高效率的虚拟测试平台,为AGV编队、机器人集群等项目的算法验证与迭代提供了完整解决方案。

weixin_29065659的博客 293

python 基础之函数

以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。global 和 nonlocal关键字 ,,当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。• B (Built-in) 内置作用域(内置函数所在模块的范围)

老衲爱洗头的博客 235

Ubuntu运行vmware时报错Vmware Unable to install all modules!Use shipped Linux kernel AIO access library解决。

Ubuntu运行vmware时报错Vmware Unable to install all modules! vmware --version 提示下面内容: [AppLoader] Use shipped Linux kernel AIO access library. An up-to-date "libaio" or "libaio1" package from your system is preferred. VMware Workstation 16.1.2 build-17966106

wto882dim的博客 2848

【Python】小练习-考察变量作用域问题

一个关于Python变量作用域的小问题,各位小伙伴们可以参谋学习下,后续遇到类似问题能够明白具体情况,多多关注小政同学,我们一起学习共同进步!

m0_73909624的博客 465

【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入注意力机制ChannelAttention

本文介绍了在nnunet中加入ChannelAttention的方法,按照本文教的教程,可以快速完成ChannelAttention的加入和自定义模型的跑通。

AI爱好者的博客,分享计算机领域相关知识 5800

【100%通过率】2024华为OD机试真题E卷 C++ 实现【栈数据合并/空栈压数】

向一个空栈压入正整数,每当压入一个整数时,执行以下规则(设: 栈顶至栈底整数依次编号为n1、n2...nx, n1为最新压入的整数)

MISAYAONE的博客 1551

python学习笔记三:函数及变量作用域

一、定义 def functionName([arg1,arg2,...]): code 二、示例 #!/usr/bin/python #coding:utf8 #coding=utf8 #encoding:utf8 #encoding=utf8 ...

chipiqiao3947的博客 119

YOLOv8改进 | 融合篇,YOLOv8改进主干网络为MobileNetV3+CA注意机制+添加小目标检测层(全网独家首发,实现极限涨点)

小目标检测难点众多,导致很多算法对小目标的检测效果远不如大中型目标。影响算法性能的主要原因如下:第一,小目标分辨率低、信息量不足,导致神经网络提取到的有效特征较少。第二,小目标在图像中所占的区域较小,易受背景干扰,这对算法的定位性能要求较高。第三,小物体标注困难,训练数据有限,导致模型泛化能力差。例如多尺度学习、无锚机制和生成对抗学习等方法,都能提高小目标检测的准确性和鲁棒性。为了改善小目标漏检现象严重的问题,我在 YOLOv8 中增加了 P2 检测头,相当于有四个检测头,使网络能检测到更小的目标。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2857

【Python学习笔记:6】函数+变量作用域

Python学习笔记,涉及知识点:函数、变量作用域

一只努力学习的小碗~ 115

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Python学习笔记 六:函数和模块的使用,及变量作用域的探讨

1. 函数使用 今天学习骆昊的博文,并把他的相关知识点进行了总结,希望对你有所帮助。 GitHub原文连接 求解:CMN=M!N!(M−N)!,(M=7, N=3)C_M^N =\frac{M!}{N!(M-N)!}, \text{(M=7, N=3)} CMN​=N!(M−N)!M!​,(M=7, N=3) m = int(input('m = ')) n = int(i...

amyniez的博客,欢迎交流讨论 324

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python学习笔记(九)——函数作用域:全局变量与局部变量

函数作用域 我们在定义变量时经常会遇到变量作用域的问题,即全局变量,局部变量等 Python在查找变量时遵循LEGB原则:即当遇到某个变量时 * 优先从它所属的函数内查找(local) 如果找不到,并且它位于某个内嵌函数中时,到其父函数中进行查找(enclosing) 如果还是找不到,到其全局作用域中去寻找(global) 如果还是找不到,就到内置作用域中查找(build-in)。即系统关键字 ...

weixin_43912994的博客 354

python学习笔记11(函数二): 参数的传递、变量的作用域

python学习笔记11(函数二): 参数的传递、变量的作用域 一、函数形参和实参的区别   形参全称是形式参数,在用def关键字定义函数时函数名后面括号里的变量称作为形式参数。 实参全称为实际参数,在调用函数时提供的值或者变量称作为实际参数。 >>> def add(a,b): #这里的a和b是...

weixin_30292745的博客 215

python 函数—变量作用域

变量作用域指南

weixin_65289420的博客 1862

Python 变量作用域与函数

Python 变量作用域一个程序的所有的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的,变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称,两种最基本的变量作用域,第一种是局部变量,第二种是全局变量.定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域,而局部变量只能在其被声明的函数内部访问,全局变量则可以在整个程序范围内访问.变量的作用域...

微软技术分享 8684

Python基础:变量作用域与嵌套函数

本文详细介绍了Python中的变量作用域与嵌套函数的相关概念。

an_yu_xin的博客 1455

Python 中函数内部变量的作用域

在 Python 中,函数内部变量的作用域是一个常见的问题。当在函数内部定义变量时,该变量仅在函数内部有效,函数外部无法访问该变量。这可能会导致一些意外错误,尤其是当您不熟悉 Python 的变量作用域规则时。为了更好地理解这个问题,我们来看一个示例。在以下代码中,我们定义了一个名为的函数,该函数内部定义了一个名为i的变量。然后,我们尝试调用函数,并使用eval()函数来打印i的值。但是,当我们运行代码时,我们会得到一个错误消息:“NameError: name ‘i’ is not defined”。

aobulaien001的博客 1132

Python 函数:Python 中变量的作用域

Python 中变量的范围被定义为“某事所处理或与之相关的领域或主题的范围”。在编码世界中,这个定义对于变量也是一样的。通常,变量仅在创建该变量的块中有效,并称为其作用域。变量“scope”是编程中一个非常基本的概念。每个开发人员都知道变量的局部和全局范围,无论其工作语言如何。全局:所有代码都可以访问此范围内定义的名称本地:此范围内定义的名称仅可供声明它的块访问。即在其本地块中。但是,当涉及到 Python 时,情况就有点不同了。

新华编程特战队 1185

lesson17:Python函数之递归、匿名函数与变量作用域

本文深入解析Python函数的三大核心特性:递归、匿名函数与变量作用域。递归函数通过自我调用来分解复杂问题,需设置基线条件和递归条件,但存在重复计算问题,可通过记忆化优化。匿名函数(lambda)以简洁的单行表达式实现轻量级逻辑,特别适用于高阶函数参数和简单回调。变量作用域遵循严格的LEGB规则(Local→Enclosing→Global→Built-in),通过global和nonlocal关键字可突破默认作用域限制。理解这些特性能够帮助开发者编写更优雅、高效的Python代码,避免常见作用域陷阱。

2402_82363599的博客 1241

Python变量作用域

在程序中定义一个变量时,这个变量是有作用域的,变量的作用范围被称为它的作用域。x = 10 # 局部变量print(x) # 可以访问my_function() # 输出: 10# print(x) # 这里会报错,x在函数外部不可访问在嵌套函数中,内部函数可以访问外部函数的变量。x = "outer" # 嵌套作用域变量print(x) # 可以访问外部函数的变量inner()outer() # 输出: outer在模块级别定义的变量具有全局作用域。

qq_32021001的博客 1526

Python中变量的作用域详解

Python中变量的作用域详解~

m0_52711790的博客 4450
上一篇: python学习笔记:集合set,函数基础
下一篇: python学习笔记:函数进阶与模块
WilliamCode
博客等级 码龄11年 118粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值