«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Сложные вопросы по Python

Сложные вопросы по Python

Опубликовано 29 июля 2024 г.
Просматривать:935

Последние два года я использую 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"})

Более подробную информацию можно увидеть, используя импорт внутри класса.

Вернуться к вопросу 2

Ответ на вопрос 3

Если вы сказали:

arg2 == 2

Ты прав! В Python у нас есть три способа передачи аргумента:

  • По самому аргументу:
def myFun(arg1):
   print(arg1)

myFun('arg1')
  • By *args — список или кортежи аргументов (позволяет нам передавать переменное количество аргументов, не являющихся ключевыми словами, в функцию Python):
def myFun(*arg1):
   print(*arg1)

my_tuple = ('arg1', 'arg2')
myFun(my_tuple)
  • С помощью kwargs можно передавать аргументы ключ=значение (kwargs позволяет нам передавать переменное количество аргументов ключевого слова в функцию Python) - как в вопросе. Если вы хотите узнать больше по этой теме, вы можете прочитать здесь: freecodecamp — Как использовать *args и **kwargs в Python.

Вернуться к вопросу 3

Ответ на вопрос 4

Ответ:

[2, 3, 4]

Некоторым людям, знающим области действия и назначения, этот вопрос может показаться довольно простым. Для тех, кто не знает, Python сохраняет переменную память как ссылку, поэтому в этом случае arr будет указывать на ссылку в памяти -> функция изменит значения (но все равно та же ссылка) -> arr2 будет получить ссылочный адрес arr, но после изменения значений.

Вернуться к вопросу 4

Спасибо, что прочитали эту статью. Надеюсь, вам понравилось и вы узнали что-то новое. Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте комментарий.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/tomeraitz/tricky-python-questions-45gg?1. В случае нарушения авторских прав свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3