Последние два года я использую Python в качестве основного языка программирования. Я подумал, что, возможно, это хороший повод «углубиться», как я это сделал в «Хитрых вопросах по JavaScript». некоторые из следующих вопросов были проблемами, с которыми мне нужно было разобраться в моей нынешней работе, другие были вдохновлены Интернетом.
Итак, вы готовы отвлечься (от вопроса о Python)?
Примечание 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
Если вы сказали:
{"a": "string"}
к сожалению, вы ошибаетесь, ответ такой:
AttributeError: 'dict' object has no attribute 'a'
Если я вам нравлюсь и вы сначала пришли из JavaScript, словарь доступа (объект в Javascript) не указывается через точку, как в Javascript, вы можете получить доступ только с помощью [], а внутри ключа, который вы хотите установить, "a".
Вернуться к вопросу 1
Если вы сказали:
{"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
Если вы сказали:
arg2 == 2
Ты прав! В Python у нас есть три способа передачи аргумента:
def myFun(arg1): print(arg1) myFun('arg1')
def myFun(*arg1): print(*arg1) my_tuple = ('arg1', 'arg2') myFun(my_tuple)
Вернуться к вопросу 3
Ответ:
[2, 3, 4]
Некоторым людям, знающим области действия и назначения, этот вопрос может показаться довольно простым. Для тех, кто не знает, Python сохраняет переменную память как ссылку, поэтому в этом случае arr будет указывать на ссылку в памяти -> функция изменит значения (но все равно та же ссылка) -> arr2 будет получить ссылочный адрес arr, но после изменения значений.
Вернуться к вопросу 4
Спасибо, что прочитали эту статью. Надеюсь, вам понравилось и вы узнали что-то новое. Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте комментарий.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3