04. Python中的全局变量和函数的进阶

1. 全局变量和局部变量

通过global关键字把局部变量转换为全局变量

num = 10


def demo1():
    print("demo1" + "-" * 50)

    # global 关键字,告诉 Python 解释器 num 是一个全局变量
    global num

    num = 100
    print(num)


def demo2():
    print("demo2" + "-" * 50)
    print(num)


# demo1() # 输出 100
demo2()  # 输出10

print("over")

2. 函数进阶

  • 函数返回多个值
def measure():
    """返回当前的温度"""

    print("开始测量...")
    temp = 39
    wetness = 10
    print("测量结束...")

    return temp, wetness


temp, wetness = measure()

print(temp)
print(wetness)
  • 交换两个数
解法 1 —— 使用其他变量

    # 解法 1 - 使用临时变量
    c = b
    b = a
    a = c

解法 2 —— 不使用临时变量

    # 解法 2 - 不使用临时变量
    a = a + b
    b = a - b
    a = a - b

解法 3 —— 异或运算
	a = a ^ b
	b = a ^ b
	a = a ^ b
	
解法 4 —— Python 专有,利用元组

    a, b = b, a
  • 面试题
def demo(num, num_list):

    print("函数内部代码")

    # num = num + num
    num += num
    # num_list.extend(num_list) 由于是调用方法,所以不会修改变量的引用
    # 函数执行结束后,外部数据同样会发生变化
    num_list += num_list   # 注意: Python中的列表+=是在原有集合上操作,要区别于scala

    print(num)
    print(num_list)
    print("函数代码完成")


gl_num = 9
gl_list = [1, 2, 3]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)
  • 多值参数
    有时可能需要 一个函数 能够处理的参数 个数 是不确定的,这个时候,就可以使用 多值参数
    python 中有 两种 多值参数:
    参数名前增加 一个 * 可以接收 元组
    参数名前增加 两个 * 可以接收 字典
    一般在给多值参数命名时,习惯使用以下两个名字
    *args —— 存放 元组 参数,前面有一个 *
    **kwargs —— 存放 字典 参数,前面有两个 *
    args 是 arguments 的缩写,有变量的含义
    kw 是 keyword 的缩写,kwargs 可以记忆 键值对参数
def demo(num, *args, **kwargs):
    print(num, type(num))
    print(args, type(args))
    print(kwargs, type(kwargs))


demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)

在这里插入图片描述

  • 元组和字典的拆包
def demo(*args, **kwargs):

    print(args)
    print(kwargs)


# 需要将一个元组变量/字典变量传递给函数对应的参数
gl_nums = (1, 2, 3)
gl_xiaoming = {"name": "小明", "age": 18}

# 没有拆包,会把两个元素全部传给tuple, 而字典里面是空的
demo(gl_nums, gl_xiaoming)

# 进行了拆包,会把相应的元素传递给tuple和dict
demo(*gl_nums, **gl_xiaoming)

在这里插入图片描述
在这里插入图片描述

3. python特殊函数 str(self)和__repr__(self)

发布了85 篇原创文章 · 获赞 12 · 访问量 3757

猜你喜欢

转载自blog.csdn.net/fanjianhai/article/details/103551130