Python Forum
call a variable from one function to another ... - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: call a variable from one function to another ... (/thread-12855.html)



call a variable from one function to another ... - evilcode1 - Sep-16-2018

hello all ...
i need to call this variable ( filename )from function qassam() inside another fileex() ..
this is my code :

import os 
def qassam():
        filename = "/root/Downloads/scapy.txt"
        #return filename


def fileex():
    filename = qassam
    if os.path.isfile(filename):
        print("is there")
    else:
        print("else ... ")
        
fileex()
error :
Error:
Traceback (most recent call last): File "/tmp/ArpScanner/arp.py", line 15, in <module> fileex() File "/tmp/ArpScanner/arp.py", line 10, in fileex if os.path.isfile(filename): File "/usr/lib/python2.7/genericpath.py", line 37, in isfile st = os.stat(path) TypeError: coercing to Unicode: need string or buffer, function found



RE: call a variable from one function to another ... - Windspar - Sep-16-2018

Function variables are local to function. They cannot be shared.

options.
maybe have function return variable.
import os 
def qassam():
    filename = "/root/Downloads/scapy.txt"
    return filename
 
 
def fileex():
    filename = qassam()
    if os.path.isfile(filename):
        print("is there")
    else:
        print("else ... ")
         
fileex()
Make shared variables
import os 

class ShareVariables:
    filename = ""

def qassam():
    ShareVariables.filename = "/root/Downloads/scapy.txt"
 
 
def fileex():
    if os.path.isfile(ShareVariables.filename):
        print("is there")
    else:
        print("else ... ")

qassum()         
fileex()
My least favorite. Have global variable
import os 
filename = ""

def qassam():
    global filename
    filename = "/root/Downloads/scapy.txt"
 
 
def fileex():
    if os.path.isfile(filename):
        print("is there")
    else:
        print("else ... ")

qassum()         
fileex()



RE: call a variable from one function to another ... - evilcode1 - Sep-16-2018

but how its work while its not global ??? i try to use return and its working :
import os

def qassam():
        filename = "/root/Downloads/scapy.txt"
        return filename


def fileex():
    filename = qassam()
    #x = filename
    print(filename)
    if os.path.isfile(str(filename)):
        print("is there")
    else:
        print("else ... ")
        
fileex()



RE: call a variable from one function to another ... - Windspar - Sep-16-2018

Roughly. Low level stuff.
Anytime a function return a variable.
It is put on the stack.
Function closes.
Then stack item is assign to variable.

python bytecode.
import os
import dis

def qassam():
    filename = "/root/Downloads/scapy.txt"
    return filename


def fileex():
    filename = qassam()
    if os.path.isfile(filename):
        print("is there")
    else:
        print("else ... ")

dis.dis(fileex)
Output:
10 0 LOAD_GLOBAL 0 (qassam) 2 CALL_FUNCTION 0 4 STORE_FAST 0 (filename) 11 6 LOAD_GLOBAL 1 (os) 8 LOAD_ATTR 2 (path) 10 LOAD_METHOD 3 (isfile) 12 LOAD_FAST 0 (filename) 14 CALL_METHOD 1 16 POP_JUMP_IF_FALSE 28 12 18 LOAD_GLOBAL 4 (print) 20 LOAD_CONST 1 ('is there') 22 CALL_FUNCTION 1 24 POP_TOP 26 JUMP_FORWARD 8 (to 36) 14 >> 28 LOAD_GLOBAL 4 (print) 30 LOAD_CONST 2 ('else ... ') 32 CALL_FUNCTION 1 34 POP_TOP >> 36 LOAD_CONST 0 (None) 38 RETURN_VALUE



RE: call a variable from one function to another ... - gruntfutuk - Sep-16-2018

You do need to call the first function at some point if you want to exploit it later.

One approach, rather than returning a value or using globals is to set an attribute:

import os 
def qassam():
        qassam.filename = "words.csv"
 
def fileex():
    filename = qassam.filename
    if os.path.isfile(filename):
        print("is there")
    else:
        print("else ... ")

qassam()         
fileex()