簡體   English   中英

當變量指向 Python 中的 object 時,如何打印變量名

[英]How do you print the variable name when the variable points to an object in Python

我是 python 和一般編碼的新手。 在下面的代碼中,我如何讓“turn”打印“june”或“july”而不是 <turtle.Turtle object at 0x0405D730>

def main():
    wn = turtle.Screen() #Creates a screen
    #Define your turtles here
    june = turtle.Turtle()
    july = turtle.Turtle()
    june.shape('turtle')
    july.shape('turtle')
    june.color('blue')
    july.color('red')
    july.goto(0, 50) #move second turtle to a different starting location

    turtleTurn()
    turn = turtleTurn()
    if turn == 0:
        turn = june
    else:
        turn = july


    while isInScreen(wn, turn) and sameSpot(june, july):
        if turn == june:
            turn = july
        else:
            turn = june

        turtleMove(turn)
        if isInScreen(wn, turn) == False:
            print("and the winning is ", turn)


    wn.exitonclick()

main()

您可以在每個 Turtle 中存儲一個名稱(在創建它之后)並參考 name 屬性來打印它:

june.name = 'june'
july.name = 'july'
...
print("and the winning is ", turn.name)

您可以通過多種方式做到這一點,其中之一是:

my_var = "sss"

my_var_name = [ k for k,v in locals().items() if v == my_var][0]

print("Variable name is :   ", my_var_name)

在這里,我們創建了一個病毒“my_var”,當我們聲明一個病毒時,他被保存在本地病毒中,你可以使用“locals().items()”來訪問它們,它會返回所有這些。 並且通過 for you 對它們進行迭代,當你找到病毒的 v == 時,你會在“my_var_name”中得到它。

你不能得到變量名本身,至少不容易。 請參閱此處的說明:將變量的名稱作為字符串獲取——kindall 的回答

相反,您可以比較 object 身份並手動打印其名稱:

print("and the winning is", 'july' if turn is july else 'june')

盡管物有所值,但最通用的解決方案是使用字典。 請參閱如何創建可變數量的變量? 例如,從這樣的事情開始:

turtles = {month: turtle.Turtle() for month in ['june', 'july']}

您只需要使用來自python-varname的值包裝器來包裝junejuly月:

from varname import Wrapper

def main():
    wn = turtle.Screen() #Creates a screen
    #Define your turtles here
    june = Wrapper(turtle.Turtle()) # <- then, use june.value to access turtle 
    july = Wrapper(turtle.Turtle()) # <- and june/july.name to access the name
    june.value.shape('turtle')
    july.value.shape('turtle')
    june.value.color('blue')
    july.value.color('red')
    july.value.goto(0, 50) #move second turtle to a different starting location

    turtleTurn()
    turn = turtleTurn()
    if turn == 0:
        turn = june
    else:
        turn = july


    while isInScreen(wn, turn.value) and sameSpot(june.value, july.value):
        if turn.value == june.value:
            turn = july
        else:
            turn = june

        turtleMove(turn.value)
        if isInScreen(wn, turn.value) == False:
            print("and the winning is ", turn.name)


    wn.exitonclick()

main()

package 托管在https://github.com/pwwang/python-varname上。

我是 package 的作者。 如果您對使用它有任何疑問,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM