1.在函数内部修改全局变量的值
def demo1():
# 希望修改全局变量的值 - 使用 global 声明一下变量即可# global 关键字会告诉解释器后面的变量是一个全局变量# 再使用赋值语句时,就不会创建局部变量global numnum = 99print("demo1 ==> %d" % num)
def demo2():
print("demo2 ==> %d" % num)
demo1() demo2()
<a name="lLCKA"></a>##<a name="mRRlt"></a>## 2.不可变和可变的参数问题 1:在函数内部,针对参数使用**赋值语句**,会不会影响调用函数时传递的**实参变量**? —— 不会!- 无论传递的参数是**可变**还是**不可变**- 只要**针对参数**使用**赋值语句**,会在**函数内部**修改**局部变量的引用,不会影响到 外部变量的引用**- 问题 2:如果传递的参数是**可变类型**,在函数内部,使用**方法**修改了数据的内容,**同样会影响到外部的数据**```pythondef demo(num_list):print("函数内部的代码")# 使用方法修改列表的内容num_list.append(9)print(num_list)print("函数执行完成")gl_list = [1, 2, 3]demo(gl_list)print(gl_list)
3.定义支持多值参数的函数
有时可能需要一个函数能够处理的参数个数是不确定的,这个时候,就可以使用多值参数
- python中有两种多值参数:
- 参数名前增加一个*可以接收元组
- 参数名前增加两个*可以接收字典
- 一般在给多值参数命名时,习惯使用以下两个名字
- args—— 存放元组参数,前面有一个
- kwargs—— 存放字典*参数,前面有两个
- args是arguments的缩写,有变量的含义
kw是keyword的缩写,kwargs可以记忆键值对参数 ```python def demo(num, nums, *person):
print(num) print(nums) print(person)
demo(1)
demo(1, 2, 3, 4, 5, name=”小明”, age=18)
<a name="yl4R7"></a>
## 4.元组和字典的拆包(知道)
- 在调用带有多值参数的函数时,如果希望:
- 将一个**元组变量**,直接传递给args
- 将一个**字典变量**,直接传递给kwargs
- 就可以使用**拆包**,简化参数的传递,**拆包**的方式是:
- 在**元组变量前**,增加**一个***
- 在**字典变量前**,增加**两个***
```python
def demo(*args, **kwargs):
print(args)
print(kwargs)
# 元组变量/字典变量
gl_nums = (1, 2, 3)
gl_dict = {"name": "小明", "age": 18}
# demo(gl_nums, gl_dict)
# 拆包语法,简化元组变量/字典变量的传递
demo(*gl_nums, **gl_dict)
demo(1, 2, 3, name="小明", age=18)
