全局变量问题Python

时间:2013-03-08 01:34:46

标签: python string python-3.3

如果我今晚愚蠢,我不会,但由于某些原因,这在Python中不起作用。我试图在python中的函数中设置变量,每当我打印它们时,我得到一个'函数+函数名称+十六进制值而不是字符串',任何人都可以给我一些建议。

import sys


def serverAdd():
    global serverAdd
    if len(sys.argv) <2:
        serverAdd = input('Please enter server address:')
    else:
        serverAdd = sys.argv[1]

def serverPort():
    global portNumber
    if len(sys.argv) <3:
        portNumber = input('Please enter port number for server:')
    else:
        portNumber = sys.argv[2]


def serverPassword():
    global serverPassword
    if len(sys.argv)< 4:
        password = input('Please enter server password:')
    else:
        password = sys.argv[3]




serverAdd()
print(serverAdd)
serverPort()
print(serverPort)
serverPassword()
print(serverPassword)``

由于

4 个答案:

答案 0 :(得分:3)

在函数内声明全局:

def inputPass():
    global passNumber
    passNumber = input('Please enter pass number')

我个人我更喜欢避免使用全局变量而是写:

def inputPass():
    return input('Please enter pass number')

答案 1 :(得分:0)

在你的代码中,你不打印你在函数中所做的任何结果,你打印对函数本身的引用(这是名称,我假设函数在内存中的位置) 。

除了修复其他答案中讨论的全局变量外,还需要打印变量名,而不是函数引用。

答案 2 :(得分:0)

问题1

global serverAdd将覆盖您的serverAdd功能。如果你第二次打电话给serverAdd它将不再是一个功能。

问题2

serverPort中的全局portNumber,但您打印serverPort这是一个函数。

问题3

serverPassword中的全局password,但您打印serverPassword这是一个函数。

解决方案

使你的全局变量与你的函数名不同,并打印正确的全局变量。

OR

使用Python库来解析参数(argparsetutorial):

#!python3
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-s','--server')
parser.add_argument('-p','--port')
parser.add_argument('-w','--password')
args = parser.parse_args()

if args.server is None:
    args.server = input('server? ')
if args.port is None:
    args.port = input('port? ')
if args.password is None:
    args.password = input('pass? ')

print(args.server,args.port,args.password)

使用示例

C:\>example
server? Server
port? 123
pass? Password
Server 123 Password

C:\>example -s Server
port? 123
pass? Pass
Server 123 Pass

C:\>example -s Server -w pass
port? 123
Server 123 pass

C:\>example -s Server -w pass --port 123
Server 123 pass

你甚至可以得到帮助!

C:\>example -h
usage: example.py [-h] [-s SERVER] [-p PORT] [-w PASSWORD]

optional arguments:
  -h, --help            show this help message and exit
  -s SERVER, --server SERVER
  -p PORT, --port PORT
  -w PASSWORD, --password PASSWORD

答案 3 :(得分:-1)

当前代码的问题在于您声明的全局变量与函数同名! python中的函数是变量 - 因此,它们共享相同的命名空间!因此,当您访问变量名serverAddress时,Python必须确定您所指的是哪个serverAddress - 全局变量或局部变量(函数)。作为范围的工作原理,它首先引用局部变量。这就是为什么当你打印它时,它打印出函数信息,而不是全局变量。

工作代码如下:

import sys

def serverAdd():
  global serverAddress
  if len(sys.argv) <2:
    serverAddress = input('Please enter server address:')
  else:
    serverAddress = sys.argv[1]

def serverPort():
  global portNumber
  if len(sys.argv) <3:
    portNumber = input('Please enter port number for server:')
  else:
    portNumber = sys.argv[2]

def serverPassword():
  global password
  if len(sys.argv)< 4:
    password = input('Please enter server password:')
  else:
    password = sys.argv[3]


serverAdd()
print(serverAddress)

serverPort()
print(portNumber)

serverPassword()
print(password)