自行设计简单的函数实现(具体功能不限),并完成以下实验:(1)默认参数的使用;(2)函数的返回值(包括无返回值、一个及多个返回值);(3)变量的作用域;(4)在函数内部使用全局变量;(4)在函数内部修改全局变量的值;(5)以可变数据类型(例如列表和字典)作为参数,在函数内部对其进行修改,并检验函数调用前后对应变量的值的变化情况;(6)参考“3.2 有关函数的更多信息.pdf”中的“重新赋值与修改(Reassignment vs Modifying)”部分内容,设计相关实验以检验在函数体内部修改值和重新分配变量名称之间的区别。
时间: 2023-12-30 20:02:11 浏览: 68
以下是一个简单的函数,用于求一个列表中所有元素的平方和:
```python
def square_sum(lst, start=0):
total = start
for x in lst:
total += x**2
return total
```
该函数有两个参数,lst 表示要求平方和的列表,start 表示平方和的初始值,默认为 0。函数内部定义了一个变量 total,表示平方和的当前值,初始值为 start。函数遍历列表中的所有元素,将其平方后加到 total 中,最后返回 total。
下面进行各项实验:
1. 默认参数的使用
调用函数时可以不传递 start 参数,此时函数会使用默认值:
```python
lst = [1, 2, 3, 4]
print(square_sum(lst)) # 输出 30
```
2. 函数的返回值
该函数返回一个值,即列表中所有元素的平方和。可以将该值存储在变量中,或者直接使用它:
```python
lst = [1, 2, 3, 4]
result = square_sum(lst)
print(result) # 输出 30
print(square_sum([2, 4, 6])) # 输出 56
```
3. 变量的作用域
函数内部定义的变量 total 的作用域仅限于函数内部,函数外部无法访问该变量:
```python
lst = [1, 2, 3, 4]
square_sum(lst)
print(total) # 报错:NameError: name 'total' is not defined
```
4. 在函数内部使用全局变量
可以在函数内部使用全局变量,但需要在函数内部声明该变量为 global:
```python
total = 10
def square_sum(lst, start=0):
global total
total += start
for x in lst:
total += x**2
lst = [1, 2, 3, 4]
square_sum(lst)
print(total) # 输出 30
```
5. 在函数内部修改全局变量的值
可以在函数内部修改全局变量的值,不需要声明为 global。但需要注意,如果重新分配了变量名称,那么该变量就成了局部变量,不再是全局变量:
```python
total = 10
def square_sum(lst, start=0):
total = start # 重新分配变量名称
for x in lst:
total += x**2
lst = [1, 2, 3, 4]
square_sum(lst)
print(total) # 输出 10,未被修改
```
6. 以可变数据类型作为参数,在函数内部对其进行修改,并检验函数调用前后对应变量的值的变化情况
可以将列表作为参数传递给函数,并在函数内部修改该列表。需要注意,在函数内部修改后,原来的列表也会被修改,因为列表是可变数据类型:
```python
def square_sum(lst, start=0):
total = start
for i in range(len(lst)):
lst[i] = lst[i]**2
total += lst[i]
return total
lst = [1, 2, 3, 4]
result = square_sum(lst)
print(lst) # 输出 [1, 4, 9, 16]
print(result) # 输出 30
```
7. 重新赋值与修改
重新赋值和修改的区别在于,重新赋值会创建一个新的变量,而原来的变量不会被修改;而修改则是在原来的变量上进行操作。
例如,下面的代码中,函数内部重新赋值了参数 x,但原来的变量 x 并未被修改:
```python
def func(x):
x = x + 1
print("Inside func, x =", x)
x = 10
func(x)
print("Outside func, x =", x)
```
输出结果为:
```
Inside func, x = 11
Outside func, x = 10
```
而下面的代码中,函数内部对参数 lst 进行了修改,原来的列表也被修改了:
```python
def func(lst):
lst.append(4)
print("Inside func, lst =", lst)
lst = [1, 2, 3]
func(lst)
print("Outside func, lst =", lst)
```
输出结果为:
```
Inside func, lst = [1, 2, 3, 4]
Outside func, lst = [1, 2, 3, 4]
```
阅读全文