Я написал следующий код, который отлично работает, когда я передаю символ или строку в качестве ключа.
def myfunc(**num):
for i in num:
print(i, num[i])
myfunc(a = "One", b = "Two")
Однако, когда я пытаюсь передать целые числа вместо a или b, например:
myfunc(1 = "One", 2 = "Two")
Я получаю следующее сообщение:
SyntaxError: expression cannot contain assignment, perhaps you meant "= = "?
Могу ли я что-нибудь с этим поделать?
@GalodoLeste Я бы хотел создать такой словарь: {1: «Один», 2: «Два»}
Это невозможно, так как все аргументы ключевых слов должны быть строками . С технической точки зрения, как отметил Брайан , аргументы ключевого слова синтаксически должны быть идентификаторами по определению.
Сообщение об ошибке, которое получает ваш пример, загадочно, но вы можете легко продемонстрировать это, передав словарь с целочисленными ключами в качестве аргументов ключевого слова:
def myfunc(**num):
for i in num:
print(i, num[i])
myfunc(**{1: 'one', 2: 'two'})
# TypeError: keywords must be strings
Если вы должны использовать целые ключи, просто передайте словарь в качестве аргумента и избегайте всех проблем:
def myfunc(num):
for i in num:
print(i, num[i])
myfunc({1: 'one', 2: 'two'})
@DanielHao Мне нравится использовать почтовый архив python-dev. Это конкретное я сохранил в своем списке для чтения некоторое время назад (я обычно делаю это, когда натыкаюсь на что-то, что может быть полезно позже).
Я думаю, что будет ясно/правильнее сказать, что аргументы ключевого слова синтаксически должны быть идентификаторами. То есть, в конце концов, именно так они определены.
@ Брайан Хороший звонок, я отредактировал свой ответ. Просто для простоты / ради новичка я оставил в оригинале, но добавил ваше примечание рядом с ним.
def print_value(my_dict, key):
print(my_dict[key])
# Define a dictionary
my_dict = {1: 'one', 2: 'two', 3: 'three'}
# Pass an integer key to the function
print_value(my_dict, 2) # Output: two
это то, что вы после?
Это далеко не похоже на код OP и не отвечает на вопрос.
Извините, а зачем вам передавать целые числа в качестве имен аргументов? Ты действительно хотел это сделать или пытался вызвать
myfunc(a=1, b=2)