刷算法时,关于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 变量的值。
综上所述,在处理函数内变量和函数外变量同名的情况时,需要根据具体需求使用 global 或 nonlocal 关键字,或者直接创建局部变量。
示例
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)

浙公网安备 33010602011771号