Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的程序在函数';括号?_Python_Function_Parameters - Fatal编程技术网

Python 为什么我的程序在函数';括号?

Python 为什么我的程序在函数';括号?,python,function,parameters,Python,Function,Parameters,我要问一个可能很愚蠢的问题。我设计了如下代码: import pandas as pd import seaborn as sns import matplotlib.pyplot as plt def menu(): print("[1]: Favorite color") print("[2]: Number of cats") #Option1 def FavColor(): sns.countplot(x= "C

我要问一个可能很愚蠢的问题。我设计了如下代码:

import pandas as pd 
import seaborn as sns
import matplotlib.pyplot as plt

def menu():
   print("[1]: Favorite color") 
   print("[2]: Number of cats")

#Option1
def FavColor():
   sns.countplot(x= "Color", data = main_data)
   plt.show()

#Option2
def NumCats():
   sns.countplot(x= "Cats", data = main_data)
   plt.show()

#Main Code

try:
   main_data = pd.read_csv("DATAFIN.csv")
except IOError:
   print("Error while trying to open the file")
else:
   menu()
   option = int(raw_input())
   if option == 1:
         FavColor()
   elif option == 2:
         NumCats()
主数据如下所示:

    Color   Cats
1    Blue      1
2    Yellow    2
3    Blue      2
4    Red       1
5    Blue      3
现在,“问题”是我的程序运行完全正常。然而,我刚刚意识到,我所有的函数options()、Option1()和Option2()都没有参数在括号内。这是因为我忘了这么做,但我的理解是,如果我不给函数提供需要使用的参数,它们就不能工作

例如,如果Option1必须使用精确的数据帧,我应该编写Option1(数据帧)


我的函数所需要的一切都是在主代码中定义的,您在调用函数之前都会经历主代码,所以这可能就是原因。但是不把参数放进去是错误的吗?它会降低我的程序的效率吗?

空括号表示它没有参数


定义新函数不会使函数运行。

空括号表示它没有参数


定义新函数不会使函数运行。

您只是碰巧引用了一个全局变量

这里有一个更简单的例子

def foo():
    print(x) 
    
x = 2
foo() 
x可以在函数之前或之后定义;函数定义捕获变量引用的闭包,而不是变量本身

另一方面,如果用局部变量定义一个主函数,它将不起作用

def foo():
    print(x) 
    
def main():
    x = 2
    foo() 

main()

一般来说,应避免使用全局变量,因此应使用参数,这些参数只是引用,为函数参数分配的内存空间开销可以忽略不计

这里有一个更简单的例子

def foo():
    print(x) 
    
x = 2
foo() 
x可以在函数之前或之后定义;函数定义捕获变量引用的闭包,而不是变量本身

另一方面,如果用局部变量定义一个主函数,它将不起作用

def foo():
    print(x) 
    
def main():
    x = 2
    foo() 

main()

一般来说,应避免使用全局变量,因此应使用参数,这些参数只是引用,为函数参数分配的内存空间开销可以忽略不计

谢谢!但我还是不明白。我的程序工作没有任何问题,就像我把参数放在括号里一样。这怎么可能?在这里,我编写了一个简化版的代码,但实际上每个函数都有5-10行长,而且都可以工作。@mcnew然后您需要发布您正在使用的确切代码。您发布的代码肯定无法运行,因为它试图使用一个不存在的变量。谢谢!但我还是不明白。我的程序工作没有任何问题,就像我把参数放在括号里一样。这怎么可能?在这里,我编写了一个简化版的代码,但实际上每个函数都有5-10行长,而且都可以工作。@mcnew然后您需要发布您正在使用的确切代码。你发布的代码肯定不会工作,因为它试图使用一个不存在的变量。首先,python2是生命的终结,你不应该使用它。第二,如果您使用的是未定义的变量,Python也会这样抱怨,所以您需要显示一个实际变量code@OneCricketeer很抱歉我刚完成编辑。非常感谢您的反馈。我知道python2是一个错误,但我已经被告知使用它,因为班上其他人都在使用它。我会升级soonSo,当你说“按它应该的方式运行”时-你能得到一个seaborn地块吗?您是否在Jupyter笔记本环境中运行此代码,其中可能已经存在对
main\u数据的引用?你的老师应该知道Python3已经上市十年了now@OneCricketeer是的,我得到的情节很好,我相信他们也是正确的。我在VisualStudio代码中运行它,但是在运行代码之前没有定义主数据。在我的环境中,除了.py代码之外,我只有DATAFIN.csv文件。首先,python2是生命的终结,你不应该使用它。第二,如果您使用的是未定义的变量,Python也会这样抱怨,所以您需要显示一个实际变量code@OneCricketeer很抱歉我刚完成编辑。非常感谢您的反馈。我知道python2是一个错误,但我已经被告知使用它,因为班上其他人都在使用它。我会升级soonSo,当你说“按它应该的方式运行”时-你能得到一个seaborn地块吗?您是否在Jupyter笔记本环境中运行此代码,其中可能已经存在对
main\u数据的引用?你的老师应该知道Python3已经上市十年了now@OneCricketeer是的,我得到的情节很好,我相信他们也是正确的。我在VisualStudio代码中运行它,但是在运行代码之前没有定义主数据。在我的环境中,除了.py代码之外,我只有DATAFIN.csv文件。非常感谢!这意味着,如果出于任何原因,我的主代码是一个函数,那么整个程序将无法运行。对吗?再次感谢您的帮助。您仍然可以在主函数之外读取该文件,但问题是变量作用域比任何东西都重要。明白了。再次感谢:)非常感谢!这意味着,如果出于任何原因,我的主代码是一个函数,那么整个程序将无法运行。对吗?再次感谢您的帮助。您仍然可以在主函数之外读取该文件,但问题是变量作用域比任何东西都重要。明白了。再次感谢:)