지난 2년 동안 저는 Python을 주요 프로그래밍 언어로 사용해 왔습니다. 나는 까다로운 JavaScript 질문에서 했던 것처럼 "깊이 살펴보는" 것이 아마도 좋은 이유라고 생각했습니다. 다음 질문 중 일부는 현재 직장에서 처리해야 하는 문제였고 일부는 웹에서 영감을 받았습니다.
그럼 (Python 질문에서) 깜짝 놀랄 준비가 되셨나요?
주의사항 1!: 각 질문에는 설명과 함께 답변이 있습니다(각 항목 아래 링크).
주의사항 2!: 각 질문에 대해 어떤 결과가 나올지 생각해 보세요.질문 1
exapmle_dict = dict()
exapmle_dict.a = "string"
print(exapmle_dict)
답변 1로 이동질문 2
class Json:
def __init__(self, *args, **kwargs):
import json
def print_dict_as_json(self, obj):
print(json.dumps(obj))
example_json = Json()
example_json.print_dict_as_json({"a": "string"})
답변 2로 이동질문 3
def myFun(arg1, arg3, **kwargs):
for key, value in kwargs.items():
print("%s == %s" % (key, value))
my_dict = {'arg1':1, 'arg2': 2}
myFun(**my_dict, arg3=3)
답변 3으로 이동질문 4
def add_to_all_1(arr):
for i in range(len(arr)):
arr[i] =1
def my_func():
arr = [1,2,3]
add_to_all_1(arr)
arr2 = arr
print(arr2)
my_func()
답변 4로 이동
다음과 같이 말한 경우:
{"a": "string"}
안타깝게도 당신은 틀렸습니다. 대답은 다음과 같습니다.
AttributeError: 'dict' object has no attribute 'a'
나를 좋아하고 javascript에서 먼저 왔다면, 접근 사전(Javascript의 객체)은 Javascript처럼 점으로 되어 있지 않고, []로만 접근할 수 있고, 키 안에는 "a"를 설정하고 싶습니다.
질문 1로 돌아가기
다음과 같이 말한 경우:
{"a": "string"}
또 틀렸습니다. 답은 다음과 같습니다.
... NameError: name 'json' is not define
당신은 Python에서 로컬 범위와 전역 범위의 차이점을 알고 있을 것입니다(그렇지 않다면 Python 범위를 읽어야 합니다). __init__은 함수이며 가져오기는 로컬 범위 내에 있으므로 json이 무엇인지 알 수 없습니다. 다음과 같이 전역으로 가져와서 문제를 해결할 수 있습니다.
import json class Json: def print_dict_as_json(self, obj): print(json.dumps(obj)) example_json = Json() example_json.print_dict_as_json({"a": "string"})
또는 좀 더 발전된 방법으로:
class Json: import json as json def print_dict_as_json(self, obj): print(self.json.dumps(obj)) example_json = Json() example_json.print_dict_as_json({"a": "string"})
자세한 내용은 클래스 내부에서 가져오기를 사용하여 확인할 수 있습니다.
질문 2로 돌아가기
다음과 같이 말한 경우:
arg2 == 2
당신 말이 맞아요! Python에서는 인수를 전달하는 세 가지 방법이 있습니다:
def myFun(arg1): print(arg1) myFun('arg1')
def myFun(*arg1): print(*arg1) my_tuple = ('arg1', 'arg2') myFun(my_tuple)
질문 3으로 돌아가기
정답은:
[2, 3, 4]
범위와 할당을 아는 일부 사람들에게는 매우 쉬운 질문으로 보일 수 있습니다. 모르는 사람들을 위해 설명하자면, Python은 변수 메모리를 참조로 저장하므로 이 경우 arr은 메모리의 참조를 가리킵니다. -> 함수는 값을 변경합니다(그러나 여전히 동일한 참조). -> arr2는 arr의 참조 주소를 가져오지만 값이 수정된 후에.
질문 4로 돌아가기
이 글을 읽어주셔서 감사합니다. 새로운 것을 즐기고 배웠기를 바랍니다. 질문이나 제안사항이 있으시면 댓글을 남겨주세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3