이 기사에서는 Python에서 문자열 상수를 변수로 변환하는 방법을 설명합니다. (예시 포함) 참고할만한 가치가 있으니 도움이 필요한 친구들이 참고하시면 좋을 것 같습니다.
이 글은 관련된 내용의 요점을 정리하고 이를 더 많은 학습 주제로 확장하는 것이 도움이 되기를 바랍니다.
1. 변수 이름을 동적으로 생성하는 방법은 무엇입니까?
M 학생의 질문은 다음과 같습니다.
죄송합니다. 질문하고 싶습니다. 목록 = ['A', 'B', '로 알려져 있습니다. C', 'D' ], 목록에 있는 요소의 이름을 딴 새 목록 A = [], B = [], C = [], D = []를 어떻게 얻을 수 있나요? 간단히 이해하자면, 이 질문의 의미는 문자열 내용을 다른 객체의 변수 이름으로 사용한다는 것입니다.
목록의 요소는 문자열입니다. 여기서 'A'-'D'는 상수이고 필요한 결과에서 A-D는 변수입니다.
상수를 변수로 직접 사용하도록 강제하면 오류가 보고됩니다.
>>> 'A' = [] ...SyntaxError: can't assign to literal
오류에 나오는
은 컴퓨터에서 일반적인 개념입니다. science, #🎜 🎜# 소스코드에서 고정된 값을 표현하는데 사용됩니다. 예를 들어 정수, 부동 소수점 숫자, 문자열과 같은 기본 유형은 리터럴입니다. literal
指的是字面量
리터럴 수량은 수량 자체를 의미하며, 이는 원자적 실체로 이해될 수 있으며 물론 값을 할당할 수 없습니다.
#🎜🎜 #최근에는 몇 가지가 있습니다. 이런 이유로 광고를 하는 사람들이 스터디 그룹에 몰래 들어왔습니다. 예를 들어 그룹의 질문을 사용하여 평가를 하는 등 검토 임계값을 높이기로 결정했습니다.
생각지도 못했던 첫 번째 학생 Q가 거의 아무 생각 없이 평가를 받게 되었는데, 위의 문제를 해결하기 위한 아이디어가 떠올랐습니다. 그런데 우연이 거의 동시에 그룹의 동급생 J가 또 다른 해결책을 생각해 냈습니다. (그는 그룹에서 토론을 보지 못했지만 Knowledge Planet의 기록을 보고 이 문제에 대해서만 알게 되었습니다.)
즉, 전날 밤에 해결이 불가능하다고 생각했던 문제가 다음날 실제로 두 가지 다른 해결책을 얻었습니다!
그럼 그들의 대답은 무엇일까요?
# J 同学的解答 >>> list1 = ['A', 'B', 'C', 'D'] >>> for i in list1: >>> globals()[i] = [] >>> A []
이 방법은 전역 네임스페이스를 수정하여 새 변수를 교묘하게 "정의"합니다. globals() 메소드는 사전을 꺼내는데, 문자열 'A'는 키 중 하나이며, 이 키는 바로 전역 네임스페이스의 변수로서 상수에서 변수로의 변환을 구현합니다.
데이터 구조 수준에서는 빈 목록 []이 해당 문자열 키 값에 값으로 바인딩되고, 응용 프로그램 수준에서는 변수 내용과 변수 이름이 함께 바인딩되어 사용됩니다.
이 답변을 보고 문득 지난달에
동적 변수 할당에 관한 "Traps of Dynamic Assignment in Python"이라는 글을 다시 게시한 것이 생각났습니다. 질문! 나는 globals()와 locals() 사용법의 차이점에만 초점을 맞춘 것 같지만 원래 용도를 실제로 파악하지는 못했습니다. J 동창이 그 글을 보고 이 방법을 배웠다고 하더군요. 재미있네요. 제가 진심으로 삼켰던 지식을 공유하고, 동급생 J가 이를 흡수하고 마스터했고, 마침내 피드백이 돌아와 문제를 해결했습니다.지식 공유의 매력을 실감합니다: 지식은 흐름 속에서 생명을 얻고 충돌 속에서 빛납니다.
동시에 나는 또한 상호 지원하는 학습 그룹의 이점을 진심으로 이해합니다.다른 사람에게 이익이 되는 사람은 자신에게도 이익이 되고, 서로 돕는 사람은 발전합니다. 함께.
3. 동적으로 코드를 실행하는 방법
Q는 다른 답변을 제공했습니다.# 🎜🎜## Q 同学的解答 >>> list1 = ['A', 'B', 'C', 'D'] >>> for i in list1: >>> exec(f"{i} = []") >>> A []
그의 작성 방법은 Python 3.6에서 도입된 f-strings 기능을 사용합니다. 실제로, exec() 메소드에서 받은 매개변수만 확인하면 됩니다. 변수 i의 문자열을 사용할 수 있습니다. 예를 들어 다음과 같이 작성합니다. # 以下代码可替换上例的第 4 行
exec(i + " = []")
# 或者:
exec("{} = []".format(i))
# 或者:
exec(' '.join([i, '= []']))
Q 同学这个答案的核心在于 exec() 方法,它是内置的,用途是执行储存在字符串或文件中的代码段。
它的基础用法如下:
>>> exec('x = 1 + 2') >>> x 3 # 执行代码段 >>> s = """ >>> x = 10 >>> y = 20 >>> sum = x + y >>> print(sum) >>> """ >>> exec(s) 30
看完了 exec() 的用法,我们再回来看 Q 同学的答案。for-循环中取出来的 i 是字符串,而拼接后的字符串经过 exec() 的处理,就获得了动态编写代码的效果。
也就是说,因为字符串常量的内容被当做有效代码而执行了,其中的 'A'-'D' 元素,就取得了新的身份,变成了最终的 A-D 变量名。
这个方法看起来很简单啊,可是由于 exec() 方法太生僻了,直到 Q 同学提出,我们才醒悟过来。
注意:在 Python3 中,exec() 是个内置方法;而在 Python2 中,exec 是个语句(statement),另外有个 execfile() 方法,两者相合并,就成了 Python3 中的 exec() 方法。本文使用的是 Python3。
4、总结
抽象一下最初的问题,它实际问的是“如何将字符串内容作为其它对象的变量名”,更进一步地讲是——“如何将常量转化为变量 ”。
使用直接进行赋值的静态方法,行不通。
两位同学提出的方法都是间接的动态方法:一个是动态地进行变量赋值,通过修改命名空间而植入变量;一个是动态地执行代码,可以说是通过“走后门”的方式,安插了变量。
两种方法殊途同归,不管是白猫还是黑猫,它们都抓到了老鼠。
这两种方法已经给我们带来了很有价值的启发,同时,因为它们,群内小伙伴们更是发散地讨论一些相关联的话题,例如:S 同学提出了另一种修改命名空间中变量的写法、L 同学提到了 eval() 的意义、eval() 与 exec() 的区别、我查到了为什么要慎用 eval() 、C 与 H 同学提到了 eval() 的安全用法……
위 내용은 Python에서 문자열 상수를 변수로 변환하는 방법은 무엇입니까? (예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!