国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python 中 __init__.py 文件用法

這篇具有很好參考價(jià)值的文章主要介紹了Python 中 __init__.py 文件用法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

0、init.py

在Python工程里,當(dāng)python檢測(cè)到一個(gè)目錄下存在__init__.py文件時(shí),python就會(huì)把它當(dāng)成一個(gè)模塊(module)。Module跟C++的命名空間和Java的Package的概念很像,都是為了科學(xué)地組織化工程,管理命名空間。

init.py可以是一個(gè)空文件,也可以有非常豐富的內(nèi)容。本文將舉一個(gè)非常簡(jiǎn)單的例子,來(lái)介紹__init__.py的用法;在本文的最后,我將會(huì)再簡(jiǎn)單介紹__init__.py的設(shè)計(jì)理念。

1、一個(gè)普通的四則運(yùn)算模塊

在不利用__init__.py的情況下,我們來(lái)看一個(gè)四則運(yùn)算的例子。我們的工程目錄結(jié)構(gòu)如下圖所示:
__init__.py,Python,python,開(kāi)發(fā)語(yǔ)言,numpy
四則運(yùn)算例子的工程目錄結(jié)構(gòu)
如上圖,其中,main.py是程序入口,我們用了不同的方式來(lái)import四則運(yùn)算的各個(gè)子模塊。arithmetic模塊實(shí)現(xiàn)四則運(yùn)算;為了展示需要,我們將加減乘除四種運(yùn)算分別放在不同的代碼中。

每個(gè)文件的代碼如下:

#
# @file main.py
#

import arithmetic.add
import arithmetic.sub as sub

from arithmetic.mul import mul
from arithmetic import dev

def letscook(x, y, oper):
    r = 0
    if oper == "+":
        r = arithmetic.add.add(x, y)
    elif oper == "-":
        r = sub.sub(x, y)
    elif oper == "*":
        r = mul(x, y)
    else:
        r = dev.dev(x, y)

    print("{} {} {} = {}".format(x, oper, y, r))

x, y = 3, 8

letscook(x, y, "+")
letscook(x, y, "-")
letscook(x, y, "*")
letscook(x, y, "/")
#
# @file add.py
#
def add(a, b):
    return a + b
#
# @file sub.py
#

def sub(a, b):
    return a - b
#
# @file mul.py
# 
def mul(a, b):
    return a * b
#
# @file dev.py
#
def dev(a, b):
    return a / b

從代碼可以看出,為了使用arithmetic中的某個(gè)子模塊(main.py中我們展示了四種不同的方式),我們必須使用非常繁瑣的import語(yǔ)句;在使用的時(shí)候,也有可能需要使用非常繁瑣的表達(dá)式。如果我們?cè)诓煌牡胤绞褂胊rithmetic的子模塊,都需要寫這么繁瑣的import或者使用表達(dá)式,你可能會(huì)覺(jué)得心累。這就是為什么我們需要利用__init__.py來(lái)簡(jiǎn)化我們的使用。

2、利用__init__.py

還是第1小節(jié)中的工程目錄結(jié)構(gòu),實(shí)現(xiàn)同樣的功能,我們?cè)赺_init__.py中編寫了一些代碼;同樣,我們對(duì)main.py進(jìn)行了一些適當(dāng)?shù)男薷摹?/p>

修改后__init__.py和main.py的代碼如下:

#
# @file main.py
#

import arithmetic as a4

def letscook(x, y, oper):
    r = 0
    if oper == "+":
        r = a4.add(x, y)
    elif oper == "-":
        r = a4.sub(x, y)
    elif oper == "*":
        r = a4.mul(x, y)
    else:
        r = a4.dev(x, y)

    print("{} {} {} = {}".format(x, oper, y, r))

x, y = 3, 8

letscook(x, y, "+")
letscook(x, y, "-")
letscook(x, y, "*")
letscook(x, y, "/")
#
# @file __init__.py
#

import arithmetic.add
import arithmetic.sub
import arithmetic.mul
import arithmetic.dev

add = arithmetic.add.add
sub = arithmetic.sub.sub
mul = arithmetic.mul.mul
dev = arithmetic.dev.dev

在__init__.py中, 我們import了arithmetic下的所有子模塊,并在__init__.py中給各個(gè)子模塊的核心功能取了新的名字,作為arithmetic模塊的變量。所以我們?cè)趍ain.py中import了arithmetic模塊之后,就可以直接進(jìn)行使用了。如果你使用from arithmetic import * 語(yǔ)句,那么我們就可以使用add、sub、mul、dev,連a4都省了。

