为什么python代码def f1(x,lst): a=x+2 lst=lst+[a] a=2;lst=[3,4] f1(a,lst) print(a,lst)的返回值为2 [3,4]
时间: 2024-04-01 11:32:31 浏览: 110
这是因为在函数f1中,变量a和lst都是函数的局部变量。当函数被调用时,传入的a和lst会被赋值给函数中的局部变量a和lst。在函数中,变量a的值被修改为x+2,但是由于lst被重新赋值为lst+[a],所以lst指向了一个新的列表对象,原始的lst=[3,4]并没有被修改。因此,在函数调用结束后,变量a的值不会影响到函数外部,而lst的值只会影响到函数内部,函数外部的lst=[3,4]并没有被修改。所以最终的返回值是2和[3,4]。
相关问题
为什么python代码def f1(x,lst): a=x+2 lst.append(a) a=2;lst=[3,4] f1(a,lst) print(a,lst)返回值是2 [3,4,4]
因为Python中的列表是可变对象,当你传递一个列表给函数时,函数中对该列表的任何更改都会反映在原始列表上。在这个例子中,当你调用了f1函数时,它向传递的列表lst中添加了一个元素a+2,即4。然后,a被赋值为2,这不会影响lst中的值。最后,当你打印a和lst时,a的值是2,而lst中包含3,4和4。
import random def bubble(lst): rd=len(lst) for i in range(rd): for j in range(rd-1): if lst[j]>lst[j+1]: lst[j],lst[j+1]=lst[j+1],lst[j] return lst def binary(target,lst): left=0 right=len(lst)-1 while left<=right: mid=(left+right)//2 if target==lst[mid]: return mid elif target>lst[mid]: left=mid+1 else: right=mid-1 else: return 'NOT FOUND' def main(target,lst): sorted_lst=bubble(lst) result=binary(target,sorted_lst) print('targeresult引是',result) if __name__=='__main__': lst=random.sample(range(1000),k=200) main(60,lst)
以下是将你的程序转换为类的示例:
```python
import random
class BinarySearch:
def __init__(self):
self.lst = []
def bubble_sort(self):
rd = len(self.lst)
for i in range(rd):
for j in range(rd-1):
if self.lst[j] > self.lst[j+1]:
self.lst[j], self.lst[j+1] = self.lst[j+1], self.lst[j]
def binary_search(self, target):
left = 0
right = len(self.lst) - 1
while left <= right:
mid = (left + right) // 2
if target == self.lst[mid]:
return mid
elif target > self.lst[mid]:
left = mid + 1
else:
right = mid - 1
else:
return 'NOT FOUND'
def main(self, target):
self.lst = random.sample(range(1000), k=200)
self.bubble_sort()
result = self.binary_search(target)
print('目标结果是', result)
# 创建一个类的实例
binary_search = BinarySearch()
# 调用类的方法
binary_search.main(60)
```
在这个示例中,我们将原来的函数 `bubble`、`binary` 和 `main` 封装在一个名为 `BinarySearch` 的类中。我们将原来的列表 `lst` 移到类的属性中,并在方法中使用 `self` 来引用该属性。通过创建类的实例,我们可以调用类内部定义的方法。在上述示例中,我们创建了一个名为 `binary_search` 的实例,并调用了名为 `main` 的方法,传入目标值 `60`。你可以根据需要定制类的属性和方法。
阅读全文