欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 使用 environs 庫(kù)定義環(huán)境變量的方法

 更新時(shí)間:2020年02月25日 08:05:11   作者:崔慶才  
這篇文章主要介紹了Python 使用 environs 庫(kù)來(lái)更好地定義環(huán)境變量,本節(jié)我們以 Python 項(xiàng)目為例,說(shuō)說(shuō)環(huán)境變量的設(shè)置。通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Environs是解析環(huán)境變量的Python庫(kù)。它的開(kāi)發(fā)受envparse啟發(fā),底層使用marshmallow驗(yàn)證并序列化值。

在運(yùn)行一個(gè)項(xiàng)目的時(shí)候,我們經(jīng)常會(huì)遇到設(shè)置不同環(huán)境的需求,如設(shè)置是開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境還是生產(chǎn)環(huán)境,或者在某些設(shè)置里面可能還需要設(shè)置一些變量開(kāi)關(guān),如設(shè)置調(diào)試開(kāi)關(guān)、日志開(kāi)關(guān)、功能開(kāi)關(guān)等等。

這些變量其實(shí)就是在項(xiàng)目運(yùn)行時(shí)我們給項(xiàng)目設(shè)置的一些參數(shù)。這些參數(shù)一般情況來(lái)說(shuō),可以有兩種設(shè)置方法,一種是通過(guò)命令行參數(shù),一種是通過(guò)環(huán)境變量。二者的適用范圍不同,在不同的場(chǎng)景下我們可以選用更方便的方式來(lái)實(shí)現(xiàn)參數(shù)的設(shè)置。

本節(jié)我們以 Python 項(xiàng)目為例,說(shuō)說(shuō)環(huán)境變量的設(shè)置。

設(shè)置和獲取環(huán)境變量

首先,我們先來(lái)了解一下在 Python 項(xiàng)目里面怎樣設(shè)置和獲取變量。

首先讓我們定義一個(gè)最簡(jiǎn)單的 Python 文件,命名為 main.py,內(nèi)容如下:

import os
print(os.environ['VAR1'])

在這里我們導(dǎo)入了 os 模塊,它的 environ 對(duì)象里面就包含了當(dāng)前運(yùn)行狀態(tài)下的所有環(huán)境變量,它其實(shí)是一個(gè) os._Environ 對(duì)象,我們可以通過(guò)類(lèi)似字典取值的方式從中獲取里面包含的環(huán)境變量的值,如代碼所示。

好,接下來(lái)我們什么也不設(shè)置,直接運(yùn)行,看下結(jié)果:

python3 main.py

結(jié)果如下:

raise KeyError(key) from None
KeyError: 'VAR1'

直接拋出來(lái)了一個(gè)錯(cuò)誤,這很正常,我們此時(shí)并沒(méi)有設(shè)置 VAR1 這個(gè)環(huán)境變量,當(dāng)然會(huì)拋出鍵值異常的錯(cuò)誤了。

接下來(lái)我們?cè)诿钚邢逻M(jìn)行設(shè)置,運(yùn)行如下命令:

VAR1=germey python3 main.py

運(yùn)行結(jié)果如下:

germey

可以看到我們?cè)谶\(yùn)行之前,在命令行之前通過(guò)鍵值對(duì)的形式對(duì)環(huán)境變量進(jìn)行設(shè)置,程序就可以獲取到 VAR1 這個(gè)值了,成功打印出來(lái)了 germey。

但這個(gè)環(huán)境變量是永久的嗎?我們這次再運(yùn)行一遍原來(lái)的命令:

python3 main.py

結(jié)果如下:

raise KeyError(key) from None
KeyError: 'VAR1'

嗯,又拋錯(cuò)了。

這說(shuō)明了什么,在命令行的前面加上的這個(gè)環(huán)境變量聲明只能對(duì)當(dāng)前執(zhí)行的命令生效。

好,那既然如此,我難道每次運(yùn)行都要在命令行前面加上這些聲明嗎?那豈不麻煩死了。

當(dāng)然有解決方法,我們使用 export 就可以了。

比如這里,我們執(zhí)行如下命令:

export VAR1=germey

執(zhí)行完這個(gè)命令之后,當(dāng)前運(yùn)行環(huán)境下 VAR1 就被設(shè)置成功了,下面我們運(yùn)行的命令都能獲取到 VAR1 這個(gè)環(huán)境變量了。