3、init.py的設(shè)計(jì)原則

init.py的原始使命是聲明一個(gè)模塊,所以它可以是一個(gè)空文件。在__init__.py中聲明的所有類型和變量,就是其代表的模塊的類型和變量,第2小節(jié)就是利用這個(gè)原理,為四則運(yùn)算的4個(gè)子模塊聲明了新的變量。我們?cè)诶胈_init__.py時(shí),應(yīng)該遵循如下幾個(gè)原則:

A、不要污染現(xiàn)有的命名空間。模塊一個(gè)目的,是為了避免命名沖突,如果你在種用__init__.py時(shí)違背這個(gè)原則,是反其道而為之,就沒(méi)有必要使用模塊了。

B、利用__init__.py對(duì)外提供類型、變量和接口,對(duì)用戶隱藏各個(gè)子模塊的實(shí)現(xiàn)。一個(gè)模塊的實(shí)現(xiàn)可能非常復(fù)雜,你需要用很多個(gè)文件,甚至很多子模塊來(lái)實(shí)現(xiàn),但用戶可能只需要知道一個(gè)類型和接口。就像我們的arithmetic例子中,用戶只需要知道四則運(yùn)算有add、sub、mul、dev四個(gè)接口,卻并不需要知道它們是怎么實(shí)現(xiàn)的,也不想去了解arithmetic中是如何組織各個(gè)子模塊的。由于各個(gè)子模塊的實(shí)現(xiàn)有可能非常復(fù)雜,而對(duì)外提供的類型和接口有可能非常的簡(jiǎn)單,我們就可以通過(guò)這個(gè)方式來(lái)對(duì)用戶隱藏實(shí)現(xiàn),同時(shí)提供非常方便的使用。

C、只在__init__.py中導(dǎo)入有必要的內(nèi)容,不要做沒(méi)必要的運(yùn)算。像我們的例子,import arithmetic語(yǔ)句會(huì)執(zhí)行__ini__.py中的所有代碼。如果我們?cè)赺_init__.py中做太多事情,每次import都會(huì)有額外的運(yùn)算,會(huì)造成沒(méi)有必要的開(kāi)銷。一句話,init.py只是為了達(dá)到B中所表述的目的,其它事情就不要做啦。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-532742.html

