python函数 global_**Python的函数参数传递 和 global

函数的参数到底是传递的一份复制的值,还是对内存的引用?

我们看下面一段代码:

a = []

def fun(x):

x.append(1)

fun(a)

print(a)

想想一下:如果传递的是一份复制的值,那么列表a应该是不会变化的,还是空列表;如果传递的是引用,那么a应该是[1]。

执行一下看到输出结果是[1],即证明函数参数传递的是引用。

但是,再看下面的代码:

a = 1

def fun(x):

x = 2

return x

ret = fun(a)

print(a)

print(ret)

如果按照上面的理解,函数参数传递的是引用,那么a的值应该变为2,但是输出却是1,这是为什么?

解释:

python中所有的变量都可以理解是内存中一个对象的“引用”。这里需要记住的是类型是属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。(这就是这个问题的重点)

当一个引用传递给函数的时候,函数自动复制一份引用,这个函数里的引用和外边的引用没有半毛关系了。所以第二个例子里函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用是不会改变的。而第一个例子就不一样了,函数内的引用指向的是可变对象,对它的操作就和定位了指针地址一样,在内存里进行修改。

不过,有的时候我们确实需要在函数内部修改全局的不可修改的对象,这个时候怎么办呢?

a = 1

def fun(x):

global a

x = 2

a = 'hello'

return x

ret = fun(a)

print(a)

print(ret)

输出:

hello

2

我们看到通过关键字global,我们将a的值做了修改。但是我们建议尽量减少这种方式的使用,因为我们在函数内部修改了全局变量的值,如果后面还有其他函数使用这个变量的时候可能还认为a的值是1,因此导致出错,而且不易排查。

另:全局变量约定使用大写字母。

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

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

相关文章

冷启动问题:如何构建你的机器学习组合?

作为即将告别大学的机器学习毕业狗的你,会不会有种迷茫的感觉?你知道 HR 最看重的是什么吗?在求职季到来之前,毕业狗要怎么做,才能受到 HR 的青睐、拿到心仪的 Offer 呢?负责帮助应届生找到机器学习工作的 …

JavaScript 对象所有API解析【2020版】

写于 2017年08月20日,虽然是2017年写的文章,但现在即将2020年依旧不过时,现在补充了2019年新增的ES10 Object.fromEntries()。发到公众号申明原创。若川顺便在此提前祝大家:2020年更上一层楼。近日发现有挺多人对对象基础API不熟悉…

javascript操作符之new 也疯狂 (2)

JavaScript本是一种基于原形的(prototypal)语言,但它的“new”操作符看起来有点像经典语言。这迷惑了广大程序员们,并导致了很多使用上的问题。 在JavaScript中,不要用到new Object()这种操作,该用{ }来代替…

python中if语句缺省else_9_【Python学习分享文章】_if(条件语句)

【Python学习分享文章】_if(条件语句)_logicalJudgement介绍及基本操作综述计算机的“条件语句”和生活中的“条件成立”是不一样的。一个生活中的例子如果被计算机执行则是如下段子:老婆让程序员老公去买苹果,说:“去水果店买5个苹果&#x…

PHP生成各种验证码和Ajax验证

转载链接:http://www.helloweba.com/view-blog-191.html 验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录、论坛恶意灌水等。本文将通过实例讲解使用PHP生成各种常见的验证码包括数字验证码、数字字母验证码、中文…

若川的2019年度总结,波澜不惊

从2014年开始写年度总结至今已经六个年头了。正如孔子所说:逝者如斯夫,不舍昼夜。2019年的年度总结写得比较晚,都快农历新年了,此刻在家里继续写完这篇文章。往年基本是元旦之后几天就写完了。我的年度总结尽量写得非技术人员也能…

如何正确选择仓储物流供应商?

如何正确选择仓储物流供应商? 以前有做电商的朋友向我咨询过怎么去选择优质的仓储物流供应商?有哪些能做作为关键问题进行参考。作为一个优秀的合作伙伴是可以为客户提供超乎预期的服务的,上海维佳供应链服务专业提供物流外包解决仓储物流供应…

在虚机上安装WIN2003

Moss2-turn on-WM;SJY;SJYM;666666备注:计算机名在网络上必须是唯一的。姓名:WP; 单位:SJY; 计算机名称:SJYP; 密码:666666server 2003 R2版 MDGJK-PF6YQ-PD8DJ-RFQVM-7WKWG在“网络设置”页面上,单击“典型…

python字典获取关联值_【Python实战12】使用字典关联数据

