Loading

刷算法时,关于python函数内变量和函数外变量同命如何处理

在 Python 中,当函数内变量和函数外变量同名时,需要了解它们的作用域规则,以下是不同场景下的处理方式:

1. 函数内读取全局变量

当函数内变量和函数外变量同名,且在函数内只是读取该变量的值时,默认读取的是全局变量。

# 定义全局变量
num = 10

def read_variable():
    # 函数内读取全局变量 num
    print(num)

read_variable()

在上述代码中,函数 read_variable 内部没有定义新的 num 变量,所以 print(num) 会打印全局变量 num 的值。

2. 函数内修改全局变量

如果要在函数内修改全局变量,需要使用 global 关键字进行声明。

# 定义全局变量
num = 10

def modify_variable():
    global num
    # 修改全局变量 num 的值
    num = 20
    print(num)

modify_variable()
print(num)

在这个例子中,global num 声明了在函数内部使用的 num 是全局变量,因此 num = 20 会修改全局变量 num 的值。

3. 函数内创建同名局部变量

如果在函数内直接给同名变量赋值,Python 会创建一个新的局部变量,该局部变量会覆盖全局变量,不会影响全局变量的值。

# 定义全局变量
num = 10

def create_local_variable():
    # 创建同名局部变量 num
    num = 30
    print(num)

create_local_variable()
print(num)

在函数 create_local_variable 中,num = 30 创建了一个新的局部变量 num,它和全局变量 num 是不同的变量,函数内部的 print(num) 打印的是局部变量的值,而函数外部的 print(num) 打印的是全局变量的值。

4. 嵌套函数中的 nonlocal 关键字

在嵌套函数中,如果要修改外层函数的变量,需要使用 nonlocal 关键字。

def outer_function():
    # 定义外层函数的变量
    num = 10
    def inner_function():
        nonlocal num
        # 修改外层函数的变量 num
        num = 20
        print(num)
    inner_function()
    print(num)

outer_function()

在这个例子中,nonlocal num 声明了在内部函数中使用的 num 是外层函数的变量,因此 num = 20 会修改外层函数的 num 变量的值。

综上所述,在处理函数内变量和函数外变量同名的情况时,需要根据具体需求使用 globalnonlocal 关键字,或者直接创建局部变量。

示例

def get_bin_sum(num):
    """
    获取num的二进制各位之和
    :param num:
    :return: 返回二进制字符串
    """
    # 获取num的二进制字符串
    bin_str = bin(num)[2:]
    # 返回num的二进制字符串的各位之和
    return sum(int(i) for i in bin_str)


def get_quaternary_sum(num):
    """
       获取num的四进制
       :param num:
       :return: 返回四进制字符串
    """
    # 定义num_list,用于存放num的四进制的各位数字
    num_list = []

    # 生成num_list
    while num != 0:
        remainder = num % 4
        num_list.append(remainder)
        num = num // 4

    # 返回num_list各元素之和
    return sum(num_list)

def bin_sum_equal_quaternary_sum(num):
    """
    判断num的二进制各位之和是否等于四进制各位之和
    :param num:
    :return: 返回Ture或False
    """
    # 二进制各位之和
    bin_sum = get_bin_sum(num)
    # 四进制各位之和
    quaternary_sum = get_quaternary_sum(num)
    # 两者是否相等,返回True或False
    return bin_sum == quaternary_sum

if __name__ == '__main__':
    """ 程序入口 """
    # 定义计数器,记录通过个数
    counter = 0
    # 计算通过个数
    for i in range(1, 2025):
        # 计算
        is_equal = bin_sum_equal_quaternary_sum(i)
        # 通过,+1
        if is_equal:
            counter += 1
    # 返回
    print(counter)
posted @ 2025-03-31 10:10  一只大学生  阅读(62)  评论(0)    收藏  举报