Python在自定义函数中应用参数传递的一点点心得 青海省建成国内首个能源大数据创新平台 中关村物联网产业联盟助力智慧能源 智慧石油石化双创中心揭牌 中国电信物联网用户突破2亿 华安物联网主题股票净值下跌1.51% 请保持关注 Cat.1大器晚成,物联网时代将担大任 江苏苏宁银行获评“江苏省2020年大数据优秀典型应用项目” 广安:“基于多表合一的城市级共享型综合能源监控大数据云平台研究”项目通过验收 信用变“资金”税收大数据助力企业发展 一年翻 3 倍,装机量 6 亿台的物联网操作系统又放大招! HTML5input表单的基本知识 MySQL中的正则表达式 mysql-mysql学习详记二&&什么是CRUD?数据库的CRUD&&增加、删除、修改、查询 Mybatis的进阶使用 MSQL数据库的编码格式 原来大厂的MySQL面试会问这些问题! 堪比培训机构的MySQL系列博客 MySql语法及命令(用心整理) 大数据公司Palantir将于9月23日在纽交所直接上市 FinTech头条丨神州信息连续四年登榜“中国大数据50强”! 计算机专业大二选方向,Web开发、游戏开发和大数据该选择哪个 Fabric2.0部署学习进阶教程系列博文 热点,aboutCOIN利用火币网诱导交易致受损,难友亲诉被骗亏损套路真相! CSS笔记:CSS概述 科普一下IPFS/Filecoin的关系,为什么值得投资? vue-cli脚本架安装出错处理 微信域名防封的方法以及技术原理 日常JAVA基础面试题集5(含答案) fisco bcos 调用接口报错WeBASE-Node-Manager user not logged in Linux VI VIM编辑器 Linux入门(一):Linux常用命令 nginx 的基本使用详解 配置本地yum源仓库 Linux配置本地Yum仓库方法 Linux文件操作及属性 “云上贵安”电力服务队助力大数据产业发展 健康医疗大数据产业 创新发展路在何方 公司更名为“依新集团”,跨界物联网业务,拉夏贝尔欲断臂求生? 永达电子三大主题方案亮相深圳国际物联网与智慧未来展 江湖论酒成功入围中国移动 OneNET 之星物联网创客马拉松决赛 技术题太难,程序员面试被hr淘汰,隔天hr:就不该让你来面试 Java老师告诉你:程序员小白常犯的错误及规避之道 15python成功爬取链家网济南历下区名士豪庭小区房价 使用四种编程语言实现单链表的增删查改 Python中的条件分支结构 Python基础(实例属性、类属性、实例方法、类方法、静态方法、魔术方法) [记录四] Vue(全家桶)+node+koa2+mysql+nginx+redis,博客全栈项目之web前端页面完结和路由的编写 【Java】Math.round(),Math.ceil(),Math.floor()的区别 一起学习Spark——Action算子 贵阳发挥大数据优势提升政务服务效率
您的位置:首页 >程序人生 >

Python在自定义函数中应用参数传递的一点点心得

对于Python中的参数,可以有如下三种:位置和关键字参数、任意数量的位置参数、任意数量的关键字参数。
我们知道对于Python中的名字的解析被称为LGB规则,有以下三点
1.当在函数中使用一个无限制的名字时,Python依次查找三个作用域:局部(Local)、全局(Global)、内置(Built-in),在第一个发现名字的位置停止。
2.在函数中赋值一个名字时,Python总在局部作用域中生成或者改变它,除非在函数中对它进行了global的声明。
3.在函数外部时,局部作用域与全局作用域等效,都是同一个模块的名字空间。
这里主要讨论一下在自定义函数中应用参数传递的实现,代码如下:

x=1list=[1,2]def func(x,y):x=2y[0]="A"func(x,list)print("调用函数后传入的参数变化为:",x,list))调用函数后传入的参数变化为: 1 ["A", 2]Process finished with exit code 0

func()对x和被y引用的对象中的组件赋值,x是函数作用域中的局部名字,第1个赋值对调用者没有影响,参数y也是个局部的名字。但传递了y[0],这是一个可变的对象,最后就把list中的第一个位置换掉了!
那我们思考一下,我还想换掉x=1,既利用模块中的x=2,该如何操作。

如果是如下代码块,就会报错:

x=1list=[1,2]def func(x):global xx=2func()print("调用函数后传入的参数变化为:",x)global xSyntaxError: name "x" is parameter and globalProcess finished with exit code 1

我们看到了报错。语法错误:x既是参数又是全局变量。这样是不对的,x是不能既做变量又做参数的。
那么我们换一种方式,看看是否可以。代码如下:

x=1list=[1,2]def func():global xx=2y[0]="A"func(x,list)print("调用函数后传入的参数变化为:",x)func(x,list)TypeError: func() takes 0 positional arguments but 2 were givenProcess finished with exit code 1

好的,又出错了。对类型的无效操作:func()可以接收的位置参数是0个,但却接收到了2个参数(x,list)。这样也是不对的,因为我们在def func()时候,func()中并没有位置参数,而我们在调用func()时,却代入了x,list两个参数,就会报错。

综上所述:fun(x)里有参数x时,后面模块内就不可以跟global x(全局变量),但是func()里无参数x时,后面可以跟global x,把x定义成全局变量,但是呢又有个问题,就是后面调用函数func()时,不能写成func(x),否则又会报错TypeError,是由于前面是func(),故可接受参数为0

那么该如何操作,到达我们想一样换掉x=1,使得x=2呢?这里我运用了两个def func。代码如下:

x=1list=[1,2]def func1():global xx=2func1()def func2(y):y[0]="A"func2(list)print("调用函数参数的结果:",x,list)调用函数参数的结果: 2 ["A", 2]Process finished with exit code 0

这里,我们成功的把x=1换成了x=2。但是却用了两个函数,比较繁重,感觉还会有更好的程序,由于这也是我开始学习Python时摸索函数参数过程的一点点感悟吧,希望有Python大佬看到可以给与指导和帮助。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。