1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python3 全局变量 局部变量_Python3获取变量名并修改函数内部的外部变量和局部变量

python3 全局变量 局部变量_Python3获取变量名并修改函数内部的外部变量和局部变量

时间:2022-07-08 09:24:30

相关推荐

python3 全局变量 局部变量_Python3获取变量名并修改函数内部的外部变量和局部变量

目录

1. 获取变量名

from u_工具 import to_变量名

a = 1

print(to_变量名(a))

2. 修改local变量

2.0. 预期效果

将变量a的值改成5

def main():

a = 2

def func():

nonlocal a

a = 5

func()

print(a)

main()

2.1. 利用 PyFrame_LocalsToFast 函数

缺点:这函数快被官方弃了

import sys

from u_工具 import to_变量名

from u_工具 import change_locals

def main():

a = 2

修改表 = {to_变量名(a): 5}

change_locals(sys._getframe(), 修改表)

print(a)

main()

2.2. 直接使用 globals

缺点:只能修改全局变量

a = 1

def main():

globals()["a"] = 5

main()

print(a)

2.3. 利用 memmove 函数

缺点:用到的两个值,占用空间要相同大小

import ctypes

def main():

a = 2

def func(a_id):

b = 5

ctypes.memmove(a_id,id(b),object.__sizeof__(b))

func(id(a))

print(a)

main()

u. 工具类

import re

import traceback

import ctypes

__to_变量名__pattren = pile(r'[\W+\w+]*?to_变量名\((\w+)\)')

__to_变量名__变量名集 = []

# 1.获取变量名

def to_变量名(变量):

global __to_变量名__变量名集

if not __to_变量名__变量名集:

__to_变量名__变量名集 = __to_变量名__pattren.findall(traceback.extract_stack(limit=2)[0][3])

return __to_变量名__变量名集.pop(0)

# 2.修改local变量

def change_locals(frame, 修改表={}):

frame.f_locals.update(修改表)

ctypes.pythonapi.PyFrame_LocalsToFast(

ctypes.py_object(frame),

ctypes.c_int(0)

)

python3 全局变量 局部变量_Python3获取变量名并修改函数内部的外部变量和局部变量 python3 在 local...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。