python - 为什么我的程序在函数括号内不带参数运行?
问题描述
我可能会问一个非常愚蠢的问题。我设计了一个如下所示的代码:
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)。
我的函数需要你的一切都在主代码中定义,你在调用函数之前要经历这些,所以也许这就是原因。但是不把参数放在里面有错吗?它会使我的程序效率降低吗?
解决方案
你只是碰巧指的是一个全局变量
这是一个更简单的例子
def foo():
print(x)
x = 2
foo()
x 可以在函数之前或之后定义;函数定义捕获变量引用的闭包,而不是变量本身
另一方面,如果你用局部变量定义了一个主函数,它就不起作用
def foo():
print(x)
def main():
x = 2
foo()
main()
一般来说,应该避免使用全局变量,因此应该使用参数,这些参数只是引用,分配给函数参数的内存空间开销可以忽略不计
推荐阅读
- ios - 更改数据源时 UICollectionView 中的平滑动画
- string - 是否有一个简单的函数来制作一个字符列表的字符串?
- spring-boot - 有没有办法在 Spring Boot 2 Actuator 中禁用 ReactiveHealthIndicators?
- python - matplotlib 极坐标图刻度/轴标签位置
- powershell - 从 powershell 获取“特定时间”数组 (IIS) 的值
- clips - CLIPS - 我如何提示用户,直到他们输入有效的输入
- javascript - 添加和/或删除整个下拉选择列表
- react-native - 将 Native ScrollView 反应到默认位置
- logging - 如何在 magento 2.3 中启用或生成用户操作日志?
- bar-chart - 出现在海滨条形图中的直线