下面來(lái)試試,還是執(zhí)行原來(lái)的命令:

python3 main.py

結(jié)果如下:

germey

可以,成功獲取到了 VAR1 這個(gè)變量,后面我們運(yùn)行的每一個(gè)命令就都會(huì)生效了。

但等一下,這個(gè)用了 export 就是永久生效了嗎?

其實(shí)并不是,其實(shí)這個(gè) export 只對(duì)當(dāng)前的命令行運(yùn)行環(huán)境生效,我們只要把命令行關(guān)掉再重新打開(kāi),之前用 export 設(shè)置的環(huán)境變量就都沒(méi)有了。

可以試試,重新打開(kāi)命令行,再次執(zhí)行原來(lái)的命令,就會(huì)又拋出鍵值異常的錯(cuò)誤了。

那又有同學(xué)會(huì)問(wèn)了,我要在每次命令行運(yùn)行時(shí)都想自動(dòng)設(shè)置好環(huán)境變量怎么辦呢?

這個(gè)就更好辦了,只需要把 export 的這些命令加入到 ~/.bashrc 文件里面就好了,每次打開(kāi)命令行的時(shí)候,系統(tǒng)都會(huì)自動(dòng)先執(zhí)行以下這個(gè)腳本里面的命令,這樣環(huán)境變量就設(shè)置成功了。當(dāng)然這里面還有很多不同的文件,如 ~/.bash_profile 、~/.zshrc 、~/.profile、/etc/profile 等等,其加載是有先后順序的,大家感興趣可以去了解下。

好了,扯遠(yuǎn)了,我們現(xiàn)在已經(jīng)了解了如何設(shè)置環(huán)境變量和基本的環(huán)境變量獲取方法了。

更安全的獲取方式

但是上面的這種獲取變量的方式實(shí)際上是非常不友好的,萬(wàn)一這個(gè)環(huán)境變量沒(méi)設(shè)置好,那豈不是就報(bào)錯(cuò)了,這是很不安全的。

所以,下面再介紹幾種比較友好的獲取環(huán)境變量的方式,即使沒(méi)有設(shè)置過(guò),也不會(huì)報(bào)錯(cuò)。

我們可以把中括號(hào)取值的方式改成 get 方法,如下所示:

import os
print(os.environ.get('VAR1'))

這樣就不會(huì)報(bào)錯(cuò)了,如果 VAR1 沒(méi)設(shè)置,會(huì)直接返回 None,而不是直接報(bào)錯(cuò)。

另外我們也可以給 get 方法傳入第二個(gè)參數(shù),表示默認(rèn)值,如下所示:

import os
print(os.environ.get('VAR1', 'germey'))

這樣即使我們?nèi)绻O(shè)置過(guò) VAR1,他就會(huì)用 germey 這個(gè)字符串代替,這就完成了默認(rèn)環(huán)境變量的設(shè)置。

下面還有幾種獲取環(huán)境變量的方式,總結(jié)如下:

import os
print(os.getenv('VAR1', 'germey'))

這個(gè)方式比上面的寫(xiě)法更簡(jiǎn)單,功能完全一致。

弊端

但其實(shí)上面的方法有一個(gè)不方便的地方,如果我們想要設(shè)置非字符串類(lèi)型的環(huán)境變量怎么辦呢?比如設(shè)置 int 類(lèi)型、float 類(lèi)型、list 類(lèi)型,可能我們的寫(xiě)法就會(huì)變成這個(gè)樣子:

import os
import json

VAR1 = int(os.getenv('VAR1', 1))
VAR2 = float(os.getenv('VAR2', 5.5))
VAR3 = json.loads(os.getenv('VAR3'))

然后設(shè)置環(huán)境變量的時(shí)候就變成這樣子:

export VAR1=1
export VAR2=2.3
export VAR3='["1", "2"]'

這樣才能成功獲取到結(jié)果,打印出來(lái)結(jié)果如下:

1
2.3
['1', '2']

不過(guò)看下這個(gè),寫(xiě)法也太奇葩了吧,又是類(lèi)型轉(zhuǎn)換,又是 json 解析什么的,有沒(méi)有更好的方法來(lái)設(shè)置。

environs

當(dāng)然有的,下面推薦一個(gè) environs 庫(kù),利用它我們可以輕松地設(shè)置各種類(lèi)型的環(huán)境變量。

