【问题标题】:My code is running without calling variable in Python?我的代码在没有在 Python 中调用变量的情况下运行?
【发布时间】:2020-03-31 20:00:34
【问题描述】:

当我运行以下代码时,我的网站或 Steam 仍然打开。我不需要声明print(link)print(steam) 才能打开它们吗?

import os
import webbrowser
import subprocess
import random

urls = ['https://www.ft.com/', 
        'https://www.youtube.com/watch?v=xvqcFcfhUVQ',
        'https://roadmap.sh/backend',
        'https://www.youtube.com/watch?v=YYXdXT2l-Gg&list=PL-osiE80TeTskrapNbzXhwoFUiLCjGgY7']

foxpath = 'C:/Program Files/Mozilla Firefox/Firefox.exe %s'

link = webbrowser.get(foxpath).open(random.choice(urls))
steam = subprocess.call(['C:/Program Files (x86)/Steam/Steam.exe'])

为什么会这样?

我最终想通过函数调用运行程序,如下所示。

def wildcard():

    print(random.choice(link, steam))

wildcard()

【问题讨论】:

  • 没有所谓的“调用变量”。你调用函数
  • 什么没有意义......你的代码说得像 webbrowser.get.open。这只是说它会打开浏览器,而您在链接中存储的内容是打开该网站的结果。与蒸汽相同。 subprocess.call 将调用steam,您将打开steam的结果存储在一个名为steam的变量中。

标签: python


【解决方案1】:

不,print 没有什么特别之处。 print 只是一个函数,它接受一些值并将其显示给用户。

如果您改为使用steam = 3 * 4,您会惊讶地发现12 的值是计算出来的,并且steam 成为该值的名称,即使您不使用它做任何事情?这里也是一样的——调用subprocess.call 会导致程序启动,它与steam 名称无关,也与您随后对该名称做或不做的任何事情无关。

如果您要添加您想到的 print(steam) 行,它将显示的内容(在您关闭 Steam 并将控制权返回到您的程序后)是该程序的“返回代码” - 这将进入细节你的操作系统是如何工作的,但很可能是0

如果您想要一些可以稍后调用以启动 Steam 的东西 - 嗯,这是一个 函数。就像你已经知道该怎么做一样:

def steam():
    subprocess.call(['C:/Program Files (x86)/Steam/Steam.exe'])

【讨论】:

  • 谢谢!我现在明白了。
【解决方案2】:

只要您发出webbrowser.getsubprocess.call,它们就会执行。您的变量实际上是存储这些函数的返回值,而不是这些函数调用的别名。

如果您想按照您的意图对函数调用进行别名,您可以执行以下操作:

def open_link():
    return webbrowser.get(foxpath).open(random.choice(urls))

def open_steam():
    return subprocess.call(['C:/Program Files (x86)/Steam/Steam.exe'])

那么你的顶层将是:

def wildcard():
     random.choice([link, steam])()

wildcard()

注意随机选择函数的语法差异。有关更多说明,请参阅this 答案。

【讨论】:

    【解决方案3】:

    你确实调用了一些东西:

    steam = subprocess.call(['C:/Program Files (x86)/Steam/Steam.exe'])
    

    subprocess.call 的文档清楚地说明了 call 方法的作用:它将给定参数作为子进程调用。

    【讨论】:

      【解决方案4】:

      问题是您的代码不在函数内部,因此,当您执行它时,它会运行所有指令,包括 steam = subprocess.call(['C:/Program Files (x86)/Steam/Steam.exe']) 调用C:/Program Files (x86)/Steam/Steam.exe,打开你的steam应用。

      希望对你有帮助。

      【讨论】:

        【解决方案5】:

        谢谢,我现在明白了。我实际上只是通过以下方式解决了问题

        def wildcard():
            for x in range(1):
                rand = random.randint(1, 10)
                if rand > 5:
                    link = webbrowser.get(foxpath).open(random.choice(urls))
                else:
                    subprocess.call(['C:/Program Files (x86)/Steam/Steam.exe'])
        
        
        wildcard()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多