日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python怎么撤销_关于Python:Python-如何删除/取消导入之前已导入的库

發(fā)布時(shí)間:2023/12/8 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python怎么撤销_关于Python:Python-如何删除/取消导入之前已导入的库 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本問題已經(jīng)有最佳答案,請(qǐng)猛點(diǎn)這里訪問。

眾所周知,在python 2.x中,如果我們將兩個(gè)整數(shù)值相除,則結(jié)果為int。 但是,如果使用from __future__ import division,我們?nèi)《氖莊loat值。

1

2

3

4

5

6

7

8

9

10

11

12>>> 3/2

1

>>> from __future__ import division

>>> 3/2

1.5

>>>

>>>

>>> 3//2

1

>>> 4/3

1.3333333333333333

>>>

因此,如果我們要在導(dǎo)入__future__.division之后獲取整數(shù),則應(yīng)使用//而不是/,但是我想知道如何使/再次返回整數(shù)。

有什么方法可以取消導(dǎo)入或刪除以前導(dǎo)入的模塊?

在IDLE中有一種方法可以取消導(dǎo)入庫(kù)或模塊,即使用Ctrl + F6或菜單中的"選項(xiàng)"將其重新啟動(dòng)。

@NedBatchelder那就是我的問題。

請(qǐng)不要再發(fā)布相同的問題,@ Marslo。 如果您沒有得到很好的答案,請(qǐng)嘗試通過添加更多細(xì)節(jié)或進(jìn)行澄清來改善現(xiàn)有問題。

@唐·柯比·羅杰!

對(duì)于它的價(jià)值,只要要整數(shù)除法,就應(yīng)該使用。 如果使用,則代碼應(yīng)足夠健壯以處理整數(shù)或真除法,或者應(yīng)使用__future__,以便可以肯定地知道使用真除法。

即使導(dǎo)入了__future__"模塊",也無法刪除它們-即使使用del division; from sys import modules; del modules[__future__]。 我認(rèn)為此導(dǎo)入會(huì)覆蓋解釋器中的某些內(nèi)容。 但是,對(duì)于其他標(biāo)準(zhǔn)導(dǎo)入,可以通過del eting sys.modules[MODULE_NAME]來刪除(盡管這是有風(fēng)險(xiǎn)的,并且?guī)缀踅^不應(yīng)這樣做)模塊。

python具有reload來重新導(dǎo)入已經(jīng)導(dǎo)入的模塊(不應(yīng)在生產(chǎn)代碼中使用),但是一旦導(dǎo)入,就沒有辦法(我知道)取消導(dǎo)入模塊。

當(dāng)然,您可以刪除當(dāng)前名稱空間中對(duì)該模塊的引用:

1

2

3

4import module

module.foo()

del module

module.foo() #NameError, can't find `module`

另一點(diǎn)是__future__并不是真正的模塊。更多的是告訴解析器如何工作的指令。這樣,當(dāng)放入文件時(shí),它必須是其中的第一件事(在進(jìn)行其他任何導(dǎo)入等之前)。您可以從交互式會(huì)話中的任何位置導(dǎo)入__future__的事實(shí)是一種特殊情況。

有一些取消導(dǎo)入模塊的方法,例如您可以del它們。但是,它不適用于__future__。

@LevLevitsky-不,它刪除對(duì)當(dāng)前名稱空間中模塊的引用,這不是同一回事。 -如果您from module import *,它不起作用。

@LevLevitsky-您也許可以用sys.modules刪除它,但這是有問題的...

它與from module import *兼容,您只需要知道要?jiǎng)h除的名稱即可。

@mgilson:對(duì)此存在現(xiàn)有技術(shù)。 (抱歉,我現(xiàn)在懶得找它。)正確地做起來很復(fù)雜,但是可以做到,并且在所有情況下都可以正常工作。說"沒有官方支持的方式"更為正確。 IIRC解決方案包括注冊(cè)一個(gè)導(dǎo)入鉤子,并弄清楚一些及時(shí)的邏輯以修復(fù)對(duì)模塊對(duì)象的所有引用。

是! del moudle_name適用于導(dǎo)入moudle_name的條件。我仍然找到從xxx import xx的狀況的方式,我想我可以通過print sys.modules或print sys.modules.keys()找到它們。

__future__看起來像一個(gè)模塊,但實(shí)際上不是。導(dǎo)入它實(shí)際上會(huì)影響當(dāng)前模塊的編譯選項(xiàng)。沒有辦法"撤消"它,因?yàn)樗鼘?shí)際上是在模塊執(zhí)行之前發(fā)生的。

如果它是其他任何"正常"模塊,則有很多方法,但是您不走運(yùn)。

要么處理更改后的語(yǔ)義,要么將需要進(jìn)行不同編譯的代碼放在單獨(dú)的模塊中。

因此,撤消普通模塊是通過使用del,不是嗎?

Marsalo:否。如果您想更改自己的問題,我會(huì)回答,但在一般情況下不起作用。 sys.modules以及以后導(dǎo)入該對(duì)象的任何模塊都將引用該模塊對(duì)象。 del sys.modules[modulename]更接近但仍不完整。

好吧,我認(rèn)為del有效。我通過Math模塊進(jìn)行了測(cè)試,而del數(shù)學(xué)未將其導(dǎo)入。

但是sys.modules [math]不起作用!那很奇怪!數(shù)學(xué)模塊會(huì)從sys.modules中刪除。在使用sys.modules [math]之前和之后,我將它們打印兩次。

我認(rèn)為您缺少import進(jìn)入sys.modules條目的事實(shí):gist.github.com/3751495。請(qǐng)注意,這并未解決對(duì)模塊的任何其他引用的問題,因此并不完全可靠/值得進(jìn)行生產(chǎn)。

我已添加我的評(píng)論。我很奇怪,即使sys.modules中不再存在math,數(shù)學(xué)模塊也能正常工作。

我也已經(jīng)遇到了這種需要。

我不使用__future__。

當(dāng)需要浮點(diǎn)運(yùn)算結(jié)果時(shí),我將除數(shù)設(shè)為浮點(diǎn)運(yùn)算:

1

2>>> 3/float(2)

1.5

"不要那樣做。"不是"我該怎么辦?"的答案

>>> 32.0 1.5 >>> 3.02 1.5 >>> 3.02.0 1.5

抱歉,我只是不知道如何在注釋框中進(jìn)行換行

@bukzor:沒錯(cuò),從技術(shù)上講,這不是答案。但是我發(fā)現(xiàn)許多關(guān)于SO的"做錯(cuò)了事"的答案非常有用。來自我的支持。

您可以使用以下方法卸載它:

1>>> del(module)

是的,del moudle_name在某些情況下可以工作,例如import moudle_name,但似乎不能用于xxx import xxx。

這不會(huì)卸載模塊。該對(duì)象仍然至少存在于sys.modules中。

總結(jié)

以上是生活随笔為你收集整理的python怎么撤销_关于Python:Python-如何删除/取消导入之前已导入的库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。