Python函数传参机制:列表与字典的引用传递及变量作用域解析
本文深入探讨Python中函数传参机制,重点分析列表作为参数传入时的引用传递特性,证明修改形参会影响原对象。同时解析字典作为参数的遍历方法,并详细阐述全局变量与局部变量的作用域规则及global关键字的使用场景,帮助开发者避免常见的变量修改陷阱。
Python函数传参机制:列表的引用传递特性
当把一个列表对象传入函数内部时,该列表本身会发生何种变化?
这正是本文旨在深入探讨的核心问题。
list = [1,2,3,4,5,6,7]
word = list.pop(0)
print(word)
print(list)
# 输出结果理所当然地为:
# 1
# [2, 3, 4, 5, 6, 7]
#
def a(temp):
b = temp.pop(0)
print(b)
print(temp)
a(list)
# 输出结果为:
# 2
# [3, 4, 5, 6, 7]
# 此处,传给temp时,list是[2,3,...7],但pop后,原list
# 有什么变化呢?试试下面的代码
print(list)
# 输出结果为:
# [3, 4, 5, 6, 7]
# 可见,执行temp.pop函数后,list原本的值也受到了改变。
# 所以,一个数组(或者叫列表)传给temp时,传入的是指针
# 地址,而不是副本。下面的例子更加说明了这个问题
print(list[0])
def b(temp2):
temp2[0] = temp2[0] + 10
# 将temp2这个列表的第一个元素,作+10的运算
b(list)
print(list[0])
# 最终输出:
# 3
# 13
# list在b函数内的经过temp2运作后,改变的是list本身的值
# 所以,将某个列表(比如这里的list)作为参数传入某个函数
# 其传递的是list所在的真实地址。所有修改也是对list直接
# 的修改。
字典参数处理与变量作用域基础
补充相关知识点:如何将Python字典作为参数传递给函数,以及在函数内部对字典进行遍历操作,同时涉及变量作用域的概念。
以下是将字典作为参数传入后的具体用法示例:
dic={'abc':123,'aaa':333,'wer':334}
def text_dic(**dd):
for a,b in dd.items():# a 代表键 ,b代表值
print(a,b)
text_dic(**dic)
#输出字典中的键:
def text_dic(**dd):
for key in text_dic:#key为键
print(key)
text_dic(**dic)
#输出字典中键的值:
def text_dic(**dd):
for value in text_dic.keys():#value为值
print(value)
text_dic(**dic)
关于变量作用域的说明:
全局变量与局部变量的作用域规则
全局变量的定义:
全局变量的作用域覆盖整个程序,随时可以被调用。当全局变量与局部变量名称冲突时,局部变量具有优先权。
局部变量的定义:
在Python中,默认情况下局部变量无法直接修改全局变量的值。
如果确实需要在局部函数中修改全局变量,必须先使用global关键字声明该变量为全局变量,随后才能对其进行修改操作。
以上关于Python将列表作为参数传入函数时的测试与理解即为全部内容,希望能对读者有所帮助,也欢迎大家继续支持本站获取更多技术分享。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









