本篇介紹Python 全域變數用法與範例,Python 全域變數要使用global 這個關鍵字,先來說說區域變數與全域變數的差別,區域變數(local variable)是該 ... ... <看更多>
「python global variable用法」的推薦目錄:
python global variable用法 在 doudoudzj/python-global-variable - GitHub 的推薦與評價
Contribute to doudoudzj/python-global-variable development by creating an ... 是在定义一个新变量并且赋值,不过global 就可以解决这个问题。 global 的基础用法. ... <看更多>
python global variable用法 在 【C 語言入門】19.4 - 全域變數與靜態(static) 區域變數 - YouTube 的推薦與評價
How Long Does It Take to Learn Python? (And Get a Job). Afternerd ... ... <看更多>
python global variable用法 在 Re: [問題] 限制某個function只能被叫到一次- 看板Python 的推薦與評價
※ 引述《MaR1nlolz (mumimumi)》之銘言:
: 最近遇到個問題,請問一下各位,
: 當執行python app.py時,不論MongoClient()被呼叫幾次,我希望create()只被呼叫一次
: ,
: 我目前的做法是透過global variable來判斷
: create()是否被呼叫過,不過global variable用法幾乎都不太建議使用,
: 避免被其他地方改到,想請問各位有沒有比較好的做法,以下是我的程式碼,謝謝
我覺得根本問題是你的使用方式出了問題:
1. instance本質上也不應該global使用
2. 你這段Code裡面有過多不必要的包裝
先跳過問題1。針對問題2,你會發現這裡的isInit == False幾乎等價於
instance is None(除非很例外的情況導致MongoClient傳回None),也就是這是多
餘的邏輯包裝。最簡單的方式是:
--- mongo.py
from pymongo import MongoClient
instance = None
def create():
if instance is None:
instance = MongoClient(
'mongo://127.0.0.1:27017',
maxPoolSize=10
)
--- app.py
import mongo
mongo.create() # 之後拿 mongo.instance 來運用
mongo.create() # 重複呼叫create()會因為instance已經不是None而不會做任何事
事實上我想不太到為什麼會導致重複create的狀態,照理說程式應該開頭create
一次後就只用create好的實體,除非斷線否則再也不會呼叫第二次create才對。你如
果把問題一也解決,就會發現連create(或者說整個mongo.py)都是多餘包裝。
: --- mongo.py
: instance = None
: isInit = False
: def create():
: mogno = MongoClient('mongo://127.0.0.1:27017', maxPoolSize=10)
: return mogno
: def mongoClient():
: global isInit, instance
: if isInit == False:
: instance = create()
: isInit = True
: --- app.py
: import mongoClient
: mongoClient()
: mongoClient()
: mongoClient()
--
「傳說的最後,魔王總是被勇者封印。但勇者會逝去、封印會衰弱,魔王卻永遠
不滅。傳說呢?傳說持續著。只是,變質了。所以對於傳說而言,只有反覆無常的自
己是主角,而魔王只是配角。勇者?勇者不過是消耗品罷了,封印則什麼也不是。妳
好不容易有機會當上配角,怎麼走回頭路想成為消耗品?妳早晚會什麼也不是的。」
--星.幻.夢的傳說
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 8.37.43.216 (美國)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1615862895.A.983.html
※ 編輯: ddavid (8.37.43.216 美國), 03/16/2021 13:38:37
... <看更多>