首页 > 编程语言 >Python中函数参数是如何传递的?

Python中函数参数是如何传递的?

时间:2023-02-22 09:55:47浏览次数:33  
标签:变量 指向 Python 传递 函数参数 对象 l1 test

Python函数相比对于多数程序员来说不陌生吧,那么Python函数中的参数是如何传递的呢?首先我将会以代码图文的形式给大家展现以下,看看是不是和您所认知的Python函数一样的结果?

def test_1(a):
    a = 5

a = 3
test_1(a)
print(a)

def test_2(l):
    l.append(4)

l = [1, 2, 3]
test_2(l)
print(l)

# 3 a的值没有发生变化
# [1, 2, 3, 4] l的值发生了变化

为什么会出现这样的结果了,带着这个疑问,我们往下学。

变量赋值

在我告诉你们Python函数中参数是如何传递之前,我们要先学习一下变量赋值的背后逻辑。我们先看一个简单的代码。

a = 1
b = a
a = a + 1

我们之前就说过,Python万物皆对象,所以1也是对象,a = 1,其实是创建了1这个对象,让变量a指向了1这个对象,b = a,就表示b也会指向1这个对象。

a = a + 1后,由于int类型数据是不可变数据类型,所以就创建了一个2的对象,变量a指向2这个对象。

 

那列表这种可变数据类型就不一样了。l1和l2都指向了同一个列表对象,当列表对象发生改变时,指向他的变量都会发生改变。

l1 = [1, 2, 3]
l2 = l1
l1.append(4)
print(l1, l2)

# [1, 2, 3, 4] [1, 2, 3, 4]

总结下来说,Python变量赋值就是让变量指向对应的对象,可变对象和不可变对象要区分开来,可变对象发生改变,会影响指向该对象的所有变量,而不可变量则不会。

Python函数的参数传递

我先说结论,Python函数的参数传递是对象的引用传递。我们举个例子。

def test_1(b):
    b = 5

a = 3
test_1(a)
print(a)

# 3

根据对象的引用传递,a和b都是指向3这个对象的,在函数中,我们又执行了b = 5,所以b就指向了5这个新对象,但是a还是指向3这个对象,所以a还是3。

所以,我们再来看开头的案例,我想你应该能看明白了。今天的分享就到这了,我们下期再见。 

标签:变量,指向,Python,传递,函数参数,对象,l1,test
From: https://www.cnblogs.com/q-q56731526/p/17143274.html

相关文章

  • 一文了解Python协程本质
    关于Python协程我觉得当你学到一定程度的时候一定要懂,比如你在对代码进行优化或者提升速度时,就不得不使用异步编程,加上现在有很多的优秀第三方库都可以实现异步编程,从而让......
  • 计算程序总行数的Python代码
    最近需要统计一下项目中代码的总行数,写了一个Python小程序,不得不说Python是多么的简洁,如果用Java写至少是现在代码的2倍。importospath="/Users/rony/workspace/ecomm......
  • python的GIL全局解释器锁
    globalinterpreterlock--全局解释器锁CPython 解释器所采用的一种机制,它确保同一时刻只有一个线程在执行Python bytecode。此机制通过设置对象模型(包括 dict 等......
  • python一记
    作者:荷兰人吉多.范罗苏姆python:蟒蛇特点:跨平台/解释型/交互式/弱类型/面向对象新建myPython.py并:print('hello,world')print可以输出的内容:数字,字符,布尔表达式,运......
  • Python报错: KeyError: 'HOME'——mac中的os.environ['HOME'],windows写法:os.environ['H
    windows写法——os.environ['HOMEPATH']对应的mac写法——os.environ['HOME']windows:os.environ['HOME']会报错—— KeyError:'HOME'  改成os.environ['HOMEPATH'......
  • Python中的命名规范
    变量命名准则您应当尽量使自己的变量命名含义清晰,不要使用混乱的字母、数字、表情等意义不明的字符来命名变量一般来说,您不应当使自己的风格频发变换——如果可能,请将整......
  • 使用Python和SAS Viya分析社交网络|附代码数据
    原文链接:http://tecdat.cn/?p=7303原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于社交网络的研究报告,包括一些图形和统计输出。   本示例使用Python和......
  • Python、MATLAB股票投资:ARIMA模型最优的选股、投资组合方案与预测
    全文链接:http://tecdat.cn/?p=31651原文出处:拓端数据部落公众号分析师:XingmingXu基于当前统计的股票数据选择最优的选股方案和投资组合方案,以及预测股票价格未来一段时......
  • Python求快速幂
    #mod:最后结果要取的模deffast_pow(base,n,mod):res=1ifbase==0: return0ifn<0:base,n=1/base,-nwhilen:......
  • 使用Python对数据备份文件进行整理
    最近公司上了一个转储服务器,用于存储所有应用系统的数据文件备份,由于每天的备份文件都放在一个固定的文件夹,不需要的文件也会传过来,日后不方便整理,于是便使用Python脚本,将......