到了這里,關(guān)于Python 中 __init__.py 文件用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Python】Python 包 ② ( 自定義 Python 包 | 導(dǎo)入并調(diào)用自定義 Python 包 | `__init__.py` 定義 `__all__` 變量 )

    【Python】Python 包 ② ( 自定義 Python 包 | 導(dǎo)入并調(diào)用自定義 Python 包 | `__init__.py` 定義 `__all__` 變量 )

    右鍵點(diǎn)擊 PyCharm 中的 Python 工程根目錄 , 選擇 \\\" New / Python Package \\\" 選項(xiàng) , 輸入 Python 包名稱 , 然后點(diǎn)擊回車 , 創(chuàng)建 Python 包 ; 創(chuàng)建完成后 , 自動(dòng)生成了一個(gè) my_package 目錄 , 該目錄下自動(dòng)生成了一個(gè) __init__.py 文件 ; 在命令行中 , 使用 tree /f 命令 , 查看 該 Python 工程的目錄結(jié)構(gòu) : 右

    2024年02月05日
    瀏覽(21)
  • (Python)對(duì)numpy中的argmax用法的理解

    (Python)對(duì)numpy中的argmax用法的理解

    argmax()返回的就是最大數(shù)的索引 argmax()有一個(gè)參數(shù)axis,可以指定函數(shù)返回不同維的最大值。 結(jié)果是 4 。而在python中一維向量只有一個(gè)方向,所以一維情況下axis只能等于0,函數(shù)只會(huì)返回一個(gè)值。 如果對(duì)它進(jìn)行轉(zhuǎn)置,它就會(huì)變成一個(gè)二維矩陣: axis的值大于0 比如說(shuō) 會(huì)報(bào)錯(cuò) nu

    2023年04月24日
    瀏覽(17)
  • 線性代數(shù)-Python-01:向量的基本運(yùn)算 - 手寫Vector及numpy的基本用法

    線性代數(shù)-Python-01:向量的基本運(yùn)算 - 手寫Vector及numpy的基本用法

    https://github.com/Chufeng-Jiang/Python-Linear-Algebra-for-Beginner/tree/main 單位向量叫做 u hat Vector.py _globals.py main_vector.py main_numpy_vector.py

    2024年02月08日
    瀏覽(27)
  • python頭部信息、py頭部信息、python頭信息、py頭信息、py文件頭部

    python頭部信息、py頭部信息、python頭信息、py頭信息、py文件頭部

    Python py文件頭部可指定以下信息: 1. 文件編碼: # -*- coding: utf-8 -*- (指定文件的字符編碼,通常為UTF-8。) 示例: # -*- coding: utf-8 -*- # -*- coding: utf-8 -*- 是在Python源代碼文件的開(kāi)頭添加的注釋,用于指定整個(gè)源代碼文件的編碼格式為UTF-8。這種注釋通常被稱為文件編碼聲明(

    2024年02月16日
    瀏覽(36)
  • python-基礎(chǔ)篇-文件-py腳本

    python-基礎(chǔ)篇-文件-py腳本

    報(bào)以上錯(cuò)誤,需要在根目錄下創(chuàng)建test文件夾

    2024年01月25日
    瀏覽(44)
  • 安裝oneforall遇到的問(wèn)題ImportError: cannot import name ‘sre_parse‘ from ‘re‘(C:\Python311\Lib\re\_init_.py)

    安裝oneforall遇到的問(wèn)題ImportError: cannot import name ‘sre_parse‘ from ‘re‘(C:\Python311\Lib\re\_init_.py)

    昨天試著安裝一下信息收集特別好用的工具oneforall,沒(méi)想到卻遇到了一個(gè)特別大的問(wèn)題 上網(wǎng)查找,卻沒(méi)想到竟然你沒(méi)有一個(gè)答案,要么沒(méi)有正確答案,要么眾說(shuō)紛紜,索性自己排查錯(cuò)誤 根據(jù)報(bào)錯(cuò)提示,說(shuō)的是不能從re中導(dǎo)入sre_parse,而且還和re文件夾下的_init_.py有關(guān) 下面是我

    2023年04月17日
    瀏覽(29)
  • python如何在一個(gè)py文件中調(diào)用另一個(gè)py文件中的方法

    要在一個(gè)Python文件中調(diào)用其他Python文件中的方法,可以使用Python的模塊導(dǎo)入功能。模塊是一個(gè)包含Python定義和語(yǔ)句的文件,可以被其他Python程序?qū)牒褪褂谩?假設(shè)我們有兩個(gè)Python文件,一個(gè)是file1.py,另一個(gè)是file2.py。如果我們想在file1.py中調(diào)用file2.py中的方法,我們可以按照

    2024年02月11日
    瀏覽(18)
  • Python 打包配置文件 setup.py 詳解

    Python 打包配置文件 setup.py 詳解

    在Python開(kāi)發(fā)中,我們經(jīng)常需要將自己的代碼打包成可供其他人使用的庫(kù)或應(yīng)用程序。為了方便用戶安裝和使用,我們需要?jiǎng)?chuàng)建一個(gè)配置文件? setup.py ,用于定義打包的相關(guān)信息和依賴項(xiàng)。本文將詳細(xì)介紹如何編寫? setup.py ?文件,并展示每一步需要做什么。 1.1 為什么需要對(duì)項(xiàng)

    2024年02月03日
    瀏覽(23)
  • Python如何引用其他文件夾下的py文件

    Python引用其他模塊的函數(shù)使用的語(yǔ)法是: from 模塊名 import 函數(shù)名 如果將my_abs()函數(shù)定義保存為abstest.py文件,那么在該文件所在目錄下,啟動(dòng)解釋器,輸入from abstest import my_abs,就可以執(zhí)行my_abs函數(shù)。 那么,如何引用其他文件夾下的py文件 若要引用的包與文件不在同一個(gè)文件夾

    2024年02月16日
    瀏覽(93)
  • Python - PyQT5 - ui文件轉(zhuǎn)為py文件

    Python - PyQT5 - ui文件轉(zhuǎn)為py文件

    在QTdesigner圖形化編輯工具中,有些控件我們是可以直接在編輯界面進(jìn)行編輯的,有些是不可以編輯的,只能通過(guò)Python代碼進(jìn)行編輯,不過(guò)總體來(lái)說(shuō),所有能夠通過(guò)圖形化編輯界面可以編輯的,都可以通過(guò)Python語(yǔ)言實(shí)現(xiàn)控制,這點(diǎn)是毋庸置疑的,不過(guò)為了更加美觀及降級(jí)軟件開(kāi)

    2024年02月05日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包