如果我今晚愚蠢,我不会,但由于某些原因,这在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)``
由于
答案 0 :(得分:3)
在函数内声明全局:
def inputPass():
global passNumber
passNumber = input('Please enter pass number')
我个人我更喜欢避免使用全局变量而是写:
def inputPass():
return input('Please enter pass number')
答案 1 :(得分:0)
在你的代码中,你不打印你在函数中所做的任何结果,你打印对函数本身的引用(这是名称,我假设函数在内存中的位置) 。
除了修复其他答案中讨论的全局变量外,还需要打印变量名,而不是函数引用。
答案 2 :(得分:0)
global serverAdd
将覆盖您的serverAdd
功能。如果你第二次打电话给serverAdd
它将不再是一个功能。
serverPort
中的全局portNumber
,但您打印serverPort
这是一个函数。
serverPassword
中的全局password
,但您打印serverPassword
这是一个函数。
使你的全局变量与你的函数名不同,并打印正确的全局变量。
使用Python库来解析参数(argparse,tutorial):
#!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)