对于python传参理解

对于python传参理解

1、python传参

1。python 万物皆可以对象,这不同于传统传值或者传引用,而是这两种的升级版,传递对象。如果函数收到的是可变对象(list,dict,,,),在函数内操作对象,比如,添加,删除操作,会改变函数外的参数;如果是对参数进行赋值等操作,不会改变原参数,这相当于把参数名这个标签贴到另一个值上面。
如果函数收到是不可变对象(int,str,tuple),这时不会改变原参数值,只是将参数名便签指向另一个值,原来参数值被释放回收。

2.栗子

# 不可变参数
def num():
    print(a)  # 2
    b = 3
    print(b)  # 3


a = 2
b = 2
num()  # 2 3
print("-----")
print(a)  # 2
print(b)  # 2 
# 为什么这里打印的是2呢,因为作用域不同,这里指向的就是全局变量
# 把函数作为域分界线,函数内是局部变量,函数外是全局变量
# 好比一班的小明,和二班的小明,只是名字相同,
# 可以理解为函数内重新定义了一个变量b = 3
# 为什么函数内的打印a 是2呢,因为函数内没有定义变量a,那么就往上层找,

# 1可变参数
def demo():
    l.append("*")
    print(l)  # [1, 2, 3, '*']


l = [1, 2, 3]

demo()
print(l)  # [1, 2, 3, '*']
#  demo函数内打印出[1, 2, 3, '*'],这里就跟上面的函数内打印的a = 2 一样
#  因为函数内没有定义变量a,那么就往上层找,拿到l对象

# 2可变参数
def demo():
    l = [4, 5, 6]
    print(l)  # [4, 5, 6]
    l.append("*")
    print(l)  # [4, 5, 6,'*']


l = [1, 2, 3]
demo()
print(l)  # [1, 2, 3]
# 为什么这里打印出的l不一样呢,因为函数内重新定义了变量l,是局部变量


# 解决方案:global
# 不可变参数
def num():
    print(a)  # 2
    global b
    b = 3
    print(b)  # 3


a = 2
b = 2
num()  # 2 3
print("-----")
print(a)  # 2
print(b)  # 3  # 这里打印出3是因为函数内声明把3赋值给b(因为全局变量定义了b变量,跟上面的含义就不一样了)


一万小时定律
人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。
一万小时的锤炼是任何人从平凡变成超凡的必要条件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值