簡體   English   中英

關於python中字典和函數的初學者問題

[英]beginner question about dictionaries and function in python

我想從我正在做的一門課程中獲得一些幫助來理解以下“更高或更低的游戲再現”代碼。

對於函數定義為: account_name=account["name"]的第二行代碼,我不明白為什么它們命名為 "account" ,其中它們指的是鍵值"name" 當我學習函數時,我認為它說“帳戶”的名稱必須說“數據”,因為這是我們將用來獲取信息的列表的名稱。 同時我們將定義一個新變量,如account_name=data["name"] 但看起來我錯了。 另一件事是為什么我們將一個值傳遞給函數“格式化數據”,該值在代碼中無處作為“帳戶”。

所以想知道當列表名稱完全不同時,函數如何獲取所有必要的信息,它是如何獲取值的。

每一個建議都值得贊賞。

from game_data import data

#function that converts the data to a certain format to display

def format_data(account):

    account_name=account["name"]
  
    account_follower=account["follower_count"]
  
    account_desc=account["description"]
  
    account_country=account["country"]
  
    return f"{account_name} {account_follower} {account_desc} {account_country}"


#randomly chooses one of the dictionaries from the list

account_a=random.choice(data)

account_b=random.choice(data)

if account_a==account_b:
 
    account_b=random.choice(data)

print(f"compare A: {format_data(account_a)}")
print(f"compare B: {format_data(account_b)}")

我的猜測是,鑒於以下行: from game_data import data這使得變量data可用,即list

account_a=random.choice(data) ,然后隨機選擇其中一項。

行: print(f"compare A: {format_data(account_a)}")然后調用format_data()函數向它發送參數account_a

現在format_data()函數第一次使用參數account運行,該參數引用了account_a引用的同一對象。

所有這些函數都是為了挑選dict一些元素並將它們重新格式化為返回的字符串。

這個格式化的字符串然后被上面print(f"compare A: {format_data(account_a)}")出來: print(f"compare A: {format_data(account_a)}")


您感到困惑的是調用函數和參數名稱。

哪里有調用: format_data(account_a) ,python 只是簡單地分配:

account = account_a作為調用的一部分,函數format_data()現在具有參數account

在您給出的示例中,該行:

def format_data(account):

告訴我們有一個方法接受一個參數,在這個例子中被稱為“帳戶”。 參數可以命名為任何名稱(有一些例外),例如“variable”、“foo”或“x”。 然而,給它一個有意義的名字是很有用的,在這種情況下,他們已經使用了“帳戶”。 這個名稱“帳戶”在整個函數中使用,它作用於首先調用該函數的任何傳入的任何內容。

值得注意的是,變量“account”僅在該函數的作用域內。 如果您嘗試在函數之外訪問“帳戶”,則會出現錯誤。 這就是變量作用域的概念出現的地方,如果您在線搜索,您可以閱讀更多相關信息。

如果您選擇為函數使用變量名稱“data”,那將是可能的,但實際上可能會更令人困惑,因為會有兩個變量,都稱為“data”但具有不同的范圍。 一個在函數調用的范圍內,一個在腳本的范圍內。 所以最好不要這樣使用變量名,而是選擇不同的名稱,以避免混淆和意外錯誤。


暫無
暫無

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

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