這是一個(gè)第三方庫(kù),可以通過(guò) pip 來(lái)安裝:

pip3 install environs

好,安裝之后,我們?cè)賮?lái)體驗(yàn)一下使用 environs 來(lái)設(shè)置環(huán)境變量的方式。

from environs import Env

env = Env()
VAR1 = env.int('VAR1', 1)
VAR2 = env.float('VAR2', 5.5)
VAR3 = env.list('VAR3')

這里 environs 直接提供了 int、float、list 等方法,我們就不用再去進(jìn)行類(lèi)型轉(zhuǎn)換了。

與此同時(shí),設(shè)置環(huán)境變量的方式也有所變化:

export VAR1=1
export VAR2=2.3
export VAR3=1,2

這里 VAR3 是列表,我們可以直接用逗號(hào)分隔開(kāi)來(lái)。

打印結(jié)果如下:

1
2.3
['1', '2']

官方示例

下面我們?cè)倏匆粋€(gè)官方示例,這里示例了一些常見(jiàn)的用法。

首先我們來(lái)定義一些環(huán)境變量,如下:

export GITHUB_USER=sloria
export MAX_CONNECTIONS=100
export SHIP_DATE='1984-06-25'
export TTL=42
export ENABLE_LOGIN=true
export GITHUB_REPOS=webargs,konch,ped
export COORDINATES=23.3,50.0
export LOG_LEVEL=DEBUG

這里有字符串、有日期、有日志級(jí)別、有字符串列表、有浮點(diǎn)數(shù)列表、有布爾。

我們來(lái)看下怎么獲取,寫(xiě)法如下:

from environs import Env

env = Env()
env.read_env() # read .env file, if it exists
# required variables
gh_user = env("GITHUB_USER") # => 'sloria'
secret = env("SECRET") # => raises error if not set

# casting
max_connections = env.int("MAX_CONNECTIONS") # => 100
ship_date = env.date("SHIP_DATE") # => datetime.date(1984, 6, 25)
ttl = env.timedelta("TTL") # => datetime.timedelta(0, 42)
log_level = env.log_level("LOG_LEVEL") # => logging.DEBUG

# providing a default value
enable_login = env.bool("ENABLE_LOGIN", False) # => True
enable_feature_x = env.bool("ENABLE_FEATURE_X", False) # => False

# parsing lists
gh_repos = env.list("GITHUB_REPOS") # => ['webargs', 'konch', 'ped']
coords = env.list("COORDINATES", subcast=float) # => [23.3, 50.0]

通過(guò)觀察代碼可以發(fā)現(xiàn)它提供了這些功能:

  • 通過(guò) env 可以設(shè)置必需定義的變量,如果沒(méi)有定義,則會(huì)報(bào)錯(cuò)。
  • 通過(guò) date、timedelta 方法可以對(duì)日期或時(shí)間進(jìn)行轉(zhuǎn)化,轉(zhuǎn)成 datetime.date 或 timedelta 類(lèi)型。
  • 通過(guò) log_level 方法可以對(duì)日志級(jí)別進(jìn)行轉(zhuǎn)化,轉(zhuǎn)成 logging 里的日志級(jí)別定義。
  • 通過(guò) bool 方法可以對(duì)布爾類(lèi)型變量進(jìn)行轉(zhuǎn)化。
  • 通過(guò) list 方法可以對(duì)逗號(hào)分隔的內(nèi)容進(jìn)行 list 轉(zhuǎn)化,并可以通過(guò) subcast 方法對(duì) list 的每個(gè)元素進(jìn)行類(lèi)型轉(zhuǎn)化。

可以說(shuō)有了這些方法,定義各種類(lèi)型的變量都不再是問(wèn)題了。

支持類(lèi)型

總的來(lái)說(shuō),environs 支持的轉(zhuǎn)化類(lèi)型有這么多:

env.str
env.bool
env.int
env.float
env.decimal
env.list (accepts optional subcast keyword argument)
env.dict (accepts optional subcast keyword argument)
env.json
env.datetime
env.date
env.timedelta (assumes value is an integer in seconds)
env.url
env.uuid
env.log_level
env.path (casts to a pathlib.Path)

這里 list、dict、json、date、url、uuid、path 個(gè)人認(rèn)為都還是比較有用的,另外 list、dict 方法還有一個(gè) subcast 方法可以對(duì)元素內(nèi)容進(jìn)行轉(zhuǎn)化。

對(duì)于 dict、url、date、uuid、path 這里我們來(lái)補(bǔ)充說(shuō)明一下。

下面我們定義這些類(lèi)型的環(huán)境變量:

export VAR_DICT=name=germey,age=25
export VAR_JSON='{"name": "germey", "age": 25}'
export VAR_URL=https://cuiqingcai.com
export VAR_UUID=762c8d53-5860-4d5d-81bc-210bf2663d0e
export VAR_PATH=/var/py/env

需要注意的是,DICT 的解析,需要傳入的是逗號(hào)分隔的鍵值對(duì),JSON 的解析是需要傳入序列化的字符串。

解析寫(xiě)法如下:

from environs import Env

env = Env()
VAR_DICT = env.dict('VAR_DICT')
print(type(VAR_DICT), VAR_DICT)

VAR_JSON = env.json('VAR_JSON')
print(type(VAR_JSON), VAR_JSON)

VAR_URL = env.url('VAR_URL')
print(type(VAR_URL), VAR_URL)

VAR_UUID = env.uuid('VAR_UUID')
print(type(VAR_UUID), VAR_UUID)

VAR_PATH = env.path('VAR_PATH')
print(type(VAR_PATH), VAR_PATH)

運(yùn)行結(jié)果如下:

<class 'dict'> {'name': 'germey', 'age': '25'}
<class 'dict'> {'name': 'germey', 'age': 25}
<class 'urllib.parse.ParseResult'> ParseResult(scheme='https', netloc='cuiqingcai.com', path='', params='', query='', fragment='')
<class 'uuid.UUID'> 762c8d53-5860-4d5d-81bc-210bf2663d0e
<class 'pathlib.PosixPath'> /var/py/env

可以看到,它分別給我們轉(zhuǎn)化成了 dict、dict、ParseResult、UUID、PosixPath 類(lèi)型了。

在代碼中直接使用即可。

文件讀取

如果我們的一些環(huán)境變量是定義在文件中的,environs 還可以進(jìn)行讀取和加載,默認(rèn)會(huì)讀取本地當(dāng)前運(yùn)行目錄下的 .env 文件。

示例如下:

from environs import Env

env = Env()
env.read_env()
APP_DEBUG = env.bool('APP_DEBUG')
APP_ENV = env.str('APP_ENV')
print(APP_DEBUG)
print(APP_ENV)

下面我們?cè)?.env 文件中寫(xiě)入如下內(nèi)容:

APP_DEBUG=false
APP_ENV=prod

運(yùn)行結(jié)果如下:

False
prod

沒(méi)問(wèn)題,成功讀取。

當(dāng)然我們也可以自定義讀取的文件,如 .env.test 文件,內(nèi)容如下:

APP_DEBUG=false
APP_ENV=test

代碼則可以這么定義:

from environs import Env

env = Env()
env.read_env(path='.env.test')
APP_DEBUG = env.bool('APP_DEBUG')
APP_ENV = env.str('APP_ENV')

這里就通過(guò) path 傳入了定義環(huán)境變量的文件路徑即可。

前綴處理

environs 還支持前綴處理,一般來(lái)說(shuō)我們定義一些環(huán)境變量,如數(shù)據(jù)庫(kù)的連接,可能有 host、port、password 等,但在定義環(huán)境變量的時(shí)候往往會(huì)加上對(duì)應(yīng)的前綴,如 MYSQL_HOST、MYSQL_PORT、MYSQL_PASSWORD 等,但在解析時(shí),我們可以根據(jù)前綴進(jìn)行分組處理,見(jiàn)下面的示例:

# export MYAPP_HOST=lolcathost
# export MYAPP_PORT=3000
 
with env.prefixed("MYAPP_"):
 host = env("HOST", "localhost") # => 'lolcathost'
 port = env.int("PORT", 5000) # => 3000
 
# nested prefixes are also supported:
 
# export MYAPP_DB_HOST=lolcathost
# export MYAPP_DB_PORT=10101
 
with env.prefixed("MYAPP_"):
 with env.prefixed("DB_"):
  db_host = env("HOST", "lolcathost")
  db_port = env.int("PORT", 10101)

可以看到這里通過(guò) with 和 priefixed 方法組合使用即可實(shí)現(xiàn)分區(qū)處理,這樣在每個(gè)分組下再賦值到一個(gè)字典里面即可。

合法性驗(yàn)證

有些環(huán)境變量的傳入是不可預(yù)知的,如果傳入一些非法的環(huán)境變量很可能導(dǎo)致一些難以預(yù)料的問(wèn)題。比如說(shuō)一些可執(zhí)行的命令,通過(guò)環(huán)境變量傳進(jìn)來(lái),如果是危險(xiǎn)命令,那么會(huì)非常危險(xiǎn)。

所以在某些情況下我們需要驗(yàn)證傳入的環(huán)境變量的有效性,看下面的例子:

# export TTL=-2
# export NODE_ENV='invalid'
# export EMAIL='^_^'
 
from environs import Env
from marshmallow.validate import OneOf, Length, Email
 
env = Env()
 
# simple validator
env.int("TTL", validate=lambda n: n > 0)
# => Environment variable "TTL" invalid: ['Invalid value.']
 
# using marshmallow validators
env.str(
 "NODE_ENV",
 validate=OneOf(
  ["production", "development"], error="NODE_ENV must be one of: {choices}"
 ),
)
# => Environment variable "NODE_ENV" invalid: ['NODE_ENV must be one of: production, development']
 
# multiple validators
env.str("EMAIL", validate=[Length(min=4), Email()])
# => Environment variable "EMAIL" invalid: ['Shorter than minimum length 4.', 'Not a valid email address.']

在這里,我們通過(guò) validate 方法,并傳入一些判斷條件。如 NODE_ENV 只允許傳入 production 和 develpment 其中之一;EMAIL 必須符合 email 的格式。

這里依賴(lài)于 marshmallow 這個(gè)庫(kù),里面有很多驗(yàn)證條件,大家可以了解下。

如果不符合條件的,會(huì)直接拋錯(cuò),例如:

marshmallow.exceptions.ValidationError: ['Invalid value.']

關(guān)于 marshmallow 庫(kù)的用法,大家可以參考:https://marshmallow.readthedocs.io/en/stable/,后面我也抽空寫(xiě)一下介紹下。

最后再附一點(diǎn)我平時(shí)定義環(huán)境變量的一些常見(jiàn)寫(xiě)法,如:

import platform
from os.path import dirname, abspath, join
from environs import Env
from loguru import logger
 
env = Env()
env.read_env()
 
# definition of flags
IS_WINDOWS = platform.system().lower() == 'windows'
 
# definition of dirs
ROOT_DIR = dirname(dirname(abspath(__file__)))
LOG_DIR = join(ROOT_DIR, env.str('LOG_DIR', 'logs'))
 
# definition of environments
DEV_MODE, TEST_MODE, PROD_MODE = 'dev', 'test', 'prod'
APP_ENV = env.str('APP_ENV', DEV_MODE).lower()
APP_DEBUG = env.bool('APP_DEBUG', True if APP_ENV == DEV_MODE else False)
APP_DEV = IS_DEV = APP_ENV == DEV_MODE
APP_PROD = IS_PROD = APP_DEV == PROD_MODE
APP_TEST = IS_TEST = APP_ENV = TEST_MODE
 
# redis host
REDIS_HOST = env.str('REDIS_HOST', '127.0.0.1')
# redis port
REDIS_PORT = env.int('REDIS_PORT', 6379)
# redis password, if no password, set it to None
REDIS_PASSWORD = env.str('REDIS_PASSWORD', None)
# redis connection string, like redis://[password]@host:port or rediss://[password]@host:port
REDIS_CONNECTION_STRING = env.str('REDIS_CONNECTION_STRING', None)
 
# definition of api
API_HOST = env.str('API_HOST', '0.0.0.0')
API_PORT = env.int('API_PORT', 5555)
API_THREADED = env.bool('API_THREADED', True)
 
# definition of flags
ENABLE_TESTER = env.bool('ENABLE_TESTER', True)
ENABLE_GETTER = env.bool('ENABLE_GETTER', True)
ENABLE_SERVER = env.bool('ENABLE_SERVER', True)
 
# logger
logger.add(env.str('LOG_RUNTIME_FILE', 'runtime.log'), level='DEBUG', rotation='1 week', retention='20 days')
logger.add(env.str('LOG_ERROR_FILE', 'error.log'), level='ERROR', rotation='1 week')

