<p><strong>编辑:</strong>对于更新的需求-</p>
<blockquote>
<p>Sorry, I should have added some more details. Your solutions work well in that the browse() function is not executing immediately now. However, apart from that, I also want that the GUI prompts the user only once with the Browse dialog box. In your solution, the user is prompted once when they press Browse, and another time when they press File Mnipulator. I also edited my question to reflect what I am looking for.</p>
</blockquote>
<p>如果是这样的话,我想您可以定义某种类型的<code>global</code>变量,当调用<code>browse()</code>时会更新该变量,并使用它。如果全局变量是<code>None</code>或任何默认值,这意味着您第一次调用<code>file Manipulate</code>,那么让您的函数调用<code>browse()</code>方法。示例-</p>
<pre><code>import tkinter
from tkinter.filedialog import askopenfilename
inputfile = None
def browse():
global inputfile
inputfile=askopenfilename()
def fileManipulator(outfile="C:\\out\\File.kml"):
global inputfile
if inputfile is None:
browse()
#code that manipulates the file here
file.save(outfile)
root=tkinter.Tk()
browseButton=tkinter.Button(root,text="Browse",command=browse)
browseButton.pack()
fileButton=tkinter.Button(root,text="Manipulate file",command=fileManipulator)
fileButton.pack()
root.mainloop()
</code></pre>
<hr/>
<p><strong>原版:</strong></p>
<p>问题是函数的默认参数是在定义函数时执行的(而不是在调用函数时),这是出现诸如可变默认参数之类的GOTCHAs的主要原因,以及您的问题。在</p>
<p>如果您希望能够将<code>infile</code>作为参数发送,并且还能够使用<code>browse()</code>函数(如果没有提供)。我建议您使用<code>**kwargs</code>。示例-</p>
^{pr2}$
<hr/>
<p>另一个更简单的方法是使用默认值,例如<code>None</code>左右,然后如果<code>infile</code>是{<cd3>},则使用<code>browse()</code>方法-</p>
<pre><code>def fileManipulator(infile=None,outfile="C:\\out\\File.kml"):
if infile is None:
infile=browse()
#code that manipulates the file here
file.save(outfile)
</code></pre>
<p>但这与您最初尝试的不同,例如,如果您将函数称为-<code>fileManipulator(infile=None)</code>,这将导致<code>browse()</code>函数被调用。在</p>
<hr/>
<p>最后,如果您不需要<code>infile</code>/<code>outfile</code>作为参数,请不要将它们定义为默认参数,而是在函数体中定义它们-</p>
<pre><code>def fileManipulator():
infile=browse()
outfile="C:\\out\\File.kml"
#code that manipulates the file here
file.save(outfile)
</code></pre>
<hr/>
<p>来自<a href="https://docs.python.org/2/reference/compound_stmts.html#function-definitions" rel="nofollow">documentation -</a>的相关部分</p>
<blockquote>
<p><strong>Default parameter values are evaluated when the function definition is executed.</strong> This means that the expression is evaluated once, when the function is defined, and that the same “pre-computed” value is used for each call.</p>
</blockquote>