首页 > 解决方案 > 为什么我的程序在函数括号内不带参数运行?

问题描述

我可能会问一个非常愚蠢的问题。我设计了一个如下所示的代码:

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()

main_data 看起来像这样:

    Color   Cats
1    Blue      1
2    Yellow    2
3    Blue      2
4    Red       1
5    Blue      3

现在,“问题”是我的程序完全按照它应该运行的方式运行。然而,我刚刚意识到,我的所有函数 options()、Option1() 和 Option2() 在括号内都没有参数。这是因为我忘记了这样做,但我的理解是,如果没有我给它们提供需要使用的参数,我的函数就不应该工作。

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

我的函数需要你的一切都在主代码中定义,你在调用函数之前要经历这些,所以也许这就是原因。但是不把参数放在里面有错吗?它会使我的程序效率降低吗?

标签: pythonfunctionparameters

解决方案


你只是碰巧指的是一个全局变量

这是一个更简单的例子

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

x 可以在函数之前或之后定义;函数定义捕获变量引用的闭包,而不是变量本身

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

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

main()

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


推荐阅读