首页 > 后端开发 > Python教程 > 棘手的 Python 问题

棘手的 Python 问题

PHPz
发布: 2024-07-25 01:00:52
原创
843 人浏览过

在过去的两年里,我一直使用Python作为我的主要编程语言。我想这也许是“深入研究”的一个很好的理由,就像我在《棘手的 JavaScript 问题》中所做的那样。接下来的一些问题是我在当前工作中需要处理的问题,其他问题则受到网络的启发。

那么你准备好让你的大脑大吃一惊了吗(来自 Python 问题)?

Tricky Python Questions

问题

注意事项1!:每个问题都有答案和解释(每个项目下方都有链接)。
注意事项 2!:对于每个问题,思考输出是什么。

问题1
exapmle_dict = dict()
exapmle_dict.a = "string"
print(exapmle_dict)
登录后复制

前往回答1

问题2
class Json:
    def __init__(self, *args, **kwargs):
        import json

    def print_dict_as_json(self, obj):
        print(json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})
登录后复制

前往回答2

问题3
def myFun(arg1, arg3, **kwargs):
    for key, value in kwargs.items():
        print("%s == %s" % (key, value))


my_dict = {'arg1':1, 'arg2': 2}
myFun(**my_dict, arg3=3)
登录后复制

前往回答3

问题4
def add_to_all_1(arr):
    for i in range(len(arr)):
        arr[i] +=1

def my_func():
    arr = [1,2,3]
    add_to_all_1(arr)
    arr2 = arr
    print(arr2)

my_func()
登录后复制

前往回答4

答案

回答问题 1

如果你说:

{"a": "string"}
登录后复制
登录后复制

不幸的是,你错了,答案是:

AttributeError: 'dict' object has no attribute 'a'
登录后复制

如果你像我一样是从 javascript 开始的,访问字典(Javascript 中的对象)不是像 Javascript 中的点那样,你只能通过 [] 访问,并且在你想要设置“a”的键内。

回到问题1

回答问题 2

如果你说:

{"a": "string"}
登录后复制
登录后复制

你又错了,答案是:

...
NameError: name 'json' is not define
登录后复制

您可能知道 Python 中本地作用域和全局作用域之间的区别(如果不知道,您应该阅读以下内容:Python 作用域)。 __init__ 是一个 函数 ,导入位于本地范围内,因此它不知道什么是 json。您可以通过像这样全局导入来修复它:

import json

class Json:
    def print_dict_as_json(self, obj):
        print(json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})
登录后复制

或者更高级的方式:

class Json:
    import json as json
    def print_dict_as_json(self, obj):
        print(self.json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})
登录后复制

您可以查看在类中使用 import 以获取更多详细信息。

回到问题2

回答问题 3

如果你说:

arg2 == 2
登录后复制

你说得对!在 Python 中,我们有 3 种传递参数的方法:

  • 根据论证本身:
def myFun(arg1):
   print(arg1)

myFun('arg1')
登录后复制
  • 通过 *args - 参数列表或元组(允许我们将可变数量的非关键字参数传递给 Python 函数):
def myFun(*arg1):
   print(*arg1)

my_tuple = ('arg1', 'arg2')
myFun(my_tuple)
登录后复制
  • 通过kwargs 可以传递 key=value 参数(kwargs 允许我们将可变数量的关键字参数传递给 Python 函数) - 就像问题中一样。 如果您想了解有关该主题的更多信息,可以在这里阅读:freecodecamp - How to Use *args and **kwargs in Python

回到问题3

回答问题 4

答案是:

[2, 3, 4]
登录后复制

对于一些了解范围和任务的人来说,这似乎是一个非常简单的问题。对于那些不知道的人来说,python将变量内存保存为引用,因此在这种情况下,arr将指向内存中的引用 ->该函数将更改值(但仍然是相同的引用)-> arr2 将获取 arr 的引用地址,但在修改值之后。

回到问题4

感谢您阅读这篇文章。我希望你喜欢并学到新东西。如果您有任何疑问或建议,请留言。

以上是棘手的 Python 问题的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板