1

如果我今晚很愚蠢,我不会这样做,但由于某种原因,这在 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

4 回答 4

3

在函数内部声明全局性:

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

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

def inputPass():
    return input('Please enter pass number')
于 2013-03-08T01:41:43.013 回答
0

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

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

于 2013-03-08T02:10:20.427 回答
0

问题 1

global serverAdd将覆盖您的serverAdd功能。如果您serverAdd第二次调用,它将不再是一个函数。

问题 2

全局 inserverPortportNumber,但您打印serverPort的是函数。

问题 3

全局 inserverPasswordpassword但你打印serverPassword的是一个函数。

解决方案

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

或者

使用 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
于 2013-03-08T03:39:21.280 回答
-1

当前代码的问题是您声明与函数同名的全局变量!python 中的函数是变量——因此,它们共享相同的命名空间!因此,当您访问变量名时,serverAddressPython 必须确定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)
于 2013-03-08T01:41:17.217 回答