Python - Возвращаемое значение функции - PullRequest
0 голосов
/ 06 сентября 2018

Этот пример - просто базовая программа - я новый кодер - учусь и экспериментирую, пока возиться. В настоящее время тестирую на Python 3.6 IDE и PyCharm - извиняюсь за двойной пробел - но выглядит беспорядочно без.

Требуется руководство по возврату значения из функции.

Пробовал десятки различных методов / искал форум, но самый близкий ответ, который этот непрофессионал мог понять, заявил, что мне нужно было использовать возвращаемое значение, иначе оно будет забыто .. Поэтому добавлено print (age_verification, "пример тестового значения). . ") в разных местах - но за пределами функции ничего не возвращается ..

Попытка возврата логических / целочисленных / строковых значений и адаптация - ничего для каждого варианта. Добавлена ​​переменная по умолчанию age_verification = False перед функцией // или // ссылкой на функцию в первый раз. Не влияет на возвращаемое значение, за исключением того, что в среде IDE не указана «неразрешенная ссылка»

Пробовал построчно визуализировать Python - но опять же - значение age_verification исчезает сразу после выхода из функции. : - (

=============================================== ===================

Использование 1 функции

def age_veri(age, age_verification) :

  if age < 18 :

    age_verification = False

    print(age_verification, " is false .. Printed to test variable ..")

    return age_verification

  elif age >= 18:

    age_verification = True

    print(age_verification, " is True.. Printed to test variable ..")

    return age_verification

  return age_verification # ( -- have tested with/without this single-indent line & with/without previous double-indent return age_verification line.)

age=int(input("Enter Your Age : ")

age_verification = False # ( -- have tried with / without this default value)

age_veri(age, False)

if age_verification is False:

  print("You failed Verification - Age is Below 18 .. ")

elif age_verification is True:

  print("Enter Website - Over 18yrs")

else:

  print(" Account not Verified .. ")

=============================================== ===================

Тот же пример - использование 2 функций

def age_variable(age):

   if age < 18:

      age_verification = False

      print (age_verification, " printing here to use value and help test function..")

      return age_verification

   elif age >= 18:

      age_verification = True

      print (age verification, " printing here to use value and help test function..")

      return age_verification

   return age_verification (tried with and without this line - single indent - same level as if / elif) 

def are_verified(age_verification):

   if age_verification is False:

      print("Age Verification Failed .. ")

   elif age_verification is True:

      print("Visit Website .. ")

   else:

      print("Verification Incomplete .. ")

age = int(input("Enter Your Age : ")

age_variable(age)

are_verified(age_verification)

=============================================== ===============

Любой совет приветствуется - тратится впустую большую часть сегодняшнего дня, ударяя головой о стену .. И заранее извиняюсь. Знайте, что это будет что-то действительно простое - но, похоже, использует то же форматирование, что и другие: -)

СПАСИБО

1 Ответ

0 голосов
/ 06 сентября 2018

print не возвращает значения, оно просто отображает значение для stdout или консоли.Если вы хотите вернуть значение с условиями, полезно понять область действия.Ваш комментарий относительно возврата переменных, в противном случае они будут "забыты", является правильным.Определенные переменные и not , возвращаемые функцией, исчезнут при выполнении функции:

def my_func(var1):
    var2 = var1
    var3 = 5
    return var3

print(my_func(1), var2)

Оператор print выдаст NameError, поскольку var2 не определеновне функции, и не возвращается.Для вашего примера вы хотели бы что-то вроде этого:

def age_verify(age):
    if age < 18:
        print("Failed Verification")
        return False
    else:
        print("Verification Complete")
        return True

# Call and assign to var
age = int(input("Enter Your Age : ")
age_verification = age_verify(age)

Таким образом, вы сохраняете возвращаемое значение как переменную age_verification

РЕДАКТИРОВАТЬ:

Вдалее расширим концепцию области, используя то же самое определение для my_func:

def my_func(var1):
    var2 = var1
    var3 = 5
    return var3

Мы присваиваем возвращаемую var3 переменной, например, так:

myvar = my_func(5)

Как отмечено,имя var3 на самом деле не возвращается, просто значение.Если бы я запускал

myvar = my_func(5)
print(var3)

, я бы получил NameError.Способ обойти это можно сделать следующим образом:

var3 = my_func(5)

, потому что теперь var3 определено в глобальной области видимости.В противном случае мне пришлось бы отредактировать свою функцию, чтобы сделать var3 global:

def my_func(var1):
    global var3
    var2 = var1
    var3 = 5
    # The return statement is then a bit redundant

my_func(5)

print(var3)
# prints 5 in global scope

Надеюсь, это немного яснее, чем мой первоначальный ответ

...