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

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

Python中是否有一個(gè)函數(shù)與等于運(yùn)算符做同樣的事情

Python中是否有一個(gè)函數(shù)與等于運(yùn)算符做同樣的事情

手掌心 2023-04-25 16:57:00
由于我目前對 Python 語法的理解,我遇到了一個(gè)問題,我需要將變量設(shè)置為一個(gè)值但不使用任何運(yùn)算符。我必須使用函數(shù)。考慮這個(gè)場景class Senario:    x: str = ''    y: str = ''        set_global_variable(self, set_variable, val: str)        # some verification code and modifications        set_variable(val)    set_x(self, val: str)        self.set_global_variable(setX, val)    set_x(self, val: str)        self.set_global_variable(lambda new_x: self.x = new_x, val)這樣設(shè)置變量的好處是,添加一個(gè)新的變量不需要復(fù)制粘貼一堆新的setter方法的驗(yàn)證碼。它更加模塊化。問題是這樣的程序不會運(yùn)行,因?yàn)?lambda 不能使用運(yùn)算符。錯(cuò)誤是self.set_global_variable(lambda new_x: self.x--> =<--new_x, val)這不是正確的語法。為了運(yùn)行這樣的程序,我需要某種 equals 方法來完成與 = 運(yùn)算符完全相同的事情。該實(shí)現(xiàn)將按如下方式工作。set_x(self, val: str)    self.set_global_variable(lambda new_x: self.x.equals(new_x), val)如果僅針對字符串,Python 中是否有內(nèi)置方法可以執(zhí)行此操作?如果沒有,是否可以輕松編寫一個(gè)方法?一個(gè)可以將變量作為輸入并將該確切變量設(shè)置為新值的方法,而不是它的本地副本?
查看完整描述

3 回答

?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

最簡單的解決方案可能是使用執(zhí)行分配的本地函數(shù),如下所示:


def set_x(self, val: str):

? ? def _set_variable(new_x):

? ? ? ? self.x = new_x

? ? self.set_global_variable(_set_variable, val)

但是,如果你想使用 lambda 表達(dá)式,你可以嘗試使用setattrpython 的內(nèi)置函數(shù),它可以滿足你的要求:


def set_x(self, val: str):

? ? self.set_global_variable(lambda new_x: setattr(self, "x", new_x), val)

更通用的解決方案可能是將字段名稱傳遞給set_global_variable并用于setattr執(zhí)行分配,如下所示:


def set_global_variable(self, variable_name, val):

? ? # some verification code and modifications

? ? setattr(self, variable_name, val)


def set_x(self, val: str):

? ? set_global_variable("x", val)


查看完整回答
反對 回復(fù) 2023-04-25
?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

因此,您使用的術(shù)語global不正確,您只是在嘗試動態(tài)設(shè)置屬性。這可以通過 來完成setattr,但是,您實(shí)際上要完成的是封裝 setter 邏輯。Python 有描述符協(xié)議。以下是如何在 Python 中執(zhí)行類似的操作:


class AlwaysCapitalized:

    def __get__(self, instance, owner=None):

        return getattr(instance, self.name)

    def __set__(self, instance, value):

        setattr(instance, self.name, value.capitalize())

    def __set_name__(self, owner, name):

        self.name = f"_{name}"


class MemberName:


    first_name = AlwaysCapitalized()

    last_name = AlwaysCapitalized()


    def __init__(self, first, last):

        self.first_name = first

        self.last_name = last


name  = MemberName("juan", "arrivillaga")  

print(f"Hello, {name.first_name} {name.last_name}!")

輸出:


Hello, Juan Arrivillaga!

請注意,這可以在各種類中重復(fù)使用,如果您想模塊化,它非常靈活。看看客戶端代碼有多簡潔,如果你想用你的邏輯設(shè)置一個(gè)屬性,你就這樣做self.attribute = value,同樣,如果你想獲取一個(gè)屬性,你就這樣做self.attribute。沒有丑陋set_attribute(),get_attribute()到處都是


請注意,property對象只是描述符,裝飾器也是classmethod如此staticmethod。實(shí)際上,函數(shù)對象只是描述符,其__get__方法本質(zhì)上部分地將實(shí)例作為第一個(gè)參數(shù)應(yīng)用于自身。


查看完整回答
反對 回復(fù) 2023-04-25
?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

您可以global像這樣使用它:


def myfunc(x, y):

  exec(f"global {x}”)

  exec(f"{x} = {y}")


myfunc("x", "great")


print("Python is " + x)

但是,我看到您正在創(chuàng)建一個(gè)使該屬性成為y全局值的設(shè)置器,這意味著您只能有 1 個(gè)(有意義的)對象操作場景類型。


查看完整回答
反對 回復(fù) 2023-04-25
  • 3 回答
  • 0 關(guān)注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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