這里定義了一些開(kāi)發(fā)環(huán)境、日志路徑、數(shù)據(jù)庫(kù)連接、API 設(shè)置、開(kāi)關(guān)設(shè)置等等,是從我之前寫(xiě)的一個(gè)代理池項(xiàng)目拿來(lái)的,大家可以參考:https://github.com/Python3WebSpider/ProxyPool。

總結(jié)

到此這篇關(guān)于Python 使用 environs 庫(kù)來(lái)更好地定義環(huán)境變量的文章就介紹到這了,更多相關(guān)python 使用 environs 庫(kù)定義環(huán)境變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Flask Web開(kāi)發(fā)入門(mén)之文件上傳(八)

    Flask Web開(kāi)發(fā)入門(mén)之文件上傳(八)

    這篇文章主要為大家詳細(xì)介紹了Flask Web開(kāi)發(fā)入門(mén)之文件上傳的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python簡(jiǎn)單的三元一次方程求解實(shí)例

    python簡(jiǎn)單的三元一次方程求解實(shí)例

    這篇文章主要介紹了python簡(jiǎn)單的三元一次方程求解實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python3啟動(dòng)web服務(wù)引發(fā)的一系列問(wèn)題匯總

    python3啟動(dòng)web服務(wù)引發(fā)的一系列問(wèn)題匯總

    由于行內(nèi)交付的機(jī)器已自帶python3 ,沒(méi)有采取自行安裝python3,但是運(yùn)行python腳本時(shí)報(bào)沒(méi)有tornado module,遇到這樣的問(wèn)題如何處理呢,下面小編給大家介紹下python3啟動(dòng)web服務(wù)引發(fā)的一系列問(wèn)題匯總,感興趣的朋友一起看看吧
    2023-02-02
  • 使用PM2+nginx部署python項(xiàng)目的方法示例

    使用PM2+nginx部署python項(xiàng)目的方法示例

    這篇文章主要介紹了使用PM2+nginx部署python項(xiàng)目的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Django中的AutoField字段使用

    Django中的AutoField字段使用

    這篇文章主要介紹了Django中的AutoField字段使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • Python安裝官方whl包和tar.gz包的方法(推薦)

    Python安裝官方whl包和tar.gz包的方法(推薦)

    下面小編就為大家?guī)?lái)一篇Python安裝官方whl包和tar.gz包的方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Python中強(qiáng)大的命令行庫(kù)click入門(mén)教程

    Python中強(qiáng)大的命令行庫(kù)click入門(mén)教程

    click是Python的一個(gè)命令行工具,極其好用。不信?一試便知。下面這篇文章主要給大家介紹了Python中強(qiáng)大的命令行庫(kù)click,需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    2016-12-12
  • PyQt5基本控件使用詳解:單選按鈕、復(fù)選框、下拉框

    PyQt5基本控件使用詳解:單選按鈕、復(fù)選框、下拉框

    這篇文章主要介紹了PyQt5基本控件使用:單選按鈕、復(fù)選框、下拉框,本文中的內(nèi)容和實(shí)例也基本回答了開(kāi)篇提到的問(wèn)題。需要的朋友可以參考下
    2019-08-08
  • Python使用matplotlib模塊繪制圖像并設(shè)置標(biāo)題與坐標(biāo)軸等信息示例

    Python使用matplotlib模塊繪制圖像并設(shè)置標(biāo)題與坐標(biāo)軸等信息示例

    這篇文章主要介紹了Python使用matplotlib模塊繪制圖像并設(shè)置標(biāo)題與坐標(biāo)軸等信息,結(jié)合實(shí)例形式分析了Python中matplotlib模塊進(jìn)行坐標(biāo)系圖形繪制的相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • python容器的內(nèi)置通用函數(shù)操作

    python容器的內(nèi)置通用函數(shù)操作

    容器是一種把多個(gè)元素組織在一起的數(shù)據(jù)結(jié)構(gòu),容器中的元素可以逐個(gè)地迭代獲取,可以用in, not in關(guān)鍵字判斷元素是否包含在容器中。接下來(lái)通過(guò)本文給大家介紹python容器的內(nèi)置通用函數(shù)操作,感興趣的朋友一起看看吧
    2021-11-11

最新評(píng)論