Параметры и аргументы функций Python

#python #function #parameters #arguments

Вопрос:

Я хочу лучше понимать функции и аргументы, я читал, и это моя реализация того, что я прочитал.

У меня есть 3 небольшие функции, чтобы проиллюстрировать свою точку зрения.

Сбор пользовательских данных, функция сортировки и основная.

 def score(num1: int):
    print("Please Enter Your Score: ")
    num1 = int(input())
    grade(num1)


def grade(num1: int):
    if int(num1) in range(0,30):
        print("Grade U")
    if int(num1)in range(30,40):
        print("Grade D")
    if int(num1)in range(40,60):
        print("Grade C")
    if int(num1)in range(60,80):
        print("Grade B")
    if int(num1)>79:
        print("Grade A")


def main():
    print("Hi")
    score(1)
 

Если я запускаю основную функцию без ее аргумента (1), это приводит к ошибке поиска аргумента. Я знаю, что я объявил в функции, что у нее есть параметр (так как я хочу, чтобы это было возвращаемое значение), но как бы я вызвал функцию оценки без ее аргумента??
Например

 def main()
print("hi")
score()
 

Я предполагаю, что функции вызываются без параметров, а аргументы передаются в параметры из определения функции (через пользовательский ввод).

Может ли кто-нибудь привести пример того, как я мог бы это сделать, не прибегая к фиктивной переменной (1) при вызове функции оценки?

Комментарии:

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

2.Почему score принимает параметр, который затем немедленно игнорируется в пользу пользовательского ввода?

3. @jonrsharpe Я не знал, что он игнорирует параметр, я думал, что говорю функции, что она ищет переменную, которую я назначил для ввода

4. @rv.kvetch теперь понятно, почему мне пришлось определить num1 как int, чтобы функция оценки работала с переменной. Спасибо

Ответ №1:

Вот один из способов, которым я бы это сделал:

 def score():
    print("Please Enter Your Score: ")
    num1 = int(input())
    grade(num1)


def grade(num1: int):
    if 0 <= num1 < 30:
        print("Grade U")
    elif 30 <= num1 < 40:
        print("Grade D")
    elif 40 <= num1 < 60:
        print("Grade C")
    elif 60 <= num1 < 80:
        print("Grade B")
    elif num1 >= 80:
        print("Grade A")


def main():
    print("Hi")
    score()


if __name__ == '__main__':
    main()
 

Если вы хотите по-прежнему иметь возможность передавать параметр в функцию оценки, например score(1) , то вместо этого вы можете назначить функции необязательный параметр. Затем считывайте вводимые пользователем данные только в том случае, если num1 они не передаются в функцию оценки.

 def score(num1=None):
    if num1 is None:
        print("Please Enter Your Score: ")
        num1 = int(input())

    grade(num1)
 

Использование:

 def main():
    print("Hi")
    score(1)
 

Комментарии:

1. Спасибо вам за ваш вклад, я ценю его. Чтобы уточнить, при создании параметра для функции переменная передается в функцию? Я создал его так, как я сделал, чтобы передать переменную из функции, но, похоже, мне не нужно этого делать, скорее просто передайте переменную другой функции внутри исходной функции. Это правда?

2. @ChristAHFER Да, это правильно, когда вы определяете параметр для функции, эта переменная всегда присутствует в области действия функции и может использоваться так, как если бы эта переменная была определена с помощью оператора присваивания, например x=1 . Вы также можете проверить locals() объект в Python изнутри функции, и он будет содержать все переменные, которые уже были определены и которые являются локальными для самой функции.

3. Например, в примере функции я бы предложил, чтобы такая строка x = 2 создавала локальную переменную x и инициализировала ее значением, а затем распечатывала locals() ее в следующей строке, чтобы было легче увидеть, какие локальные переменные доступны в области действия функции.

4. Это очень удобная функция, спасибо