【问题标题】:beginner question about dictionaries and function in python关于python中字典和函数的初学者问题
【发布时间】:2021-10-12 09:49:10
【问题描述】:

我想获得一些帮助,以了解以下代码“从我正在做的一门课程中复制更高或更低的游戏。

对于函数定义为的第二行代码:account_name=account["name"] 我不明白为什么他们将其命名为“帐户”,其中他们指的是键值"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)}")

【问题讨论】:

  • account_name=data["name"] 没有调用函数。该行只是将data["name"] 的内容分配给account_name
  • 你指的是什么list
  • data = [ { 'name': 'Instagram', 'follower_count': 346, 'description': '社交媒体平台', 'country': 'United States' }, { 'name' : 'Cristiano Ronaldo', 'follower_count': 215, 'description': 'Footballer', 'country': 'Portugal' 这就是列表,老实说,当涉及到函数时,我有点困惑,有时你会传递一个值当您在原始代码中定义它时,您只需留空就没有行,例如 account_name=data["name"] 他们有 account_name=account["name"]

标签: python function dictionary


【解决方案1】:

我的猜测是,鉴于行: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)}")


你感到困惑的是调用函数和参数的名称。

哪里有调用:format_data(account_a),python 只是简单地做一个赋值:

account = account_a 作为调用的一部分,函数format_data() 现在具有参数account

【讨论】:

  • 那么“帐户”参数可以命名为其他名称吗?像“鸟”?
  • 是的,完全正确。你应该自己试试这个:def format_data(bird): account_name=bird["name"] ...
  • 谢谢!我很困惑,但现在我看到即使我只是将帐户更改为小鸟它仍在工作,更容易想象哪条线路在做什么。现在我只需要习惯它:)
【解决方案2】:

在您给出的示例中,行:

def format_data(account):

告诉我们有一个方法带有一个参数,在这个例子中叫做“account”。参数可以命名为任何名称(有一些例外),例如“variable”、“foo”或“x”。然而,给它一个有意义的名字是很有用的,在这种情况下,他们选择了“帐户”。这个名称“帐户”在整个函数中使用,它作用于首先由调用该函数的任何东西传入的任何内容。

值得注意的是,变量“account”仅在该函数的范围内。如果您尝试在函数之外访问“帐户”,您会收到错误消息。这就是变量作用域的想法出现的地方,如果您在线搜索,您可以了解更多信息。

如果您选择为函数使用变量名“data”,这将是可能的,但实际上可能会更加混乱,因为会有两个变量,都称为“data”,但范围不同。一个在函数调用的范围内,一个在脚本的范围内。所以最好不要这样使用变量名,而是选择不同的名字,避免混淆和误报。


【讨论】:

  • 谢谢,这有点令人困惑,因为英语不是我的母语。我会尝试做一些只做excersizes的功能,所以我习惯了声明等:)
  • 没关系,这些东西并不总是直观的,值得一试。查找变量范围,它应该可以帮助您了解这些东西
猜你喜欢
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2011-01-12
  • 2018-01-08
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多