過去 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 に戻る
この記事をお読みいただきありがとうございます。楽しんで新しいことを学んでいただければ幸いです。ご質問やご提案がございましたら、コメントを残してください。
以上がPython のトリッキーな質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。