假定db1, db2 是shelve对象
if switch_d1_and_db2:
func(db1, db2)
else:
func(db2, db1)
怎么才能改写成:
if switch_d1_and_db2:
db1, db2 = db2, db1 # 错误写法
func(db1, db2)
db1, db2 = db2, db1
肯定是不行的,怎么改写呢
假定db1, db2 是shelve对象
if switch_d1_and_db2:
func(db1, db2)
else:
func(db2, db1)
怎么才能改写成:
if switch_d1_and_db2:
db1, db2 = db2, db1 # 错误写法
func(db1, db2)
db1, db2 = db2, db1
肯定是不行的,怎么改写呢
2 回答5.3k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
2 回答968 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
你好, 我研究這個問題一陣之後結論是:
太難做到而且你想要使用的語法跟你要做的事情並不 match
我覺得用原本的方法沒有什麼不好
如果你想要做到你定義的這種交換, 那我有一個不算是太漂亮的替代方案, 你可以參考
以下針對上述三點說明:
對於第一點, 你想要:
這邊不論
db1
,db2
是哪種 object, 這種交換式的意義在於但是你想要做的事情是:
仔細想一想, 這兩件事情並不相同, 換個方式來說,
db1, db2 = db2, db1
, 只會讓變數參考的東西互換(變數名稱不等於 db 的 file 名稱), 但是每個文件的內容還是沒有互換。所以 使用這種語法來互換跟你要達到的效果並不一致。
第二點就不多說明了, 因為合理, 只是你可能不喜歡。
第三點我給了一個不怎麼漂亮的替代方案, 就是簡單定義一個
shelf
的代理類ShelfProxy
, 這個類盡量模擬Shelf
類的行為(僅是介面上相似), 並且重載了運算符^
定義為交換:我將
^
定義為 內容上的交換, 之所以選^
只是因為我想不到比較適合的符號, 一般來說重載不會這樣進行, 而且也不太會返回其他類的實例, 不過我這邊為求方便且針對你想要一個簡單介面這一點, 出此下策。接著我們定義一些測試的 function:
測試代碼:
結果:
結論
大部分的時候, 你可以用跟
Shelf
相同的介面來操作ShelfProxy
, 整體效果也類似, 但是你不覺得寫了那麼多, 還是使用一開始的方法比較簡單嗎XD我回答過的問題: Python-QA