過去 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 では、引数を渡す方法が 3 つあります:
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