MST

星途 面试题库

面试题:Python函数参数传递中的作用域与不可变对象

考虑以下代码片段: ```python x = 10 def func(y): y = y + 5 return y result = func(x) print(x) print(result) ``` 解释`x`的值为什么没有被修改,这里体现了Python函数对不可变对象参数传递的哪些特点,并且说明函数内部作用域和外部作用域在这个过程中的交互情况。
37.7万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. x的值为什么没有被修改
    • 在Python中,整数是不可变对象。当x作为参数传递给func函数时,传递的是x的值(即10)的副本,而不是x本身。函数内部对参数y进行操作,y = y + 5实际上是在函数内部创建了一个新的对象(值为15),这个操作并不会影响到函数外部的x
  2. Python函数对不可变对象参数传递的特点
    • 对于不可变对象(如整数、字符串、元组等),函数参数传递是值传递。即函数接收的是对象值的副本,而不是对象本身的引用。在函数内部对参数的修改不会影响到函数外部的原始对象。
  3. 函数内部作用域和外部作用域在这个过程中的交互情况
    • 外部作用域中定义了变量x并赋值为10。
    • 当调用func(x)时,将x的值传递给函数内部的y,此时y在函数内部作用域。函数内部作用域对y进行操作,改变的是y指向的对象(创建新对象15),但这并不影响外部作用域的x。函数内部作用域独立于外部作用域,对函数内部变量的修改不会自动传播到外部作用域,除非使用global关键字(但在此例中未涉及)。函数返回的result是在函数内部作用域计算得到的值,它和外部作用域的x没有直接的引用关联,只是通过函数调用传递值的方式建立了联系。