Почему оператор моржа не передает аргументы ключевого слова?
Почему оператор моржа не передает аргумент ключевого слова figsize
к matplotlib.pyplot.figure
в этом коде?
#TODO: visualize whether the index is a valid x_value
fontsize=21
plt.figure(figsize:=(8,8))
plt.scatter(x_values_theory, y_values_theory, label='Theory')
plt.scatter(x_values_experimental, y_values_experimental, label='Experiment')
plt.xlabel('xlabel', fontsize=fontsize)
plt.ylabel('ylabel', fontsize=fontsize)
plt.legend(fontsize=fontsize)
plt.tick_params(labelsize=fontsize)
plt.show()
дает
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-55-94183c23eb8f> in <module>
1 #TODO: visualize whether the index == df.[time
2 fontsize=21
----> 3 plt.figure(figsize:=(8,8))
4 plt.scatter(x_values_theory, y_values_theory, label='Theory')
5 plt.scatter(x_values_experimental, y_values_experimental, label='Experiment')
/usr/local/lib/python3.8/site-packages/matplotlib/pyplot.py in figure(num, figsize, dpi, facecolor, edgecolor, frameon, FigureClass, clear, **kwargs)
649 num = allnums[inum]
650 else:
--> 651 num = int(num) # crude validation of num argument
652
653 figManager = _pylab_helpers.Gcf.get_fig_manager(num)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple'
1 ответ
Аргументы ключевого слова указываются с помощью =
не :=
. Согласно PEP:
В
:=
оператор может использоваться непосредственно в аргументе позиционного вызова функции; однако он недействителен непосредственно в аргументе ключевого слова.
Так это значит
plt.figure(figsize:=(8,8))
эквивалентно
figsize = (8,8)
plt.figure(figsize)
Итак, ваш код должен работать, если вы просто используете правильный оператор:
plt.figure(figsize=(8,8))
Если вы хотите назначить и передать аргумент ключевого слова одновременно, вам нужно написать обе эти вещи, например:
plt.figure(figsize=(figsize:=(8,8)))
Обратите внимание, что круглые скобки обязательны.