首頁 >後端開發 >Python教學 >棘手的 Python 問題

棘手的 Python 問題

PHPz
PHPz原創
2024-07-25 01:00:52853瀏覽

在過去的兩年裡,我一直使用Python作為我的主要程式語言。我認為這也許是「深入研究」的一個很好的理由,就像我在《棘手的 JavaScript 問題》中所做的那樣。接下來的一些問題是我在目前工作中需要處理的問題,其他問題則受到網路的啟發。

那麼你準備好讓你的大腦大吃一驚了嗎(來自 Python 問題)?

Tricky Python Questions

問題

注意事項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

答案

回答問題 1

如果你說:

{"a": "string"}

不幸的是,你錯了,答案是:

AttributeError: 'dict' object has no attribute 'a'

如果你像我一樣是從javascript 開始的,訪問字典(Javascript 中的物件)不是像Javascript 中的點那樣,你只能透過[] 訪問,並且在你想要設定「a」的鍵內。

回到問題1

回答問題 2

如果你說:

{"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"})

您可以查看在類別中使用 import 以獲取更多詳細資訊。

回到問題2

回答問題 3

如果你說:

arg2 == 2

你說得對!在 Python 中,我們有 3 種傳遞參數的方法:

  • 根據論證本身:
def myFun(arg1):
   print(arg1)

myFun('arg1')
  • 透過 *args - 參數清單或元組(允許我們將可變數量的非關鍵字參數傳遞給 Python 函數):
def myFun(*arg1):
   print(*arg1)

my_tuple = ('arg1', 'arg2')
myFun(my_tuple)
  • 透過kwargs 可以傳遞 key=value 參數(kwargs 允許我們將可變數量的關鍵字參數傳遞給 Python 函數) - 就像問題中一樣。 如果您想了解有關該主題的更多信息,可以在這裡閱讀:freecodecamp - How to Use *args and **kwargs in Python

回到問題3

回答問題 4

答案是:

[2, 3, 4]

對於一些了解範圍和任務的人來說,這似乎是一個非常簡單的問題。對於那些不知道的人來說,python將變數內存保存為引用,因此在這種情況下,arr將指向內存中的引用->該函數將更改值(但仍然是相同的引用)-> arr2 將取得arr 的引用地址,但在修改值之後。

回到問題4

感謝您閱讀這篇文章。我希望你喜歡並學到新東西。如果您有任何疑問或建議,請留言。

以上是棘手的 Python 問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn