0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python模塊有哪些注意事項(xiàng)

jf_78858299 ? 來(lái)源:梯閱線條 ? 作者:小梯子 ? 2023-02-21 11:24 ? 次閱讀

1.1 變量要先賦值再引用

描述

python導(dǎo)入模塊時(shí)從上到下執(zhí)行不在函數(shù)內(nèi)、不在類內(nèi)的代碼。

NO 類型 描述
1 頂層代碼 不在函數(shù)內(nèi)、不在類內(nèi)的代碼會(huì)立刻執(zhí)行,無(wú)法引用后面位置賦值的變量名。所以被引用的變量要在前面位置進(jìn)行賦值。比如,def定義函數(shù)要寫(xiě)在調(diào)用函數(shù)的前面。
2 非頂層代碼 在函數(shù)內(nèi)、在類內(nèi)的代碼,被調(diào)用的時(shí)候才會(huì)執(zhí)行。

文件內(nèi)容

E:\\documents\\F盤\\testvar.py

func_a()

def func_a():
   print('run func_a')
   func_b()
   
func_a()

def func_b():
   print('run func_a')
   print(s)

func_a()

s='梯閱線條'

示例

# 打開(kāi)cmd 執(zhí)行下面示例
E:\\documents\\F盤>python
>>> import testvar
Traceback (most recent call last):
 File "", line 1, in 
 File "e:\\documents\\F盤\\testvar.py", line 2, in 
func_a()
# 執(zhí)行到第2行的 func_a() 報(bào)錯(cuò),未定義
NameError: name 'func_a' is not defined
# 注釋掉第2行的 func_a(),再次執(zhí)行
>>> import testvar
run func_a
Traceback (most recent call last):
 File "", line 1, in 
 File "E:\\documents\\F盤\\testvar.py", line 8, in 
   func_a()
 File "E:\\documents\\F盤\\testvar.py", line 6, in func_a
func_b()
# 執(zhí)行到第8行調(diào)用 func_a() ,第6行 調(diào)用 func_b(),報(bào)錯(cuò)未定義
NameError: name 'func_b' is not defined
# 注釋掉第8行的 func_a(),再次執(zhí)行
>>> import testvar
run func_a
run func_b
Traceback (most recent call last):
 File "", line 1, in 
 File "E:\\documents\\F盤\\testvar.py", line 14, in 
   func_a()
 File "E:\\documents\\F盤\\testvar.py", line 6, in func_a
   func_b()
 File "E:\\documents\\F盤\\testvar.py", line 12, in func_b
print(s)
# 調(diào)用func_b()訪問(wèn)s時(shí),報(bào)錯(cuò)s未定義
NameError: name 's' is not defined
# 注釋掉第14行的 func_a(),在s=’梯閱線條’的下面語(yǔ)句調(diào)用func_a(),再次執(zhí)行
>>> import testvar
run func_a
run func_b
梯閱線條

1.2 from復(fù)制變量而非別名

描述

from語(yǔ)句復(fù)制被導(dǎo)入的變量到導(dǎo)入模塊,而非取變量別名。在導(dǎo)入模塊修改變量值,不會(huì)更新被導(dǎo)入模塊的變量值。

import module,通過(guò)module.X=Y修改變量值,會(huì)更新被導(dǎo)入模塊的變量值。

文件內(nèi)容

E**:**\\documents\\F盤\\testfrom1.py

s='梯閱線條'
def myecho():
   print(s)

E**:**\\documents\\F盤\\testfrom2.py

from testfrom1 import s,myecho
s = 'tyxt'
myecho()

E**:**\\documents\\F盤\\testfrom3.py

import testfrom1
testfrom1.s = 'tyxt'
testfrom1.myecho()

示例

# 打開(kāi)cmd 執(zhí)行下面示例
E:\\documents\\F盤>python testfrom2.py
# testfrom2.py修改s=’tyxt’,不影響testfrom1.py的s的值。
梯閱線條
E:\\documents\\F盤>python testfrom3.py
# testfrom1.s=’tyxt’,會(huì)更新testfrom1.py的s值。
tyxt

1.3 reload不更新from客戶端

描述

(1) from module import X,不會(huì)將module復(fù)制到當(dāng)前模塊,不可訪問(wèn)module,不可reload(module)。

(2) from module import X導(dǎo)入方式,需import module,再reload(module),最后from module import X,才會(huì)更新最新代碼。【需import module,再reload(module),這個(gè)可以合并為reload(sys.modules[‘module’])實(shí)現(xiàn),因?yàn)閒rom module會(huì)緩存到sys.modules字典】

(3) import module導(dǎo)入方式,可以直接reload(module)更新最新代碼。

文件內(nèi)容

E**:**\\documents\\F盤\\testreloadfrom1.py

s='梯閱線條'
#s='tyxt'

E**:**\\documents\\F盤\\testreloadfrom2.py

from testreloadfrom1 import s
from importlib import reload
reload(testreloadfrom1)

示例

# 打開(kāi)cmd 執(zhí)行下面示例
E:\\documents\\F盤>python testreloadfrom2.py
Traceback (most recent call last):
 File "testreloadfrom2.py", line 3, in 
reload(testreloadfrom1)
# from module import X,不可訪問(wèn)module
NameError: name 'testreloadfrom1' is not defined

E:\\documents\\F盤>python
>>> from testreloadfrom1 import s
>>> s
'梯閱線條'
# 修改testreloadfrom1.py的s=’tyxt’
>>> from importlib import reload
# from module 不可訪問(wèn)module
>>> reload(testreloadfrom1)
Traceback (most recent call last):
 File "", line 1, in 
NameError: name 'testreloadfrom1' is not defined
# 先import testrelaodfrom1
>>> import testreloadfrom1
>>> reload(testreloadfrom1)
'testreloadfrom1' from 'E:\\\\documents\\\\F盤\\\\testreloadfrom1.py'>
# s仍然沒(méi)有更新
>>> s
'梯閱線條'
# 需重新from M import X , s 才會(huì)更新
>>> from testreloadfrom1 import s
>>> s
'tyxt'
>>> exit()
# 通過(guò)import module 進(jìn)行reload
E:\\documents\\F盤>python
>>> import testreloadfrom1
>>> testreloadfrom1.s
'tyxt'
# 修改testreloadfrom1.py的s=’梯閱線條’
>>> from importlib import reload
# 只需reload被導(dǎo)入模塊即可
>>> reload(testreloadfrom1)
'testreloadfrom1' from 'E:\\\\documents\\\\F盤\\\\testreloadfrom1.py'>
# s有更新
>>> testreloadfrom1.s
'梯閱線條'
>>> exit()
# 通過(guò)reload(sys.modules[‘M’])對(duì)from M import X進(jìn)行重載
E:\\documents\\F盤>python
>>> from testreloadfrom1 import s
>>> s
'梯閱線條'
# 修改testreloadfrom1.py的s=’tyxt’
>>> import sys
>>> sys.modules['testreloadfrom1']
'testreloadfrom1' from 'E:\\\\documents\\\\F盤\\\\testreloadfrom1.py'>
>>> from importlib import reload
>>> reload(sys.modules['testreloadfrom1'])
'testreloadfrom1' from 'E:\\\\documents\\\\F盤\\\\testreloadfrom1.py'>
>>> s
'梯閱線條'
>>> from testreloadfrom1 import s
>>> s
'tyxt'

1.4 python避免使用遞歸導(dǎo)入

描述

模塊A導(dǎo)入模塊B,模塊B又導(dǎo)入模塊A,這種情況稱為遞歸導(dǎo)入。應(yīng)該避免使用遞歸導(dǎo)入。如必須遞歸導(dǎo)入可以使用import M,而不使用from M import X。

文件內(nèi)容

E**:**\\documents\\F盤\\testmoda.py

S='梯閱線條'
import testmodb
N=9555

E**:**\\documents\\F盤\\testmoda.py

from testmoda import S
from testmoda import N

示例

# 打開(kāi)cmd 執(zhí)行下面示例
E:\\documents\\F盤>python
>>> import testmoda
Traceback (most recent call last):
 File "", line 1, in 
 File "E:\\documents\\F盤\\testmoda.py", line 2, in 
   import testmodb
 File "E:\\documents\\F盤\\testmodb.py", line 2, in 
from testmoda import N
# testmoda.py執(zhí)行到import testmodb時(shí),
# 從testmoda導(dǎo)入S成功,但是,從testmoda導(dǎo)入N失敗,
# 因?yàn)榇藭r(shí)testmoda還沒(méi)執(zhí)行完import testmodb,無(wú)法往下執(zhí)行 N=9555
ImportError: cannot import name 'N' from 'testmoda' (E:\\documents\\F盤\\testmoda.py)
>>> exit()
# 修改testmodb.py
#from testmoda import S
#from testmoda import N
import testmoda
#############
>>> import testmoda
>>> testmoda.S
'梯閱線條'
>>> testmoda.N
9555
# 通過(guò)import M進(jìn)行遞歸導(dǎo)入可以正常訪問(wèn)。
>>> testmoda.testmodb
'testmodb' from 'E:\\\\documents\\\\F盤\\\\testmodb.py'>
>>> testmoda.testmodb.testmoda.S
'梯閱線條'
>>> testmoda.testmodb.testmoda.N
9555
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4277

    瀏覽量

    62323
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4722

    瀏覽量

    68231
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4767

    瀏覽量

    84375
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何選擇車載GPS模塊?哪些注意事項(xiàng)

    如何選擇車載GPS模塊?哪些注意事項(xiàng)
    發(fā)表于 05-18 06:37

    使用Python MyHDL哪些注意事項(xiàng)?

    如何用Python寫(xiě)Verilog?使用Python MyHDL哪些注意事項(xiàng)
    發(fā)表于 06-23 14:10

    變頻串聯(lián)諧振耐壓試驗(yàn)裝置操作注意事項(xiàng)及接線注意事項(xiàng)哪些?

    變頻串聯(lián)諧振耐壓試驗(yàn)裝置操作注意事項(xiàng)及接線注意事項(xiàng)哪些?
    發(fā)表于 10-26 06:38

    CAN模塊特性與設(shè)計(jì)上的注意事項(xiàng)簡(jiǎn)析

    文檔文章目錄目錄Part 1. CAN 模塊特性Part 2. 硬件設(shè)計(jì)上的注意事項(xiàng)Part 3. 軟件設(shè)計(jì)上的注意事項(xiàng)Part 4. CAN波特率與采樣點(diǎn)配置要求Part 5. 同步跳轉(zhuǎn)位寬時(shí)間設(shè)置的
    發(fā)表于 01-06 08:04

    編寫(xiě)矩陣鍵盤模塊哪些注意事項(xiàng)

    編寫(xiě)矩陣鍵盤模塊哪些注意事項(xiàng)?怎樣去設(shè)置串口數(shù)據(jù)格式的?
    發(fā)表于 02-23 07:56

    膽機(jī)使用的注意事項(xiàng)

    膽機(jī)使用的注意事項(xiàng):膽機(jī)使用的注意事項(xiàng) 我是初哥, 現(xiàn)在對(duì)膽機(jī)感興趣, 但聽(tīng)說(shuō)膽機(jī)使用麻煩, 請(qǐng)問(wèn)什么需要注意的?湖南吉首火車站 范增不必?fù)?dān)心, 膽機(jī)的使用方法
    發(fā)表于 11-29 17:09 ?46次下載

    LCM使用注意事項(xiàng)

    LCM使用注意事項(xiàng) 1. 安裝   LCD模塊的安裝是用PCB上的安
    發(fā)表于 04-16 21:38 ?1400次閱讀

    電池使用哪些注意事項(xiàng)

    電池使用哪些注意事項(xiàng)?          1 仔細(xì)閱讀電池說(shuō)明書(shū),使用深正規(guī)廠家的充電器;
    發(fā)表于 10-21 11:09 ?1249次閱讀

    如何正確使用UPS?使用UPS哪些注意事項(xiàng)?

    如何正確使用UPS?使用UPS哪些注意事項(xiàng)? 如何正確使用UPS 1)正常的開(kāi)機(jī)順序由于一般負(fù)載在啟動(dòng)
    發(fā)表于 03-18 17:57 ?2753次閱讀

    藍(lán)牙模塊的基本常識(shí)與注意事項(xiàng)

    藍(lán)牙模塊的基本常識(shí)與注意事項(xiàng),興趣的同學(xué)可以下載學(xué)習(xí)
    發(fā)表于 04-11 14:45 ?0次下載

    python字典類型的使用和注意事項(xiàng)

    字典類型在實(shí)際的python開(kāi)發(fā)中,使用特別頻繁,結(jié)合本人多年的工作經(jīng)驗(yàn),現(xiàn)將字典的使用以及字典使用注意事項(xiàng)總結(jié)如下:
    的頭像 發(fā)表于 01-19 17:49 ?3478次閱讀
    <b class='flag-5'>python</b>字典類型的使用和<b class='flag-5'>注意事項(xiàng)</b>

    SIWAREX稱重模塊安裝接線注意事項(xiàng)

    SIWAREX稱重模塊安裝接線注意事項(xiàng)說(shuō)明。
    發(fā)表于 05-09 10:23 ?6次下載

    工控機(jī)使用哪些注意事項(xiàng)

    工控機(jī)使用哪些注意事項(xiàng)?
    發(fā)表于 10-29 15:01 ?1213次閱讀

    稱重模塊安裝時(shí)常見(jiàn)問(wèn)題及注意事項(xiàng)

    廣州蘭瑟電子給大家介紹稱重模塊安裝時(shí)常見(jiàn)問(wèn)題及注意事項(xiàng)
    發(fā)表于 03-17 14:51 ?953次閱讀

    DC電源模塊哪些注意事項(xiàng)和使用技巧?

    DC電源模塊哪些注意事項(xiàng)和使用技巧?
    的頭像 發(fā)表于 12-25 13:59 ?549次閱讀
    DC電源<b class='flag-5'>模塊</b><b class='flag-5'>有</b>哪些<b class='flag-5'>注意事項(xiàng)</b>和使用技巧?