#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. Это очень удобная функция, спасибо