2016-06-05 6 views
-1

Я пытаюсь сделать что-то, когда логическое значение из другой функции установлено на «True». Я попытался использовать return (variable), но когда дело доходит до функции, которая запрашивает bool, она всегда говорит False. Я взглянул сюда, прежде чем расспрашивать об этом, потому что я чувствовал, что это кажется действительно базовым. Но я не нашел ничего полезного. Надеюсь, кто-то может мне помочь. Вот мой код.Проверить boolean от другой функции

x = 0 
bool = False 

def functionA(x,bool): 
    if x is 0: 
     bool = True 


def functionB(bool): 
    print bool 
    if bool is True: 
     print "Halleluhja" 



functionA(x,bool) 
functionB(bool) 

print x, bool 
+2

Не указывайте переменную с именем 'bool'. – GLHF

+0

Благодарим за отзыв. Этот «bool» был только для целей тестирования. В моей работе я всегда стараюсь использовать простые простые имена для функций или переменных. Должно было сделать это и здесь! –

+0

WTF это с 'if bool is True 'вместо простого' if bool'? –

ответ

1

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

x = 0 
bool = False 

def functionA(x): 
    global bool 
    if x is 0: 
     bool = True 

def functionB(): 
    print bool 
    if bool is True: 
     print "Halleluhja" 

functionA(x) 
functionB() 

print x, bool 

Вариант 2 (предпочтительно) является на самом деле вернуть вещи, так что они могут быть переданы в другом месте:

x = 0 

def functionA(x): 
    if x is 0: 
     return True 
    else: 
     return False 

def functionB(bool): 
    print bool 
    if bool is True: 
     print "Halleluhja" 

bool = functionA(x) 
functionB(bool) 

print x, bool 

кроме этого, не следует использовать имя bool, используйте x == 0 вместо x is 0, functionA можно записать как только return x == 0 использовать if bool: вместо if bool is True: и использовать snake_case (function_a), а не camelCase.

-1

Прежде всего, не используйте переменную с именем bool. Это зарезервирован Python, например, как str,list,int и т.д.

Во-вторых, bool в глобальном масштабе, так что если вы хотите изменить его в функцию, вы должны определить его как global.

x = 0 
bool1 = False 

def functionA(x,bool): 
    global bool1 #now we have access to bool1 variable which is in global scope 
    if x is 0: 
     bool1 = True 


def functionB(bool): 
    print (bool1) 
    if bool is True: 
     print ("Halleluhja") 



functionA(x,bool1) 
functionB(bool1) 

print (x, bool1) 

Выход

>>> 
True 
Halleluhja 
0 True 
>>> 
+1

Это действительно сбивает с толку разбор 'bool' и' bool1'. –

0

https://docs.python.org/3.4/tutorial/controlflow.html#defining-functions:

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

Ваше назначение bool в functionA создает локальную переменную в functionA; он не присваивает глобальной переменной bool.

Смежные вопросы