自行设计简单的函数实现(具体功能不限),并完成以下实验:(1)默认参数的使用;(2)函数的返回值(包括无返回值、一个及多个返回值);(3)变量的作用域;(4)在函数内部使用全局变量;(4)在函数内部修改全局变量的值;(5)以可变数据类型(例如列表和字典)作为参数,在函数内部对其进行修改,并检验函数调用前后对应变量的值的变化情况;(6)参考“3.2 有关函数的更多信息.pdf”中的“重新赋值与修改(Reassignment vs Modifying)”部分内容,设计相关实验以检验在函数体内部修改值和重新分配变量名称之间的区别。
时间: 2023-12-27 19:05:06 浏览: 73
C++默认参数与函数重载及注意事项
5星 · 资源好评率100%
好的,我来设计一个函数,并完成以上实验。
我们来设计一个函数,可以接收一个列表作为参数,并返回该列表中所有偶数元素的和。如果不传入列表参数,则默认为一个空列表。
```python
def sum_of_evens(lst=[]):
"""
接收一个列表作为参数,并返回该列表中所有偶数元素的和
如果不传入列表参数,则默认为一个空列表
"""
# 在函数内部使用全局变量
global total
total = 0
for num in lst:
if num % 2 == 0:
total += num
return total
```
接下来我们进行实验:
1. 默认参数的使用
我们可以直接调用函数,不传入参数,此时将会使用默认参数。
```python
print(sum_of_evens()) # 输出 0
```
2. 函数的返回值
函数 `sum_of_evens` 返回的是总和,我们可以将它打印出来,或者将它赋值给一个变量。
```python
result = sum_of_evens([1, 2, 3, 4, 5, 6])
print(result) # 输出 12
```
3. 变量的作用域
在函数内部定义的变量只能在函数内部使用,不能在函数外部使用。
```python
def test_scope():
x = 10 # 局部变量
print(x)
test_scope() # 输出 10
print(x) # 报错,x 未定义
```
4. 在函数内部使用全局变量
我们可以在函数内部使用全局变量,但需要使用 `global` 关键字声明。
```python
total = 0 # 全局变量
def sum_of_evens(lst=[]):
global total # 声明全局变量
total = 0
for num in lst:
if num % 2 == 0:
total += num
return total
sum_of_evens([1, 2, 3, 4, 5, 6])
print(total) # 输出 12
```
5. 在函数内部修改全局变量的值
如果我们在函数内部修改了全局变量的值,那么这个变量的值也会在函数外部被改变。
```python
total = 0 # 全局变量
def sum_of_evens(lst=[]):
global total # 声明全局变量
total = 0
for num in lst:
if num % 2 == 0:
total += num
return total
sum_of_evens([1, 2, 3, 4, 5, 6])
print(total) # 输出 12
total = 100
print(total) # 输出 100
```
6. 以可变数据类型作为参数,在函数内部对其进行修改
我们可以将一个列表作为参数传入函数,然后在函数内部修改它。这样做会改变原始列表的值。
```python
def modify_list(lst):
lst.append(10)
lst[0] = 100
my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # 输出 [100, 2, 3, 10]
```
7. 重新赋值与修改的区别
重新赋值和修改的区别在于,重新赋值会创建一个新的变量,并将其指向新的对象,而修改则是直接改变原始对象的值。
```python
def reassign(x):
x = 10
def modify(x):
x.append(10)
y = 5
reassign(y)
print(y) # 输出 5
z = [1, 2, 3]
print(z) # 输出 [1, 2, 3]
modify(z)
print(z) # 输出 [1, 2, 3, 10]
```
阅读全文