第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

函數(shù)如何處理python中的全局對象?執(zhí)行順序是什么?

函數(shù)如何處理python中的全局對象?執(zhí)行順序是什么?

MMTTMM 2021-12-21 16:30:36
我在 Python 中相對較新,我在 matplotlib ( https://matplotlib.org/examples/widgets/slider_demo.html ) 中使用以下示例。我已按預期(至少據(jù)我所知)按以下方式修改了上述示例(并且它仍然有效)import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.widgets import Slider, Button, RadioButtonsdef update(val):    amp = samp.val    freq = sfreq.val    l.set_ydata(amp*np.sin(2*np.pi*freq*t))    fig.canvas.draw_idle()def reset(event):    sfreq.reset()    samp.reset()def colorfunc(label):    l.set_color(label)    fig.canvas.draw_idle()if __name__=='__main__':    fig, ax = plt.subplots()    plt.subplots_adjust(left=0.25, bottom=0.25)    t = np.arange(0.0, 1.0, 0.001)    a0 = 5    f0 = 3    s = a0*np.sin(2*np.pi*f0*t)    l, = plt.plot(t, s, lw=2, color='red')    plt.axis([0, 1, -10, 10])    axcolor = 'lightgoldenrodyellow'    axfreq = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor)    axamp = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor)    sfreq = Slider(axfreq, 'Freq', 0.1, 30.0, valinit=f0)    samp = Slider(axamp, 'Amp', 0.1, 10.0, valinit=a0)    sfreq.on_changed(update)    samp.on_changed(update)    resetax = plt.axes([0.8, 0.025, 0.1, 0.04])    button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')    button.on_clicked(reset)    rax = plt.axes([0.025, 0.5, 0.15, 0.15], facecolor=axcolor)    radio = RadioButtons(rax, ('red', 'blue', 'green'), active=0)    radio.on_clicked(colorfunc)    plt.show()從本質(zhì)上講,我所做的只是將功能分開。但是,我無法理解更新函數(shù)如何“知道” samp 和 sfreq 對象是什么?由于它有效,我只看到以下選項,即函數(shù)每次都會查詢“全局”對象的當前值。但是,這在我看來特別容易出錯,因為samp和sfreq可能會在更新執(zhí)行之間發(fā)生變化。所以,問題可能是我什么時候使用sfreq.on_changed(update)并設置事件回調(diào),對全局對象的引用變得固定,或者每次調(diào)用函數(shù)時都會重新評估它們。還是完全發(fā)生了其他事情?
查看完整描述

1 回答

?
慕田峪9158850

TA貢獻1794條經(jīng)驗 獲得超7個贊

讓我們來看看函數(shù)update:


def update(val):

    amp = samp.val

    freq = sfreq.val

    l.set_ydata(amp*np.sin(2*np.pi*freq*t))

    fig.canvas.draw_idle()

每次調(diào)用函數(shù)時,Python 都會搜索名稱,首先在本地命名空間中,其次在全局命名空間中,第三次在 throws 中NameError。名稱val、amp和freq位于函數(shù)的本地命名空間中。Python 會在第一步找到它們。本地命名空間僅在功能調(diào)用持續(xù)時存在。名稱samp,sfreq,l,fig位于全局命名空間。Python 在第二步找到它們。所以每次fig都是你用線創(chuàng)建的同一個對象fig, ax = plt.subplots()。


如果相同的名稱同時位于本地和全局命名空間中,Python 會從本地命名空間中取一個,因為它是第一個查找的地方。


您可以使用locals()和globals()函數(shù)返回字典訪問名稱空間的內(nèi)容{"object_name": <object_itself>, ...}。


查看完整回答
反對 回復 2021-12-21
  • 1 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號