1

私が今夜愚かであるかどうかはわかりませんが、何らかの理由でこれは Python では機能しません。Python内の関数に変数を設定しようとしていますが、それらを出力するたびに、「関数+関数の名前+文字列ではなく16進値」が表示されます。誰かアドバイスをください。

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

のグローバルはserverPortですがportNumberserverPortこれは関数です。

問題 3

グローバルインserverPasswordはありpasswordます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 に答える