杰瑞科技汇

Python2与Python3的get方法有何区别?

  • 字典 .get() 方法:在 Python 2 和 Python 3 中,行为完全一致,这是最重要的一点,如果你只是想知道字典的 .get() 方法,那么它在这两个版本里没有任何区别。
  • 输入函数 input() vs raw_input():这是“获取”用户输入时最关键的区别,Python 3 移除了 raw_input(),并将其功能整合到了 input() 中。
  • 网络请求库 requests.get():这是第三方库,与 Python 版本无关,但它是现代 Python 中“获取”网络资源最常用的方式。

字典的 .get(key, default) 方法

这是 get 最常见的含义,它用于从字典中安全地获取一个键的值,如果键不存在,则返回一个默认值,而不会像 dict[key] 那样抛出 KeyError 异常。

Python2与Python3的get方法有何区别?-图1
(图片来源网络,侵删)

行为:完全一致

在 Python 2 和 Python 3 中,.get() 方法的语法和行为都是完全相同的。

语法: dict.get(key, default=None)

  • key: 要查找的键。
  • default (可选): 如果键不存在,则返回此默认值,如果未提供默认值,则默认为 None

示例代码 (在 Python 2 和 Python 3 中运行结果相同):

# 创建一个字典
my_dict = {'name': 'Alice', 'age': 30}
# 1. 获取存在的键
print(my_dict.get('name'))  # 输出: Alice
# 2. 获取不存在的键,不提供默认值
print(my_dict.get('city'))  # 输出: None
# 3. 获取不存在的键,提供默认值
print(my_dict.get('city', 'Unknown'))  # 输出: Unknown
# 4. 对比使用 [] 和 get() 的区别
try:
    print(my_dict['city'])  # 这会抛出 KeyError
except KeyError as e:
    print("使用 [] 访问不存在的键会出错: %s" % e)
# 使用 get() 则不会出错
print("使用 get() 访问不存在的键是安全的: %s" % my_dict.get('city'))

如果你正在讨论的是字典的 .get() 方法,Python 2 和 Python 3 没有任何区别,这是为了保证核心数据结构的向后兼容性。

Python2与Python3的get方法有何区别?-图2
(图片来源网络,侵删)

获取用户输入 (input() vs raw_input())

这是 Python 2 和 Python 3 在“获取”用户输入方面最显著的区别。

Python 2

Python 2 有两个获取用户输入的函数:

  1. raw_input():

    • 功能: 从标准输入读取一行,并将其作为一个字符串返回。
    • 这是最常用、最安全的方式,因为它不会对输入内容进行任何解释。
    • 示例:
      # Python 2
      name = raw_input("Please enter your name: ")
      print(type(name))  # <type 'str'>
      print("Hello, " + name)
  2. input():

    Python2与Python3的get方法有何区别?-图3
    (图片来源网络,侵删)
    • 功能: 从标准输入读取一行,并将其作为Python 表达式来求值。

    • 非常危险! 如果用户输入的不是合法的 Python 代码(输入一个字符串但没有引号),程序就会崩溃。

    • 示例:

      # Python 2
      # 如果用户输入 "10"
      num = input("Enter a number: ")
      print(type(num))  # <type 'int'>
      # 如果用户输入 "hello" (没有引号)
      # val = input("Enter a string: ") # 这会直接报错: NameError: name 'hello' is not defined

Python 3

Python 3 进行了简化,移除了 raw_input(),并将其功能赋予了 input()

  1. input():

    • 功能: 从标准输入读取一行,并将其作为一个字符串返回。

    • 行为等同于 Python 2 的 raw_input()

    • 示例:

      # Python 3
      name = input("Please enter your name: ")
      print(type(name))  # <type 'str'>
      print("Hello, " + name)
      # 如果用户输入 10
      num_str = input("Enter a number: ")
      print(type(num_str))  # <type 'str'>,它仍然是字符串
      # 如果需要进行数学计算,需要手动转换类型
      num = int(num_str)
      print(type(num))  # <type 'int'>

对比总结表

特性 Python 2 Python 3
推荐函数 raw_input() input()
input() 行为 将输入作为表达式求值,不安全 将输入作为字符串返回,安全
raw_input() 行为 将输入作为字符串返回,安全 已被移除

从 Python 2 迁移到 Python 3 时,所有 raw_input() 的地方都应该直接替换为 input(),并且所有 input() 的地方都需要仔细检查,因为它们的行为发生了根本性变化。


获取网络资源 (requests.get())

这是在“获取”网络数据时最常用的方法,但它属于第三方库 requests,而不是 Python 的内置功能,它的行为在 Python 2 和 Python 3 中是一致的

前提: 需要先安装库 pip install requests

示例代码 (在 Python 2.7+ 和 Python 3.x 中均可运行):

import requests
try:
    # 发送一个 GET 请求到 JSONPlaceholder API
    response = requests.get('https://jsonplaceholder.typicode.com/todos/1')
    # 检查请求是否成功 (状态码 200)
    response.raise_for_status()
    # .json() 方法会尝试将响应内容解析为 JSON
    # 在 Python 2 中,返回的是 dict; 在 Python 3 中,返回的是 dict
    data = response.json()
    print("获取到的数据类型:", type(data))
    print("用户ID:", data['userId'])
except requests.exceptions.RequestException as e:
    print("获取网络资源时出错:", e)

requests.get() 的使用与 Python 版本无关,只要确保安装了兼容的 requests 版本即可(requests 2.x 同时支持 Python 2.7 和 Python 3.x,而 requests 3.x 及以上只支持 Python 3)。


总结与建议

场景 Python 2 Python 3 关键区别
字典获取值 my_dict.get('key') my_dict.get('key') 无区别
获取用户输入 raw_input() (推荐) input() input() 在 Py3 中行为等同于 Py2 的 raw_input()
获取网络数据 requests.get() requests.get() 无区别 (取决于库版本)

给你的建议:

  1. 明确你的“get”指的是什么:是字典操作、用户输入还是网络请求?
  2. 优先使用 Python 3:Python 2 已在 2025 年停止支持,所有新项目都应使用 Python 3。
  3. 如果你在处理遗留的 Python 2 代码
    • 将所有 raw_input() 替换为 input()
    • 小心处理所有 input() 的调用,因为它们现在期望一个字符串表达式,而不是直接求值。
    • 字典的 .get() 方法可以放心使用,无需修改。
分享:
扫描分享到社交APP
上一篇
下一篇