现在我的手里有了新的一组数据,数据内容如下:james.txt:James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16julie.txt:Julie Jones,2002-8-17,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21,3.01…

Sending HTML content in an email using PHP

转载链接&#xff1a;http://code.web-max.ca/misc_htmlemail.php 发送一个HTML格式的电子邮件&#xff0c;主要在邮件的头信息中定义邮件正文的类型&#xff1a; Content-Type:text/html;charset"utf-8"。 示例&#xff1a; <?php// Example $HTML …

Realtime Ray Tracing RenderMan Point Cloud

这里演示的是演示的是光线与包围盒测试。在装备Winfast 8800GT 512M的台式机上可以进行每秒4.6亿次点到射线的距离计算计算&#xff0c;用于判断点是否真正的与射线相交。外部数据的填充与准备延迟依旧是GPGPU应用的一个巨大门槛。白色是命中的包围盒&#xff0c;绿色的就是射线…

SharePoint文档上传管理

前台代码: <% Control Language"C#" AutoEventWireup"true" CodeBehind"FileUpload.ascx.cs" Inherits"UploadFile.FileUpload" %><table><tr><td style"width:138px; height: 24px;">请选择列表:…

如何制定有价值的目标

写于2017年07月09日23:29现在修改发布到公众号声明原创公司会制定一系列目标&#xff0c;个人也可以制定一些目标&#xff0c;有利于自我学习成长。那么看我这篇文章可以告诉你如何制定有价值的目标。会制定有价值的目标&#xff0c;绝对超越很多人。SMART原则王健林之前说定个…

清除dns缓存命令行_怎么防止移动dns劫持,防止移动dns劫持要先了解什么是dns劫持...

本人以网络技术出身&#xff0c;近两年接触CDN网络&#xff0c;处理了一些CDN方面的网络问题&#xff0c;大多数以运营商丢包&#xff0c;延迟抖动为主&#xff0c;也处理一些硬件故障&#xff0c;比如机械硬盘的读写io测试&#xff0c;内存条兼容性测试&#xff0c;服务器IPMI…

php 修改上传文件大小 (max_execution_time post_max_size)

转载链接&#xff1a;http://hi.baidu.com/ttl289/item/683c8223a54c6d0f76272cd7 有些朋友要通过自己的网站后台&#xff0c;包括论坛&#xff0c;来上传一些文件&#xff0c;php一般为2m&#xff0c;或8m&#xff08;以下我们按默认为2m&#xff09;&#xff0c;接下来就是来…

移动硬盘格式化(pc和mac共用)-菜鸟级解决方案[转]

用pc的时候买了一个320G的移动硬盘&#xff0c;从来没考虑过什么格式化的问题&#xff0c;插上就用了。 后来接触mac才发现pc和mac在移动存储设备的格式化上还是有不少冲突的。如果你的移动硬盘mac上不能修改&#xff0c;或者pc上找不到&#xff0c;那就尽情得批判万恶的资本主…

【php】php的ssh2扩展的安装

ssh2(secure shell2)&#xff0c;对于远端主机提供高安全性的资料传输工作。安装&#xff1a;1、首先要装OpenSSL。 2、要安装 libssh2../configure && make all install3、再然后&#xff0c;安装PECL/ssh2可以使用 pear install ssh2安装&#xff08;有的说是 pear i…

回答知乎问题:你写过什么自认为惊艳的诗?

首次整理于 2019-07-27 22:04:00&#xff0c;现在整理发布在公众号申明原创。整理了一下大学期间2012年&#xff5e;2016年发布在QQ空间&#xff0c;自己感觉写得还行的七首“诗词”。回答知乎问题&#xff1a;你写过什么自认为惊艳的诗&#xff1f;中国古诗词博大精深。小时候…

lighttpd安装配置支持php

转载链接&#xff1a;https://wiki.freebsdchina.org/howto/n/php_fastcgi_lighttpd 安装lighttpd 记得在SPAWNFCGI前打勾 [X] SPAWNFCGI Depend on spawn-fcgi utility #cd /usr/ports/www/lighttpd #make config #make install clean 安装php 模块自己看自己需要 #cd /usr/p…

密码可逆不可逆选择_膝关节损伤不可逆!跑步要注意!

膝盖同时也是运动者最常受伤的关节。根据美国运动医学整型外科协会的报告&#xff0c;美国每年约有三百万人拉伤、挫伤、或扭伤他们的膝部&#xff0c;其中约有一半是因为运动引起的。而对于跑者而言&#xff0c;影响最大的就是我们的膝关节。换言之&#xff0c;长跑的潜在危害…