Типы аргументов в функциях Python

Python Язык программирования

1. Введение

PythonТипы параметров функции относительно богаты, например, мы часто видим*argsи**kwargsкак параметр. Новички немного смущаются, когда сталкиваются с этим.Сегодня мы обсудимPythonПараметры функции анализируются и суммируются.

2. Параметры функции в Python

В Python определено 5 типов параметров функций, давайте продемонстрируем их один за другим.

2.1 Требуемые параметры

Обязательный параметр является самым основным типом параметра, когда вы находитесь вPythonКогда обязательный параметр определен в функции, ему должно присваиваться значение при каждом вызове, иначе будет сообщено об ошибке.

>>>def fun(a):
       print("a=",a) 
   
>>>fun('felord.cn')
a= felord.cn
>>>fun()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: fun() missing 1 required positional argument: 'a'

2.2 Параметры по умолчанию

Параметр по умолчанию — это параметр, имеющий значение по умолчанию.

>>>def fun(a="felord.cn"):
       print("a=",a) 
   
>>>fun()
a= felord.cn
>>>fun("Felordcn")
a= Felordcn

Давайте рассмотрим следующую ситуацию:

>>>def fun(a=[]):
       a.append("foo")
       print("a=",a)
    
>>>fun()
a= ['foo']
>>>fun()
a= ['foo', 'foo']
>>>fun()
a= ['foo', 'foo', 'foo']

Что тут происходит? параметры для каждого вызоваaВсе "запоминают" исходное значение, это потому чтоPythonКогда функция определена, параметры по умолчаниюaзначение инициализируется[],фактическиaтакже является переменной, которая указывает на объект[], каждый раз, когда функция вызывается, она изменяетсяaзначение изменитсяaЗначение объекта, на который указывает указатель. когда ты будешьaЭтого не происходит, когда значение по умолчанию определено как неизменяемый объект, вы можете попробовать то, что я сказал.

Итак, при определении параметров по умолчанию имейте в виду: параметры по умолчанию должны указывать на неизменяемые объекты!

2.3 Переменные параметры

Есть много сценариев, когда мы не уверены в количестве параметров, то есть параметры являются переменными. Сначала вы можете подумать об использованииlistилиtuple(кортеж) для инкапсуляции нескольких параметров, но как мы можем сказать по семантике функции, что это переменный параметр? Итак, мы идентифицируем префиксом*чтобы объявить, что параметр является переменным параметром, обычно записывается как*args, вы также можете написать*params.argsсохранит все параметры в одинtuple. Продемонстрируем функцию суммирования:

>>>def calc(*args):
       total=0
       for i in args:
           total+=i
       return total        
 
>>>calc(1)
1
>>>calc(1,2,3,4,5)
15
>>>calc()
0

2.4 Аргументы ключевых слов

Параметры ключевых слов также являются способом реализации любого количества параметров, разница в том, что переменные параметры хранятся как одинtupleПараметр ключевого слова хранит имя параметра и соответствующее значение параметра, который мы передаем какdict(Словарь). обычно пишется как**kwargsЧтобы отличить его от вариативных параметров, на самом делеkwэтоkeywordаббревиатура от. Давайте попробуем:

>>>def mapper(**kwargs):
       print(kwargs)
    
>>>mapper()
{}
>>>mapper(name="felord.cn")
{'name': 'felord.cn'}

2.5 Аргументы с именованными ключевыми словами

Для аргументов ключевого слова вызывающая функция может передавать любые неограниченные аргументы ключевого слова. Что касается того, какие ключевые слова передаются, нам нужно явно проверить внутри функции, чтобы определить.Такой шаблонный код часто не имеет отношения к нашим намерениям. ТакPythonМожно ли ограничить имя самого ключевого параметра? Есть конечно! Для этой цели мы можем использовать именованные аргументы ключевого слова. существует*,послевнимательно следил за непрерывнымАргументы, не являющиеся переменными и не являющиеся ключевыми словами, называются аргументами ключевых слов. Также продемонстрируем:

>>>def info(name,*,age,city):
       print("name=",name,"age=",age,"city=",city)
     
>>>info("felord.cn")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: info() missing 2 required keyword-only arguments: 'age' and 'city'
>>>info("felord.cn",city="beijing",age=20)
name= felord.cn age= 20 city= beijing

В соответствии с вышеизложенным вы можете найти другие правила.Кроме того, именованные параметры ключевого слова также могут устанавливать значение ключевого слова по умолчанию, но параметр должен быть передан с ключевым словом

>>>def info(name,*,age=20,city):
       print("name=",name,"age=",age,"city=",city)
    
>>>info("felord.cn",city="beijing")
name= felord.cn age= 20 city= beijing
>>>info("felord.cn","beijing")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: info() takes 1 positional argument but 2 were given

3. Комбинация параметров

Эти 5 параметров можно использовать в комбинации, и порядок определения **параметров должен быть следующим: обязательные параметры, параметры по умолчанию, переменные параметры/параметры с именованными ключевыми словами и параметры ключевых слов. Обратите внимание, в частности, что аргументы с переменным числом аргументов нельзя смешивать с аргументами с именованными ключевыми словами. ** Для любой функции вы можете передать что-то вродеfunction(args, *kw), независимо от того, как определены его параметры. Из-за нехватки места я не буду приводить примеры по одному, вы можете проверить сами.

4. Резюме

PythonФункция имеет очень гибкую форму параметров, которая может реализовывать как простые вызовы, так и очень сложные параметры. Там тоже много деталей, да и типы параметров тоже изучаютсяPythonКлючевой момент знания функции.

关注公众号:Felordcn获取更多资讯

Личный блог: https://felord.cn