【问题标题】:Using python functions to return and compare使用python函数返回和比较
【发布时间】:2014-03-04 13:17:55
【问题描述】:
def main():
 port = 10000000
 portChecked = portChecker(port)
 if portChecked is portChecked:
  print '%d is in the portlist' % port

def portChecker(x):
 portCheck = range(65565)
 portList = list(portCheck)
 portCast = x

 if portCast in portList:
  return
 else:
  print '%d is not in the list' % portCast

if __name__ == '__main__':main()

开始学习python,用暴力python电子书,想写一个简单的函数来检查用户正在输入的端口(或静态值)

如果端口在范围内,程序将打印出 %d 在列表中,但是像这里一样,如果它在范围之外,两个打印语句都会执行。

我是否在函数调用、使用 return 语句时遗漏了某些内容,或者我是否以错误的方式看待这一点。

谷歌搜索,似乎没有给出类似的解决方案,大多数教程使用 int 或字符串。

感谢所有帮助。

【问题讨论】:

  • if portChecked is portChecked: 永远为真
  • 创建一个包含 65565 个整数的完整列表只是为了检查一个数字是否在一个区间内是错误的。使用这个:if 0 < x <= 65565.

标签: python function compare return


【解决方案1】:

您的代码存在一些问题:

  • portChecker 总是返回 None
  • portChecked is portChecked 总是评估为 True
  • 通常,将(部分)输出包含在检查函数中并不是一个好主意

试试这样的:

def checkPort(x):
    portList = range(65565)
    return x in portList

port = 10000
if checkPort(port):
    print '%d is in the port list' % port
else:
    print '%d is NOT in the list' % port

另外,请注意端口是from 1 to 65565,因此您应该检查它是否在range(1, 65565 + 1) 中。但是,除非您打算检查端口是否已被保留等,否则仅检查 1 <= x <= 65565 是否会更快更清晰。

【讨论】:

  • 我正在使用另一个函数中的 argparse 来传递端口值。以为我会使用这种形式而不是复制整个脚本。感谢您的帮助:)
【解决方案2】:

我不知道为什么还没有提到这一点。

您无需创建值列表(整数)来检查此范围内是否有某些值。 你可以写:

def check_port(port):
    return 0 <= port <= 65565

【讨论】:

  • 实际上,我确实 提到过(但只是顺便提一下),但最好稍微强调一下这部分。 ;-)
  • 顺便说一句,我想知道 OP 是否知道 range(65565) 不包含 65565
  • 啊,看起来简单多了,这是我的第一语言,没想到你可以这样使用return。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多