1.在函数内部修改全局变量的值

  • 如果在函数中需要修改全局变量,需要使用global进行声明 ```python

    全局变量

    num = 10

def demo1():

  1. # 希望修改全局变量的值 - 使用 global 声明一下变量即可
  2. # global 关键字会告诉解释器后面的变量是一个全局变量
  3. # 再使用赋值语句时,就不会创建局部变量
  4. global num
  5. num = 99
  6. print("demo1 ==> %d" % num)

def demo2():

  1. print("demo2 ==> %d" % num)

demo1() demo2()

  1. <a name="lLCKA"></a>
  2. ##
  3. <a name="mRRlt"></a>
  4. ## 2.不可变和可变的参数
  5. 问题 1:在函数内部,针对参数使用**赋值语句**,会不会影响调用函数时传递的**实参变量**? —— 不会!
  6. - 无论传递的参数是**可变**还是**不可变**
  7. - 只要**针对参数**使用**赋值语句**,会在**函数内部**修改**局部变量的引用,不会影响到 外部变量的引用**
  8. - 问题 2:如果传递的参数是**可变类型**,在函数内部,使用**方法**修改了数据的内容,**同样会影响到外部的数据**
  9. ```python
  10. def demo(num_list):
  11. print("函数内部的代码")
  12. # 使用方法修改列表的内容
  13. num_list.append(9)
  14. print(num_list)
  15. print("函数执行完成")
  16. gl_list = [1, 2, 3]
  17. demo(gl_list)
  18. 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)